簡體   English   中英

了解 TfidfVectorizer output

[英]Understanding TfidfVectorizer output

我正在用簡單的示例測試TfidfVectorizer ,但我無法弄清楚結果。

corpus = ["I'd like an apple",
          "An apple a day keeps the doctor away",
          "Never compare an apple to an orange",
          "I prefer scikit-learn to Orange",
          "The scikit-learn docs are Orange and Blue"]
vect = TfidfVectorizer(min_df=1, stop_words="english")
tfidf = vect.fit_transform(corpus)

print(vect.get_feature_names())    
print(tfidf.shape)
print(tfidf)

output:

['apple', 'away', 'blue', 'compare', 'day', 'docs', 'doctor', 'keeps', 'learn', 'like', 'orange', 'prefer', 'scikit']
(5, 13)
  (0, 0)    0.5564505207186616
  (0, 9)    0.830880748357988
  ...

我正在計算第一句話的tfidf ,我得到了不同的結果:

  • 第一個文檔(“ I'd like an apple ”)僅包含 2 個單詞(刪除停用詞后(根據vect.get_feature_names()的打印(我們保留:“ like ”、“ apple ”)
  • TF("apple", Doucment_1) = 1/2 = 0.5
  • TF("喜歡", Doucment_1) = 1/2 = 0.5
  • apple這個詞在語料庫中出現了 3 次。
  • like這個詞在語料庫中出現了1次。
  • IDF (“蘋果”) = ln(5/3) = 0.51082
  • IDF (“喜歡”) = ln(5/1) = 1.60943

所以:

  • tfidf("apple") in document1 = 0.5 * 0.51082 = 0.255.= 0.5564
  • tfidf("like") in document1 = 0.5 * 1.60943 = 0.804.= 0.8308

我錯過了什么?

你的計算有幾個問題。

首先,關於如何計算 TF 有多種約定(參見Wikipedia 條目); scikit-learn使用文檔長度對其進行標准化。 用戶指南

[...] 術語頻率,術語在給定文檔中出現的次數 [...]

所以,在這里, TF("apple", Document_1) = 1 ,而不是 0.5

其次,關於 IDF 定義 - 來自文檔

如果smooth_idf=True (默認值),則將常數“1”添加到 idf 的分子和分母,就好像看到一個額外的文檔包含集合中的每個術語恰好一次,這可以防止零除法:idf(t) =日志 [ (1 + n) / (1 + df(t)) ] + 1。

所以,在這里我們將有

IDF ("apple") = ln(5+1/3+1) + 1 = 1.4054651081081644

因此

TF-IDF("apple") = 1 * 1.4054651081081644 =  1.4054651081081644

第三,使用默認設置norm='l2' ,會發生額外的標准化; 再次來自文檔:

norm='l2'時,歸一化是“c”(余弦),當norm=None時是“n”(無)。

從您的示例中明確刪除此額外的規范化,即

vect = TfidfVectorizer(min_df=1, stop_words="english", norm=None)

'apple'

(0, 0)  1.4054651081081644

即已經手動計算

有關規范化在norm='l2' (默認設置)時如何影響計算的詳細信息,請參閱用戶指南的Tf–idf 術語權重部分; 他們自己承認:

在 scikit-learn 的TfidfTransformerTfidfVectorizer中計算的 tf-idfs 與標准教科書符號略有不同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM