自然語言處理模型(一):一文讀懂TF-IDF

    假設我們手頭有大量的文檔(或網頁), 通常我們會比較關心以下幾個問題:

        1. 每一個文檔的關鍵詞(或主題詞)包括哪些?

        2. 給定一個(或一組)關鍵詞,與這個(或組)詞最相關的文檔是哪一個?

        3. 給定一個文檔,哪個(或哪些)文檔與它具有最大的相似度呢?

    回答上述三個問題的關鍵是:對於一個給定的詞和一個給定的文檔,定義一個可以用來衡量該詞對該文檔相關性(或重要性)的指標。那麼,如何定義這樣的一個指標呢?

    本文將簡要介紹詞頻-逆文檔頻度(Term Frequency - Inverse Document Frequency,TF-IDF)技術,它是一種用於資訊檢索與文本挖掘的常用加權技術,可以用來評估一個詞對於一個文檔集或語料庫中某個文檔的重要程度。

概念

    TF-IDF(termfrequency–inversedocumentfrequency)是一種用於資訊檢索與資訊探勘的常用加權技術。TF-IDF是一種統計方法,用以評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨着它在文件中出現的次數成正比增加,但同時會隨着它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜尋引擎應用,作爲文件與用戶查詢之間相關程度的度量或評級。除了TF-IDF以外,因特網上的搜尋引擎還會使用基於連結分析的評級方法,以確定文件在搜尋結果中出現的順序。     在一份給定的文件裏,詞頻 (term frequency, TF) 指的是某一個給定的詞語在該文件中出現的次數。這個數字通常會被歸一化(分子一般小於分母區別於IDF,以防止它偏向長的文件。(同一個詞語在長文件裏可能會比短文件有更高的詞頻,而不管該詞語重要與否。)

 逆向文件頻率 (inverse document frequency, IDF) 是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。

 某一特定文件內的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語。

    TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認爲此詞或者短語具有很好的類別區分能力,適合用來分類。TF-IDF實際上是:TF * IDFTF詞頻(TermFrequency)IDF反文檔頻率(InverseDocumentFrequency)TF表示詞條在文檔d中出現的頻率(另一說:TF詞頻(Term Frequency)指的是某一個給定的詞語在該文件中出現的次數)。IDF的主要思想是:如果包含詞條t的文檔越少,也就是n越小,IDF越大,則說明詞條t具有很好的類別區分能力。如果某一類文檔C中包含詞條t的文檔數爲m,而其它類包含t的文檔總數爲k,顯然所有包含t的文檔數n=m+k,當m的時候,n也大,按照IDF公式得到的IDF的值會小,就說明該詞條t類別區分能力不強。(另一說:IDF反文檔頻率(Inverse Document Frequency)是指果包含詞條的文檔越少,IDF越大,則說明詞條具有很好的類別區分能力。)但是實際上,如果一個詞條在一個類的文檔中頻繁出現,則說明該詞條能夠很好代表這個類的文本的特徵,這樣的詞條應該給它們賦予較高的權重,並選來作爲該類文本的特徵詞以區別與其它類文檔。這就是IDF的不足之處.

計算步驟

1.計算詞頻(TF)

             

   以上式子中,分母是該詞在文件中的出現次數,而分母則是在文件中所有字詞的出現次數之和

2.計算逆文檔頻率(IDF)

           

    分母表示語料庫中的文件總數,分子表示包含詞語的文件數目,如果該詞語不在語料庫中,就會導致被除數爲零,因此一般情況下使用時會+1.

3.計算詞頻-逆文檔頻率(TF-IDF) 

            

   某一特定文件內的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語

 

示例

    一:有很多不同的數學公式可以用來計算TF-IDF。這邊的例子以上述的數學公式來計算。詞頻 (TF) 是一詞語出現的次數除以該文件的總詞語數。假如一篇文件的總詞語數是100個,而詞語“母牛”出現了3次,那麼“母牛”一詞在該文件中的詞頻就是3/100=0.03。一個計算文件頻率 (DF)的方法是測定有多少份文件出現過“母牛”一詞,然後除以文件集裏包含的文件總數。所以,如果“母牛”一詞在1,000份文件出現過,而文件總數是10,000,000份的話,其逆向文件頻率就是 log(10,000,000/ 1,000)=4。最後的TF-IDF的分數爲0.03 * 4=0.12。

    二:根據關鍵字k1,k2,k3進行搜索結果的相關性就變成TF1*IDF1+ TF2*IDF2+ TF3*IDF3。比如document1的term總量爲1000,k1,k2,k3在document1出現的次數是100,200,50。包含了k1,k2,k3的docuement總量分別是 1000, 10000,5000。document set的總量爲10000。 TF1 = 100/1000 = 0.1 TF2 = 200/1000= 0.2 TF3= 50/1000 = 0.05 IDF1 = log(10000/1000)= log(10)= 2.3 IDF2= log(10000/100000)= log(1)= 0; IDF3= log(10000/5000)= log(2)= 0.69 這樣關鍵字k1,k2,k3docuement1的相關性=0.1*2.3 + 0.2*0 + 0.05*0.69 = 0.2645 其中k1比k3的比重在document1要大,k2的比重是0.

    三:在某個一共有一千詞的網頁中“原子能”、“的”和“應用”分別出現了 2 次、35 次 和 5 次,那麼它們的詞頻就分別是 0.002、0.035 和 0.005。我們將這三個數相加,其和 0.042 就是相應網頁和查詢“原子能的應用” 相關性的一個簡單的度量概括地講,如果一個查詢包含關鍵詞w1,w2,...,wN, 它們在一篇特定網頁中的詞頻分別是: TF1, TF2, ..., TFN。 (TF: termfrequency)。 那麼,這個查詢和該網頁的相關性就是:TF1 + TF2 + ... + TFN

    在上面的例子中,詞“的”站了總詞頻的 80% 以上,而它對確定網頁的主題幾乎沒有用。我們稱這種詞叫“應刪除詞”(Stopwords),也就是說在度量相關性是不應考慮它們的頻率。在漢語中,應刪除詞還有“是”、“和”、“中”、“地”、“得”等等幾十個。忽略這些應刪除詞後,上述網頁的相似度就變成了0.007,其中“原子能”貢獻了 0.002,“應用”貢獻了 0.005。細心的讀者可能還會發現另一個小的漏洞。在漢語中,“應用”是個很通用的詞,而“原子能”是個很專業的詞,後者在相關性排名中比前者重要。因此我們需要給漢語中的每一個詞給一個權重,這個權重的設定必須滿足下面兩個條件:

    1.一個詞預測主題能力越強,權重就越大,反之,權重就越小。我們在網頁中看到“原子能”這個詞,或多或少地能瞭解網頁的主題。我們看到“應用”一次,對主題基本上還是一無所知。因此,“原子能“的權重就應該比應用大。

   2. 應刪除詞的權重應該是零。我們很容易發現,如果一個關鍵詞只在很少的網頁中出現,我們通過它就容易鎖定搜索目標,它的權重也就應該大。反之如果一個詞在大量網頁中出現,我們看到它仍然不很清楚要找什麼內容,因此它應該小。概括地講,假定一個關鍵詞 Dw 個網頁中出現過,那麼 Dw 越大,的權重越小,反之亦然。在信息檢索中,使用最多的權重是“逆文本頻率指數” (Inverse document frequency 縮寫爲IDF),它的公式爲log(D/Dw)其中D是全部網頁數。比如,我們假定中文網頁數是D=10億,應刪除詞“的”在所有的網頁中都出現,即Dw=10億,那麼它的IDF=log(10億/10億)= log (1) = 0。假如專用詞“原子能”在兩百萬個網頁中出現,即Dw=200萬,則它的權重IDF=log(500)=6.2。又假定通用詞“應用”,出現在五億個網頁中,它的權重IDF= log(2)則只有 0.7。也就只說,在網頁中找到一個“原子能”的比配相當於找到九個“應用”的匹配。利用 IDF,上述相關性計算個公式就由詞頻的簡單求和變成了加權求和,即TF1*IDF1+TF2*IDF2 +... + TFN*IDFN。在上面的例子中,該網頁和“原子能的應用”的相關性爲 0.0161,其中“原子能”貢獻了 0.0126,而“應用”只貢獻了0.0035。這個比例和我們的直覺比較一致了。

利用餘弦相似度和TF-IDF及分詞技術計算兩段語句的相似度

    餘弦有這樣的性質:餘弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,夾角等於0,即兩個向量相等,這就叫”餘弦相似性”。 那麼該怎麼利用餘弦來計算文本的相似性了?首先來看一個例子。

        文本1:我們喜歡足球 
        文本2:我喜歡踢足球

   大致思路是:我們認爲用詞越相似,則文本的相似度越高,所以計算文本相似性主要按照以下步驟進行:

  1. 分詞 
    此處利用 ansj 分詞工具進行分詞,文本1和文本2的分詞結果爲: 
    文本1:我/喜歡/足球 
    文本2:我們/喜歡/踢/足球
  2. 列出所有的詞 
    我, 喜歡, 踢, 我們, 足球
  3. 計算詞頻 
    文本1: 我:1,喜歡:1,踢:0,我們:0,足球:1 
    文本2: 我:0,喜歡:1,踢:1,我們:1,足球:1
  4. 轉化爲向量 
    文本1:[1, 1, 0, 0, 1] 
    文本2:[0, 1, 1, 1, 1]

         5. 計算兩個詞向量的餘弦相似度

     以上結果是0.5773502691896258,經驗證結果是正確的。 

    注意:以上程序只符合簡單的應用情況,不適用複雜的情況。另外,餘弦相似性還可以用來判別文檔的相似性,大致思路是:首先求出文檔的關鍵詞(可以利用TF-IDF 方法),以後可以按照以上2,3,4步驟進行計算。

TF-IDF不足之處

    TF-IDF算法是建立在這樣一個假設之上的:對區別文檔最有意義的詞語應該是那些在文檔中出現頻率高,而在整個文檔集合中出現頻率少的詞語,所以如果特徵空間座標系取TF詞頻作爲測度,就可以提現同類文檔的特點,另外考慮到單詞區別不同類別的能力,TF-IDF認爲一個單詞出現的文檔頻數越小,它區別不同類別文檔的能力就越大。因此引入了逆文檔頻度IDF的概念,以TF和IDF的乘積作爲特徵空間座標系的取值測度並用它完成對權值TF的調整,調整權值得目的在於突出重要單詞,抑制次要單詞。

    但是,本質上IDF是一種試圖抑制噪聲的加權,並且單純地認爲文檔頻率小的單詞就越重要,文檔頻率大的單詞就越無用,顯然這並不是完全正確的(例如,對於一些生僻詞,它們的文檔頻率小,但不一定有意義)。IDF的簡單結構並不能有效反映單詞的重要程度和特徵詞的分佈情況,使其無法很好地完成對權值調整的功能,因此TF-IDF的精度並不是很高。

   此外,在TF-IDF算法中並沒有體現出單詞的位置信息,對於Web文檔而言,權重的計算方法應該體現出HTML的結構特徵,特徵詞在不同的標記符中對文章內容的反映程度不同,其權重的計算方法也不相同,因此應該對處於網頁不同位置的特徵詞分別賦予不同的係數,然後乘以特徵詞的詞頻,以提高文本表示的效果。





發佈了110 篇原創文章 · 獲贊 65 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章