归纳文章中心词的算法:TF-IDF算法

TF-IDF-feature

在我的上一篇博客中,我介绍了Google的PageRank网页排名技术,并且说道,搜索引擎排名主要有两个因素,网页的质量网页的相关程度,其中网页的质量已经交给了PageRank算法,这篇文章将会引入TF-IDF算法,这个算法可以通过分析一篇文章,并且归纳出这个文章的中心词。这个算法通常被搜索引擎用来确定某个查询的相关性,比如我在Google搜索“高斯模糊算法”,Google是如何寻找相关页面呢?可不只是确认一下页面的名字符不符合,搜索引擎会分析每个页面的内容来选取合适的结果。

拿一个短语举例子:“图像高斯模糊算法”,可以分成三个关键词 “图像”,“高斯模糊”,“算法”,根据常识,我们知道,这三个词出现次数较多的网页应该要比这三个词出现次数较少的网页的相关性高。但是这个做法有一个明显的漏洞,一个500字的文章出现50次“高斯模糊”和一个1000字的文章出现60次“高斯模糊”,哪个文章的相关性高呢?所以说使用这个思路会导致篇幅长的网页比篇幅短的网页更占便宜。

这时,就需要把网页的长度也考虑进去,对关键词的次数进行归一化操作,使用关键词的次数除以网页的总字数。这个值叫做“关键词的频率”,也就是通常所说的“词频”(Term Frequency)。比如一个网页上一共1000个词,“图像”出现了20次,高斯模糊出现了“10次”,“算法”出现了15次,那么这三个词的词频分别是0.02,0.01,0.015 。把这三个数相加,得到0.045,这个数就是相应网页与“图像高斯模糊算法”短语的单文本词频。

TF-formula

因此,去确认一个网页的查询相关性,最简单的方法,就是直接相加各个关键词在页面的文章中的总词频,比如我搜索的那句话有N个关键词 W1,W2,….,Wn,在一个网页中的词频分别为TF1,TF2,….TFn,那么这个网页的相似度就是 TF1+TF2+…..+TFn 。

那么!问题又来了!看看我上一段写的那些话,什么词最多?不是“相关性”,不是“词频”,“不是网页”,而是“的”,“在”之类的词,这些词一般会占据一个词频的大部分但是对确认一个文章的主题没有任何用处,这种词汇叫做“停止词”,在测量相关性中不应该考虑这些词,在英文的“is”,“are”,“and”,“with”这些介词,中文中的:“的”,“得”,“地”,“和”之类的词,忽略这些词后网页的查询相关性会降低一些。

可以写一个程序来判断是否为停止词,在英文中,朴素一点的分词器大致可以使用空格来对英文句子分词,而且我觉得词语长度为3以下的差不多都是停止词,可以通过这个方法来去除英文文章中的停止词,但是到了中文就困难了,必须再去学相关的分词技术。或者有一个关于分词的数据库。

这时又有一个小问题了,看看我开篇时候举例子的查询“图像高斯模糊算法”,我们都知道,比起“高斯模糊”这个词,“图像”这个词在生活中实在是太常见了,是个平常词汇,而“高斯模糊”一听就是个专业词。这个专业词“高斯模糊”在相关性排名中比“图像”这个词重要得多,这个是不可否认的吧。这时候又要用到权重了。我们需要对每个词加一个权重,这个权重需要满足:

  • 一个词预测主题能力越强,权重就越大。因为你看到“高斯模糊”或多或少能猜出来主题就是这个,但是你看到“图像”这个词却难以猜测主题,图像?摄影?图片处理?画画?是那个呢?
  • 停止词没有权重(为0)

这时就需要引入IDF了!通常来说,一个关键词w在D个网页中出现过,如果D越大w的权重越小,反之则越大。这个权重叫做你文本频率指数 (Inverse Document Frequency,IDF),IDF的计算公式如下:

IDF-formula

来验证一下比如“的”字,一共有10亿个中文网页,出现“的”字的中文网页有10亿个,那么IDF就是log(10亿/10亿) = log(1)=0,这刚好印证了停止词的IDF应该为0,没有权重或者很小。

计算IDF需要一个语料库(corpus),用来模拟语言的使用环境,对于搜索引擎来说他自己本身就是一个语料库了。

我们再来验证一个别的词。

假设Google可以检索10亿个网页,对于“图像”这个词:

term-image

有11,300,000个结果,那么“图像”的逆文档率就是 IDF = (10亿/11300000)= 1.94.

对于“高斯模糊”这个词:

term-gaussian-blur

有438,000个结果,那么“高斯模糊”的逆文档率就是 IDF = (10亿/438000)= 3.35.

这下可以看出来“高斯模糊”的权重比“图像”要大了吧~

有了IDF,有了TF,将他们结合就是这个文章的主题 TF-IDF:

.tf-idf-formula

之后计算相关性的公式就从原来的词频求和变成了加权求和:

relative-formula

以上就是FT-IDF算法,TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以”词频”衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的,因为在文章中不同段落的不同重要性也不同。

通过这个算法我们可以使用程序计算出一个文章的关键词,比如这篇,关键词可能是 “词频”,“逆文档率”,“相关性”,“算法”,如果用户查询是“文章相关性算法”,那么这篇文章就满足这个用户的查询,可是电脑是怎么判断 “文章相关性算法”,和{“词频”,“逆文档率”,“相关性”,“算法”},是一类东西呢?这时就要用到余弦相似度,我之后将会在写一篇博客来介绍。

我的博客MikeTech app现已登陆iPhone和Android

iPhone版下载
Android版下载

打赏

Leave a Reply

Your email address will not be published. Required fields are marked *