這是一篇關於搜索引擎排序基礎TF-IDF框架的普及文章,並非網上偶爾可見的一些泛泛而談甚至斷章取義的內容,而是結合搜索引擎的理論,和自己觀察到的較多實例所總結的切實的知識。雖然可能相對比較難以理解,但相信我,這些用來理解的時間絕對是值得的。
寫這篇文章主要是為了對後面一篇《SEO實踐》系列的文章中要提到的一些內容先寫好基礎理論,就不放到正篇裡面去占用篇幅了。
本文先引用一段張俊林的《這就是搜索引擎》中對於TF-IDF框架的概述。由於原文較長,這裡概述下我所認為的重點,或許會有概述不足之處,所以更詳細的內容推薦看原書。
(注:“TF-IDF”或“TF*IDF”是寫法習慣問題,書中用的是TF*IDF,不意味著兩者之間有區別)
TF-IDF原理概述
當用戶在搜索引擎搜索一個詞的時候,它會將詞去和索引庫內的文檔去進行匹配計算,將和詞語最相關的一定數量的文檔取出,參與後續的排名計算。此處“最相關”的量化指標被成為“權值”,而對於絕大多數搜索引擎,權值的計算中TF*IDF框架都是比較重要的一部分。其中被主要考慮到的因子為:詞頻TF和逆文檔頻率IDF。
詞頻因子(TF)
TF計算因子代表了詞頻,即一個單詞在文檔中出現的次數。一般來說,詞頻越高越顯得文檔和該詞相關,就應該給予這個單詞更高的權重。
具體計算詞頻因子的時候,基於不同的出發點,可以采納不同的計算公式。最簡單的方式是直接利用詞頻數,比如一個文檔中某單詞出現5次,它的TF值就是5。
一種詞頻因子的變體計算公式是:W = 1+log(TF)
即將詞頻數值TF取Log值來作為詞頻權值,比如單詞在文檔中出現4次,其詞頻因子權值為3,公式中的數字1是為了平滑計算之用。因為如果TF值為1的情況下,取Log後值為0,即本來出現了一次的單詞,按照這種方法計算會認為這個單詞從來沒有在文檔中出現過,為了避免這種情況,采用+1的方式來進行平滑。之所以要對詞頻取Log,是基於如下考慮:即使一個單詞出現了10次,也應該在計算特征權值時,比出現1次的情況權值大10倍,所以加入Log機制抑制這種過大的差異。
還有種比較重要的變體計算公式將文檔的長度也納入考慮。因為與短文檔相比的話,長文檔內所有單詞的TF值會普遍比短文檔的值高。這邊不詳提了。
逆文檔頻率因子(IDF)
IDF代表的是文檔集合范圍的一種全局因子,它只和給定的文檔集合有關,與具體文檔無關。所以IDF考慮的不是文檔本身的特征,而是特征單詞之間的相對重要性。
計算公式如下:IDF = log(N/n)
其中N代表文檔集合中總共有多少個文檔,而n代表特征單詞在其中多少個文檔中出現過,即文檔頻率。由公式可以,當越多的文檔包含某個單詞時,則其IDF值越小,意味著這個詞區分不同文檔的能力越差。
TF*IDF框架
TF-IDF值的計算公式為:
Weight = TF * IDF
當這個值越大時,文檔就與該詞越相關。
百度所實際運用的
對於百度,TF-IDF框架自然是被運用到的。但對於單個索引詞排名時,TF-IDF不是關鍵詞排名的決定性因素。百度的排名本質是概率檢索模型。
根據我以前對百度上做過的簡單統計分析,百度對於TF計算至少運用了上述的Log平滑計算方法。除了前面提到的之外,當一個關鍵詞的出現次數超過一定阈值時,其TF值會隨著出現次數的增多,而繼續以Log形式使排名下降。
因為有這個機制存在,所以一個頁面上面每個詞的TF-IDF值是有各自不同的上限的,這對於SEO是一個很重要的概念。
可以自己用來實際體驗TF-IDF計算的最簡單方法
雖然不很確切,但先將一篇文章中某關鍵詞出現的次數記為TF值,另外到Google搜索該詞,將該詞的搜索結果總數量作為DF值。然後將TF除以DF,就可以得到最簡單的TF-IDF值了。
盡管這樣的計算非常粗略可能沒什麼實際意義,但照此實際計算一次以後就會對TF-IDF容易理解得多。
SEO衍生
舉個實例,比如“噴碼機價格”一詞,它會被百度分成“噴碼機”和“價格”二詞。(題外話,分詞與否也應該是取決於數據而非自己直覺的,如果以後有機會我會寫寫自己最近用過的一些方法。但有些人常用的從百度快照來看關鍵詞高亮部分來判斷分詞,是沒有任何事實基礎的,沒什麼價值。)
到Google去分別搜索下“噴碼機”和“價格”二詞,“噴碼機”的結果大約是20,600,000個,“價格”則對應大約1,850,000,000個搜索結果,後者的DF值大約高前者百倍。(之所以不到百度去搜索,因為百度顯示搜索結果數量上限為1億個)
在這種情況下,哪怕“噴碼機”和“價格”二詞都在一篇文檔中出現相同的次數,後者也會因為IDF因子的影響,而導致權值遠遠低於前者。
因此,一般情況下只有當“噴碼機”這個詞權值高的頁面,才有機會在“噴碼機價格”這個詞的排名上獲得好的表現,和“價格”此詞權值的關系很小。因為無論如何,“價格”此詞的權值是不可能通過TF-IDF規則獲得太多的。
所以至少對於百度而言,想單獨做“噴碼機價格”這種詞的排名的話,一般要用“噴碼機”排名本就很高的著陸頁來做,不然相對會難的多。
最後
限於自己的SEO水平,無法妄論SEO是否應該去對搜索引擎進行很深入的了解,而且至少主觀角度上,我認為SEO在搜索引擎原理裡面鑽太深是意義不大的事情。但前面提到的,我想只應該算是必須掌握的基礎,如果連對搜索引擎最經典的基礎算法都沒有花過任何精力去了解的話,又談何與搜索引擎打交道呢?
原文地址:http://semwatch.org/2012/03/tf-idf/