web-dev-qa-db-ja.com

コサイン類似度とtf-idf

TF-IDFおよびCosine Similarityに関する次のコメントに混乱しています。

私は両方で読んでいて、次にコサイン類似性の下でウィキで私はこの文を見つけました負。2項の周波数ベクトル間の角度は90を超えることはできません。」

今、私は疑問に思っています....彼らは2つの異なるものではありませんか?

Tf-idfはすでにコサイン類似度内にありますか?はいの場合、一体何なのか-内点積とユークリッド長のみが表示されます。

Tf-idfはあなたができることだと思っていましたbeforeテキストでコサイン類似度を実行します。私は何か見落としてますか?

29
N00programmer

Tf-idfは、テキストに適用して2つの実数値ベクトルを取得する変換です。次に、ドットの積を取り、それをノルムの積で割ることにより、任意のベクトルのペアのコサイン類似度を取得できます。これにより、ベクトル間の角度の余弦が得られます。

Ifd2 およびqはtf-idfベクトルであり、

enter image description here

ここで、θはベクトル間の角度です。 θの範囲は0〜90度なので、cosθの範囲は1〜0です。θcanの範囲は0〜90度のみです。tf-idfベクトルは負でないためです。

Tf-idfとコサイン類似性/ベクトル空間モデルの間には特に深い関係はありません。 tf-idfは、ドキュメント用語マトリックスで非常にうまく機能します。ただし、そのドメインの外部での使用があり、原則として、VSMで別の変換を置き換えることができます。

(式は Wikipedia から取られたため、d2

33
Fred Foo

TF-IDFは、テキスト内のトークンの重要性を測定する方法です。ドキュメントを数値のリストに変換する非常に一般的な方法です(コサインを取得する角度の1つのエッジを提供するベクトルという用語)。

コサイン類似度を計算するには、2つのドキュメントベクトルが必要です。ベクトルはインデックス付きの各一意の用語を表し、そのインデックスでの値は、その用語がドキュメントにとって、またドキュメントの一般的な類似性の一般的な概念にとってどれほど重要であるかの尺度です。

ドキュメント内で各用語が出現した回数を数えるだけです([〜#〜] t [〜#〜]erm[〜#〜] f [〜#〜]requency)、その整数の結果をベクトルの用語スコアに使用しますが、結果はあまり良くありません。非常に一般的な用語(「is」、「and」、「the」など)により、多くのドキュメントが互いに類似しているように見えます。 (これらの特定の例は ストップワードリスト を使用して処理できますが、ストップワードと見なされるほど一般的ではない他の一般的な用語は同じ種類の問題を引き起こします。Stackoverflowでは、 "question"このカテゴリに分類されます。料理のレシピを分析している場合は、おそらく「卵」という言葉で問題が発生するでしょう。)

TF-IDFは、各用語が一般的にどの程度頻繁に発生するかを考慮して、未処理の用語頻度を調整します([〜#〜] d [〜#〜] ocument[〜#〜] f [〜#〜]requency)。 [〜#〜] i [〜#〜]nverse[〜#〜] d [〜#〜] ocument[〜#〜] f [〜#〜]頻度は通常、文書数を分割したログです。用語が出現するドキュメントの数(Wikipediaの画像):

IDF, credit to wikipedia

「ログ」は、長期的に物事がうまくいくのを助けるマイナーなニュアンスと考えてください-引数が大きくなると大きくなるため、用語がまれな場合、IDFは高くなります(多くのドキュメントをごく少数のドキュメントで割ったもの) 、用語が共通の場合、IDFは低くなります(多くのドキュメントを多くのドキュメントで割った値〜= 1)。

100個のレシピがあり、1個を除くすべてがeggを必要としている場合、最初のドキュメントに1回、2番目のドキュメントに2回、3番目のドキュメントに1回、「Egg」という単語を含む3つのドキュメントがあります。各ドキュメントの「卵」の用語頻度は1または2であり、ドキュメント頻度は99です(または、新しいドキュメントを数える場合は、おそらく102です。99に固執しましょう)。

「卵」のTF-IDFは次のとおりです。

1 * log (100/99) = 0.01    # document 1
2 * log (100/99) = 0.02    # document 2
1 * log (100/99) = 0.01    # document 3

これらはすべて非常に小さな数字です。対照的に、100個のレシピコーパスのうち9個でのみ発生する別の単語「ルッコラ」を見てみましょう。最初のドキュメントでは2回、2番目のドキュメントでは3回発生し、3番目のドキュメントでは発生しません。

「ルッコラ」のTF-IDFは次のとおりです。

1 * log (100/9) = 2.40  # document 1
2 * log (100/9) = 4.81  # document 2
0 * log (100/9) = 0     # document 3

「arugula」は、少なくとも「Egg」と比較して、ドキュメント2ではreally重要です。卵が何回発生するか誰が気にしますか?すべてに卵が含まれています!これらの用語ベクトルは、単純なカウントよりも情報量が多く、単純な用語カウントを使用した場合よりもドキュメント1と2が(ドキュメント3に関して)ずっと近くなります。この場合、おそらく同じ結果が得られますが(ここでは2つの用語しかありません)、違いは小さくなります。

ここで重要なことは、TF-IDFがドキュメント内の用語のより有用な測定値を生成するため、実際に一般的な用語(ストップワード、「卵」)に焦点を当てず、重要な用語(「ルッコラ」)を見失うことです。 )。

36
rcreswick

コサイン類似性の完全な数学的手順は、これらのチュートリアルで説明されています

2つのドキュメント間のコサイン類似度を計算する場合、最初のステップは2つのドキュメントのtf-idfベクトルを計算することです。次に、これら2つのベクトルの内積を求めます。これらのチュートリアルはあなたを助けます:)

6
Gunjan