2012-02-27 5 views
3

私がネットから見つけた文書から、用語頻度と逆文書を決定するために使用された表現を計算しましたTF-IDFはgensimツールでどのようにPythonで実装されていますか?

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

私はgensimで述べたtf-idfの実装を行っていました。 ドキュメントに与えられた例は明らかに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)] 

です。 両方のモデルの違いは何ですか?

注:0.70710678は、通常固有値計算に使用される値2 ^( - 1/2)です。 固有値がTF-IDFモデルにどのように入ってくるのですか?ウィキペディアから

答えて

4

与えられた文書中の用語数は単に与えられた用語がその文書に表示された回数です。 このカウントは通常gensim sourceライン126-127から、(文書に関係なく、その用語の実際の重要性の高い用語数を有していてもよい)長い文書へのバイアス

を防ぐために、正規化されています

if self.normalize: 
     vector = matutils.unitvec(vector) 
0

単語(doc_bow)、t0およびt1の袋には2つのトークンがあります。 t0とt1が文書に表示されるか、2つの文書に表示されるかはわかりません。さらに、モデル(tfidf)がトークンを含む文書の上に構築されているかどうかもわかりません。バッグdoc_bowは単なるクエリ(テストデータ)であり、モデルはt0またはt1のいずれかを含んでも含まなくてもよいトレーニングデータから構築される。

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

GensimはデフォルトとしてIDFを計算するためにログベース2を使用します(df2idfファンクションを参照)。 doc_bowは[(0、1)、(0、1)]のようになります。 (tfidf(t0)= 1 * log_2(| 2 |/1)= 1)

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

関連する問題