百度權重:教你如何利用TF-IDF演算法來提高網站權重



  利用TF-IDF演算法提高權重

  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)的歸一化,以防止它偏向長的文件。(同一個字語在長文件里可能會比短文件有更高的字數,而不管該字語重要與否。)對於在某一特定文件里的字語來說,它的重要性可表示為:以上式子中是該字在文件中的出現次數,而分母則是在文件中所有字字的出現次數之和。

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

  其中

  |D|:語料庫中的文件總數

  :包含字語的文件數目(即的文件數目)如果該字語不在語料庫中,就會導致被除數為零,因此一般情況下使用

  然後某一特定文件內的高字語頻率,以及該字語在整個文件集合中的低文件頻率,可以產生出高權重的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。這個比例和我們的直覺比較一致了。


發表迴響