4

ネットから見つけたドキュメントから、コーパス内の用語の用語頻度と逆ドキュメント頻度の重みを決定するために使用される式を見つけました。

tf-idf(wt)= tf * log(|N|/d);

gensim で言及されている tf-idf の実装を行っていました。ドキュメントに記載されている例は

>>> doc_bow = [(0, 1), (1, 1)]
>>> print tfidf[doc_bow] # step 2 -- use the model to transform vectors
[(0, 0.70710678), (1, 0.70710678)] 

これは明らかに Tf-IDF の標準実装に従っていません。両モデルの違いは何ですか?

注: 0.70710678 は、固有値計算で通常使用される値 2^(-1/2) です。では、固有値はどのようにして TF-IDF モデルに組み込まれるのでしょうか?

4

2 に答える 2

4

ウィキペディアから:

特定のドキュメント内の用語数は、特定の用語がそのドキュメントに出現する回数です。通常、このカウントは正規化され、より長いドキュメントへの偏りを防ぎます(ドキュメント内のその用語の実際の重要性に関係なく、より多くの用語カウントを持つ可能性があります)。

gensim ソース行 126-127から:

if self.normalize:
        vector = matutils.unitvec(vector)
于 2012-04-07T17:29:35.267 に答える
0

単語のバッグ (doc_bow) には、t0 と t1 の 2 つのトークンがあります。t0 と t1 が 1 つのドキュメントに表示されるか、2 つのドキュメントに表示されるかはわかりません。また、モデル (tfidf) がトークンを含むドキュメント上に構築されたかどうかさえわかりません。バッグ doc_bow は単なるクエリ (テスト データ) であり、t0 または t1 のいずれかを含む場合と含まない場合があるトレーニング データから構築されたモデルです。

それでは、仮定を立てましょう。モデル tfidf は 2 つのドキュメント d0 と d1 で構築され、d0 には t0 が含まれ、d1 には t1 が含まれます。したがって、文書の総数 (N) は 2 であり、t0 と t1 の用語頻度と文書頻度は 1 になります。

Gensim は IDF の計算にデフォルトで対数底 2 を使用し ( df2idf関数を参照)、doc_bow から変換された tfidf ベクトルは [(0, 1), (0, 1)] のようになります。(例: tfidf(t0) = 1 * log_2(|2|/1) = 1)

さらに、デフォルトで実行される L2 正規化を考慮する必要があり、最終的な出力は [(0, 1 / 2^(1/2)), (0, 1 / 2^(1/2))] になります。

于 2015-06-13T18:27:33.410 に答える