TF-IDFは、テキスト内のトークンの重要性を測定するための単なる方法です。これは、ドキュメントを数値のリスト(コサインを取得する角度の1つのエッジを提供するベクトルという用語)に変換するための非常に一般的な方法です。
コサイン類似度を計算するには、2つのドキュメントベクトルが必要です。ベクトルは、インデックスを使用して各一意の用語を表します。そのインデックスの値は、その用語がドキュメントおよび一般的なドキュメントの類似性の一般的な概念にとってどれほど重要であるかを示す尺度です。
ドキュメント内で各用語が発生した回数(T erm F requency)を単純にカウントし、その整数の結果をベクトルの用語スコアに使用できますが、結果はあまり良くありません。非常に一般的な用語(「is」、「and」、「the」など)を使用すると、多くのドキュメントが互いに類似しているように見えます。(これらの特定の例はストップワードリストを使用して処理できますが、ストップワードと見なされるほど一般的ではない他の一般的な用語も同じ種類の問題を引き起こします。Stackoverflowでは、「質問」という単語がこのカテゴリに分類される場合があります。料理のレシピを分析していたとしたら、おそらく「卵」という言葉で問題が発生するでしょう。)
TF - IDFは、各用語が一般的に発生する頻度(ドキュメントFの頻度)を考慮して、生の用語の頻度を調整します。I nverse D ocument F requencyは通常、ドキュメント数をその用語が出現するドキュメント数で割ったログです(ウィキペディアの画像)。

「ログ」は、長期的にはうまくいくのに役立つマイナーなニュアンスと考えてください。引数が大きくなると大きくなるため、用語がまれな場合は、IDFが高くなります(多くのドキュメントをごく少数のドキュメントで割ったもの)。 、用語が一般的である場合、IDFは低くなります(多くのドキュメントを多くのドキュメントで割った値〜= 1)。
100個のレシピがあり、1つを除いてすべて卵が必要だとします。これで、最初のドキュメントに1回、2番目のドキュメントに2回、3番目のドキュメントに1回、すべて「egg」という単語を含む3つのドキュメントができました。各ドキュメントの「egg」の頻度という用語は1または2であり、ドキュメントの頻度は99です(または、新しいドキュメントを数える場合は、おそらく102です。99を使い続けましょう)。
'egg'の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番目のドキュメントでは発生しません。
'arugula'の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
「ルッコラ」は、少なくとも「卵」と比較して、ドキュメント2にとって非常に重要です。卵が何回発生するかは誰が気にしますか?すべてに卵が含まれています!これらの用語ベクトルは、単純なカウントよりもはるかに有益であり、単純な用語カウントが使用された場合よりも、ドキュメント1と2が(ドキュメント3に関して)非常に接近する結果になります。この場合、おそらく同じ結果が発生しますが(ここでは、2つの用語しかありません)、違いは小さくなります。
ここでの持ち帰りは、TF-IDFがドキュメント内の用語のより有用な測定値を生成するため、実際に一般的な用語(ストップワード、「卵」)に焦点を当てず、重要な用語(「ルッコラ」)を見失うことです。 )。