TF-IDFVectorizer的值為什麼介於0到1?為什麼能拿來用在餘弦相似度計算會加速?
在做Content-based Recommender時,我參考<<Hands-On Recommendatoin System with Python>>書。
書中將文件轉文件向量時,使用sklearn套件TfidfVectorizer,來計算向量中各個值,其值會介於0至1之間,不太能理解,想請問為什麼?
以及書中提到使用TF-IDF可以加速文件兩兩做餘弦相似度計算,說直接做點積就可,為什麼不用除於它們的單位長度呢?
附上書中原文 ......
(原文1)
(原文2)
回答列表
-
2019/07/17 下午 10:17Wayne YT Chen贊同數:0不贊同數:0留言數:0
TF-IDF解釋
(1 ) TF(Term Frequency)表示某個關鍵字在整篇文章中出現的頻率。文本頻率是指某個關鍵字在整個語料所有文章中出現的次數。(2) IDF(InversDocument Frequency)表示計算逆文本頻率。
逆文檔頻率又稱為逆文檔頻率,它是文檔頻率的倒數,主要用於降低所有文檔中一些常見卻對文檔影響不大的詞語的作用。
舉例:<計算TF 小節>假設現在有一篇文章《貴州的大資料分析》,這篇文章包含了10000個片語,其中“貴州”、“大資料”、“分析”各出現100次,“的”出現500次(假設沒有去除停用詞),則通過前面TF詞頻計算公式,可以計算得到三個單詞的詞頻,即:
“貴州”TF= 0.01;大數據”TF= 0.01;“分析”TF= 0.01;
“的” TF = 0.05
<計算IDF 小節>現在預料庫中共存在1000篇文章,其中包含“貴州”的共99篇,包含“大資料”的共19篇,包含“分析”的共“59”篇,包含“的”共“899”篇。則它們的IDF計算如下:
“貴州”IDF = log(1000/99+1) = 1.000
“大數據” IDF = log (1000/19+1) = 1.700
“分析”IDF = log(1000/60) = 1.221
“的” IDF = log(1000/900) = 0.046
由IDF可以發現,當某個詞在語料庫中各個文檔出現的次數越多,它的IDF值越低,當它在所有文檔中都出現時,其IDF計算結果為0,而通常這些出現次數非常多的詞或字為“的”、“我”、“嗎”等,它對文章的權重計算起不到一定的作用。
<計算TF-IDF 小節> TF – IDF = 詞頻 x 逆文檔頻率
“貴州”TF-IDF= 0.01*1.000 = 0.010;
“大數據”TF-IDF = 0.01*1.700 = 0.017
“分析”TF-IDF = 0.01*1.221 = 0.012;
“的” TF-IDF = 0.01*0.046 = 0.00046
通過TF-IDF計算,“大資料”在某篇文章中出現頻率很高,這就能反應這篇文章的主題就是關於“大資料”方向的。如果只選擇一個詞,“大資料”就是這篇文章的關鍵字。所以,可以通過TF-IDF方法統計文章的關鍵字。同時,如果同時計算“貴州”、“大資料”、“分析”的TF-IDF,將這些詞的TF-IDF相加,可以得到整篇文檔的值,用於資訊檢索。
TF-IDF演算法的優點是簡單快速,結果比較符合實際情況。缺點是單純以詞頻衡量一個詞的重要性,不夠全面,有時重要的詞可能出現次數並不多。而且,這種演算法無法體現詞的位置資訊。
---------------------
作者:Eastmount
來源:CSDN