Apache Sparkでコサイン類似度を計算する


9

特定の単語のIDFが計算されたDataFrameがあります。例えば

(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を計算できます。データフレーム内のすべてのドキュメントを含むクエリのコサイン類似度を計算するにはどうすればよいですか(100万のドキュメントに近い)

ベクトルの乗算を使用して、map-reduceジョブで手動で実行できます

コサイン類似度(Q、ドキュメント)=ドット積(Q、ドキュメント)/ || Q || * ||ドキュメント||

しかし確かにSpark MLはテキストのコサイン類似度の計算をネイティブでサポートする必要がありますか?

言い換えると、検索クエリが与えられた場合、DataFrameからドキュメントTF-IDFの最も近い余弦をどのように見つけるのですか?


3
あなたは、Sparkのを利用することができノーマますが、「すべてのペアの類似性」、に興味がある場合、および点心
Emre Emre

回答:


8

こちらのSparkリポジトリに、問題の関連例があります。戦略は、ドキュメントをRowMatrixとして表し、そのcolumnSimilarities()メソッドを使用することです。これにより、すべてのコサイン類似性のマトリックスが得られます。クエリドキュメントに対応する行を抽出し、並べ替えます。これにより、最も類似したドキュメントのインデックスが得られます。

アプリケーションによっては、この作業のすべてを事前クエリで実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.