这是一篇关于搜索引擎排序基础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在搜索引擎原理里面钻太深是意义不大的事情。但前面提到的,我想只应该算是必须掌握的基础,如果连对搜索引擎最经典的基础算法都没有花过任何精力去了解的话,又谈何与搜索引擎打交道呢?