这是一篇关于搜索引擎排序根本TF-IDF框架的普及文章,并不是网上偶尔可见的一些泛泛而谈甚至断章取义的内容,而是连络搜索引擎的理论,和自己不雅察到的较多实例所总结的切实的知识。虽然可能相对比较难以理解,但相信我,这些用来理解的时间绝对是值得的。
写这篇文章主要是为了对后面一篇《搜索引擎优化实践》系列的文章中要提到的一些内容先写好根本理论,就不放到正篇里面去占用篇幅了。
本文先引用一段张俊林的《这就是搜索引擎》中对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值是有各自不合的上限的,这对搜索引擎优化是一个很重要的概念。
可以自己用来实际体验TF-IDF计较的最简单体例
虽然不很确切,但先将一篇文章中某关头词呈现的次数记为TF值,别的到谷歌搜索该词,将该词的搜索成果总数量作为DF值。然后将TF除以DF,便可以取得最简单的TF-IDF值了。
虽然这样的计较很是粗略可能没什么实际意义,但照此实际计较一次以后就会对TF-IDF容易理解很多。
搜索引擎优化衍生
举个实例,比如"喷码机代价"一词,它会被百度分成"喷码机"和"代价"二词。(题外话,分词与否也应该是取决于数据而非自己直觉的,如果以后有机缘我会写写自己最近用过的一些体例。但有些人常常使用的从百度快照来看关头词高亮部分来判断分词,是没有任何事实根本的,没什么价值。)