天天看點

TF-IDF算法及應用執行個體

tf-idf(term frequency–inverse document frequency)是一種用于資訊檢索與資訊探勘的常用權重技術。tf-idf是一種統計方法,用以評估一字詞對于一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性随着它在檔案中出現的次數成正比增加,但同時會随着它在語料庫中出現的頻率成反比下降。tf-idf權重的各種形式常被搜尋引擎應用,作為檔案與使用者查詢之間相關程度的度量或評級。除了tf-idf以外,網際網路上的搜尋引擎還會使用基于連結分析的評級方法,以确定檔案在搜尋結果中出現的順序。

  

原理

      在一份給定的檔案裡,詞頻 (term frequency, tf) 指的是某一個給定的詞語在該檔案中出現的次數。這個數字通常會被歸一化(分子一般小于分母 差別于idf),以防止它偏向長的檔案。(同一個詞語在長檔案裡可能會比短檔案有更高的詞頻,而不管該詞語重要與否。)

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

  某一特定檔案内的高詞語頻率,以及該詞語在整個檔案集合中的低檔案頻率,可以産生出高權重的tf-idf。是以,tf-idf傾向于過濾掉常見的詞語,保留重要的詞語。

      tfidf的主要思想是:如果某個詞或短語在一篇文章中出現的頻率tf高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類别區分能力,适合用來分類。tfidf實際上是:tf * idf,tf詞頻(term frequency),idf反文檔頻率(inverse document frequency)。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的不足之處.

      在一份給定的檔案裡,詞頻(term frequency,tf)指的是某一個給定的詞語在該檔案中出現的頻率。這個數字是對詞數(term count)的歸一化,以防止它偏向長的檔案。(同一個詞語在長檔案裡可能會比短檔案有更高的詞數,而不管該詞語重要與否。)對于在某一特定檔案裡的詞語 

TF-IDF算法及應用執行個體

 來說,它的重要性可表示為:

TF-IDF算法及應用執行個體

      以上式子中 

TF-IDF算法及應用執行個體

 是該詞在檔案

TF-IDF算法及應用執行個體

中的出現次數,而分母則是在檔案

TF-IDF算法及應用執行個體

中所有字詞的出現次數之和。

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

<dl><dd></dd></dl>

TF-IDF算法及應用執行個體

其中

|d|:語料庫中的檔案總數

TF-IDF算法及應用執行個體

:包含詞語

TF-IDF算法及應用執行個體

的檔案數目(即

TF-IDF算法及應用執行個體

的檔案數目)如果該詞語不在語料庫中,就會導緻被除數為零,是以一般情況下使用

TF-IDF算法及應用執行個體

然後

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,k3與docuement1的相關性= 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: term frequency)。 那麼,這個查詢和該網頁的相關性就是:tf1 + tf2 + ... + tfn。

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

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

2. 應删除詞的權重應該是零。

我們很容易發現,如果一個關鍵詞隻在很少的網頁中出現,我們通過它就容易鎖定搜尋目标,它的權重也就應該大。反之如果一個詞在大量網頁中出現,我們看到它仍然不很清楚要找什麼内容,是以它應該小。概括地講,假定一個關鍵詞 w 在 Dw 個網頁中出現過,那麼 Dw 越大,w的權重越小,反之亦然。在資訊檢索中,使用最多的權重是“逆文本頻率指數”

(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。這個比例和我們的直覺比較一緻了。

繼續閱讀