在 Apache Spark 中计算余弦相似度

数据挖掘 机器学习 nlp 阿帕奇火花 余弦距离
2021-10-14 07:18:01

我有一个 DataFrame,其中计算了某些单词的 IDF。例如

(10,[0,1,2,3,4,5],[0.413734499590671,0.4244680552337798,0.4761400657781007, 1.4004620708967006,0.37876590175292424,0.48374466516332])



 .... and so on

现在给一个查询 Q,我可以计算这个查询的 TF-IDF。如何计算查询与数据框中所有文档的余弦相似度(有近百万个文档)

我可以通过使用向量乘法在 map-reduce 作业中手动完成

余弦相似度(Q,文档)=点积(Q,文档)/||Q|| * ||文件||

但是 Spark ML 肯定必须原生支持计算文本的余弦相似度吗?

换句话说,给定一个搜索查询,我如何从 DataFrame 中找到文档 TF-IDF 的最接近余弦?

1个回答

Spark repo 中有一个与您的问题相关的示例策略是将文档表示为RowMatrix,然后使用其 columnSimilarities() 方法。这将为您提供所有余弦相似性的矩阵。提取与您的查询文档对应的行并进行排序。这将给出最相似文档的索引。

根据您的应用程序,所有这些工作都可以在查询前完成。