1. ホーム
  2. java

[解決済み] 2つのベクトルの余弦類似度はどのように計算するのですか?

2022-02-08 19:04:36

質問

ベクトル間の余弦類似度を求めるには?

2行のテキスト間の関連性を測定するために類似度を求める必要があります。

例えば、こんな2つの文章があります。

<ブロッククオート

ユーザーインターフェイスのためのシステム

ユーザーインターフェースマシン

...そして、tF-idfの後にそれぞれのベクトルを、LSIを使用して正規化します。 [1,0.5][0.5,1] .

これらのベクトル間の親密度はどのように測定すればよいのでしょうか?

どのように解決するのですか?

public class CosineSimilarity extends AbstractSimilarity {

  @Override
  protected double computeSimilarity(Matrix sourceDoc, Matrix targetDoc) {
    double dotProduct = sourceDoc.arrayTimes(targetDoc).norm1();
    double eucledianDist = sourceDoc.normF() * targetDoc.normF();
    return dotProduct / eucledianDist;
  }
}

最近、大学の情報検索のユニットでtf-idfをいくつかやりました。 このCosine Similarityという手法を使いました。 ジャマ。Java マトリックスパッケージ .

全ソースコードについては JavaによるIR数学 : 類似性測定 このリソースは、いくつかの異なる類似性測定法をカバーする、本当に良いリソースです。