3

テキスト文書をクラスタリングしています。私はtf-idfとコサイン類似度を使用しています。しかし、これらの手段を使用していても、よくわからないことがあります。tf-idf の重みは、2 つのドキュメント間の類似度の計算に影響しますか?

次の 2 つのドキュメントがあるとします。

1-高い木。

2- 高い木 高い木 高い木 高い木。

この場合、2 つのドキュメントの tf-idf ベクトルは異なりますが、2 つのドキュメント間の類似度は 1 になります。通常、2 番目の文書は、最初の文書と比較して用語の重みを高くする必要があります。

2 つのベクトルの重みが次のようになっているとします (仮定します)。

v1(1.0、1.0)

v2(5.0、8.0)

コサイン類似度を計算すると、1.0 が得られます。

これは、同じ項を共有するが重みが異なる 2 つのランダム ベクトルのスケッチです。

ベクトルの間には明らかな天使が存在するので、ウェイトが役割を果たすはずです!

ここに画像の説明を入力

これは、tf/idf の重みが類似度計算のどこで役割を果たすのかという疑問を引き起こします。ここまででわかったのは、ここでの類似性は用語の有無だけを気にするということです。

4

3 に答える 3

4

まず、あなたの計算には欠陥があります。(1, 1) と (5, 8) の間の余弦類似度は次のとおりです。

1*5 + 1*8 / ||(1, 1)|| * ||(5, 8)||
= 13 / (1.4142 * 9.434)
= .97

どこ||x||で のユークリッドノルムですx

ここまででわかったのは、ここでの類似性は用語の有無だけを気にするということだったからです。

それは真実ではない。検討

d1 = "hello world"
d2 = "hello world hello"

tf ベクトルを使用 (ここには idf はありません)

v1 = [1, 1]
v2 = [2, 1]

コサイン類似度は 1 ではなく 0.95 です。

Idf はさらに影響を与える可能性があります。追加するとします

d3 = "hello"

df("hello") = 3と、df("world") = 2および の tf-idf ベクトルはd1、次のようにd2なります。

v1' = [ 1.        ,  1.28768207]
v2' = [ 2.        ,  1.28768207]

コサイン類似度がわずかに小さくなり、0.94 になります。

(scikit-learn で計算された Tf-idf とコサインの類似性。使用中の tf-idf の種類が異なるため、他のパッケージでは異なる数値が返される場合があります。)

于 2013-10-09T12:53:51.200 に答える
3

ここでは、2 つの異なる概念が混在していると思います。

  1. コサイン類似度は、重みの計算方法に関係なく、ユークリッド空間内の 2 つの異なるベクトル間の角度を測定します。

  2. TF-IDF は、ドキュメントおよび特定のコレクション内の用語ごとに、(とりわけ) コサイン類似度に使用できるベクトルの各コンポーネントの重みを決定します。

これが役立つことを願っています。

于 2013-10-09T12:54:24.530 に答える
0

この質問と質問への私の返信を参照してください

Python: tf-idf-cosine: ドキュメントの類似性を見つける

基本的に、tf-idf とコサイン類似度の両方を使用する場合は、tf-idf ベクトルを取得し、それにコサイン類似度を適用して最終結果を得ることができます。したがって、ここではコサイン類似度 (この場合は tf - idf ベクトルの内積) を tf-idf スコアに適用しています。

回答には、参照できる 3 つのチュートリアルもありました。彼らはこれがどのように機能するかを説明しています。ありがとう。

于 2013-10-21T13:51:37.990 に答える