logo
Loading...

TF-IDFVectorizer的值為什麼介於0到1?為什麼能拿來用在餘弦相似度計算會加速? - Cupoy

在做Content-based Recommender時,我參考<<Hands-On Recomme...

python,scikit-learn,推薦系統

TF-IDFVectorizer的值為什麼介於0到1?為什麼能拿來用在餘弦相似度計算會加速?

2019/07/17 下午 06:37
機器學習共學討論版
ya
觀看數:51
回答數:1
收藏數:0
python
scikit-learn
推薦系統

在做Content-based Recommender時,我參考<<Hands-On Recommendatoin System with Python>>書。


書中將文件轉文件向量時,使用sklearn套件TfidfVectorizer,來計算向量中各個值,其值會介於0至1之間,不太能理解,想請問為什麼?


以及書中提到使用TF-IDF可以加速文件兩兩做餘弦相似度計算,說直接做點積就可,為什麼不用除於它們的單位長度呢?



附上書中原文 ......


(原文1)

(原文2)

回答列表

  • 2019/07/17 下午 10:17
    Wayne 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 

    原文:https://blog.csdn.net/Eastmount/article/details/50323063