【问题标题】:Cosine-similarity between columns in a Spark dataframeSpark数据框中列之间的余弦相似度
【发布时间】:2019-07-21 18:22:05
【问题描述】:

我的数据看起来像这样...

+-----------+--------------------+
| searchterm|               title|
+-----------+--------------------+
|red ball   |A big red ball      |
|red ball   |A small blue ball   |
|...        |...                 |
+-----------+--------------------+

我正在尝试在 Scala 中查找 searchterm 列和 title 列之间的余弦相似度。我能够毫无问题地标记每一列,但是我发现在线的大多数相似性实现都是跨行而不是跨列操作的,即他们会将“一个大红球”与“一个小蓝球”进行比较,而不是跨列比较我其实想要。有任何想法吗?我对 Scala 很陌生,但这就是我在 Python 中的做法。

def get_text_cosine_similarity(row):

  # Form TF-IDF matrix
  text_arr = row[['searchterm', 'title']].values
  tfidf_vectorizer = TfidfVectorizer()
  tfidf_matrix = tfidf_vectorizer.fit_transform(text_arr)

  # Get cosine similarity 'score', assuming keyword is at index 0
  similarity_scores = cosine_similarity(tfidf_matrix[0], tfidf_matrix)

  return pd.Series(similarity_scores[0][1:])


df[['title_cs']] = df.apply(get_text_cosine_similarity, axis=1)

使用sklearn.metrics.pairwise.cosine_similaritysklearn.feature_extraction.text.TfidfVectorizer

【问题讨论】:

    标签: scala apache-spark nlp cosine-similarity


    【解决方案1】:

    你可以转置矩阵,然后做余弦相似度

    【讨论】:

    • 我正在寻找 Scala 中的解决方案
    • 我不知道scala,但转置矩阵似乎没有那么具有挑战性
    • 是的,考虑到数据集的大小,转置在 spark 中是不可行的。
    猜你喜欢
    • 2021-05-29
    • 2020-07-18
    • 2017-04-04
    • 1970-01-01
    • 2020-02-11
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多