コンテンツへスキップ
uencoder

テキスト間のコサイン類似度を計算する

コサイン類似度はテキストベクトル間の角度を測り、意味的な類似度を示します。検索、クラスタリング、レコメンデーションに使われます。

  1. 1

    コサイン類似度 = dot(A, B) / (|A| × |B|)。A と B は単語頻度(または TF-IDF)ベクトルです。値は 0(共通項目なし)から 1(同一方向)までの範囲をとります。ユークリッド距離と異なり文書長の影響を受けません。単語の割合が同じで長さが異なる 2 つの文書の類似度は 1 になります。テキストをベクトル(TF または TF-IDF)に変換してからコサインを計算します。

  2. 2
    ワードカウント →

    各テキストを単語頻度ベクトルに変換します。語彙は両テキストの全単語の和集合です。各テキストは単語カウントのベクトルになります。より良い結果を得るには生のカウントではなく TF-IDF 重みを使ってください。TF-IDF はありふれた単語の重みを下げます。

  3. 3
    文字出現頻度統計 →

    文字レベルの類似度(コード、DNA、非テキストに有用)には、単語ベクトルの代わりに文字頻度ベクトルを使います。これにより、より細かいパターンを捉えられ、単語境界のないテキスト(CJK 言語)にも対応できます。

よくある質問

コサイン類似度はいつ使うべきですか?
文書長を問題にしないテキスト比較に使います。検索の関連性(クエリと文書)、文書クラスタリング、重複検出、レコメンドシステムなどです。テキストベクトルの標準的な類似度指標です。長さが重要なタスク(剽窃検出)には他の指標を使ってください。
コサインと Jaccard とユークリッドの違いは?
コサインはベクトル間の角度(長さ不変)で、テキストに最適です。Jaccard は集合の積集合/和集合で、存在/不在のバイナリデータに最適です。ユークリッドは直線距離で、長さに敏感です。テキストにはコサイン、集合には Jaccard、空間データにはユークリッドが標準です。

このタスクを解決するワークフロー

関連ツール