对TF-IDF的理解与数学推导

TF-IDF的相关计算

百度百科中,TF-IDF(term frequency–inverse document frequency)的解释是一种用于信息检索与数据挖掘的常用加权技术。所以总的来说,TF-IDF是一种统计方法,并且字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。这句话,我们后续来解释它的道理。这篇博文主要参考了吴军博士的经典之作《数学之美》,加上自己一点小小的理解。
我们来举一个栗子,有个短语“人工智能的应用”,进行分词之后可以分成“人工智能”、“的”、“应用”三个关键词,在一般人看来,如果一个网页或者文章含有这三个词越多,那么这个网页或者这篇文章与这个短语和这三个关键词的相关度越高。但是这种说法上还是有一些漏洞,因为如果一个网页或者一篇文章长度长的话就更有几率出现更多的关键词,这么一来,相对较短的文章就显得没有那么相关了。所以,我们为了更加公平地来判断相关度,我们来对关键词的次数进行一次归一化,就是用关键词出现的次数除以网页或者文章的总词数,我们把这个称为“关键词的频率”(Term Frequency),比方说一篇文章中总词数为10000,“人工智能”、“的”、“应用”三个关键词出现的次数分别为30次、200次和50次,那么他们的词频分别就是0.003、0.02和0.005,吧他们加起来得到的0.028就是“人工智能的应用”的“关键词频率”。
比如说一个查询中有N个关键词:

w 1 , w 2 , w 3 , . . . , w n

它们在一篇特定的文章中的词频(Term Frequency)分别为:
T F 1 , T F 2 , T F 3 , . . . , T F n

那么,这个查询和这篇文章的相似度(相关性)为:
T F 1 + T F 2 + T F 3 + . . . + T F n

但是,问题又来了,像“的”这种关键字没有什么实际的意义,却占据了总词频的七成以上,对于我们确定真正的相关性没有起到什么作用,我们称这样的词为“停止词”(stop word),我们在计算相关性的时候不考虑类似的词。在我们汉语中,像“的”,“得”,“地”,“是”等相关的词汇,都算作是停止词,在计算相关性的时候不参与考虑。在去除了这些停止词之后,上述的相关性就变成了0.003 + 0.005 = 0.008。
综上所述,这个相关性的计算还有一些不足之处,“人工智能”是一个相对专业的词语,而“应用”一词则算是一个相对普通的名词,那么为了体现主题,是不是应该把“人工智能”一词的权重增大。《数学之美》一书中指出设定关键词的权重的设定需要满足以下两个条件:
1.一个词的预测主题的能力越强,权重越大,反之权重越小。由上述可以看出,从“人工智能”一词或多或少反映出这篇文章的主题,而从“的”或者是“应用”一词无法反映出这篇文章的主题。因此可以得出“人工智能”的权重就应该大一些。
2.停止词在相关性的计算中起不到任何作用,所以停止词的权重应该为0。
综上所述,我们可以发现一个关键词在很少的文章中出现,通过这个关键词就很容易锁定搜索的目标,这个关键词的权重也应该大。反之,如果一个关键词在大量的文章中出现,很难通过这个关键词来锁定我们要搜索的目标,那么这个关键词的权重就应该小。这就很好地解释了我们在第一段的那句话:字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
如何来计算我们的关键词权重,在信息检索中,我们用的最多的就是IDF(Inverse Document Frequency)“逆文本频率指数”,计算IDF的公式为:
I D F = log ( D D w )

在这个公式中D表示所有的文章数,Dw表示出现关键词的文章数。我们来举个栗子,比如说停止词“的”在每一篇文章中都有出现过,那么D=Dw,所以“的”这个关键词的权重IDF = log(D/Dw) = log(1) = 0,我们再来举个栗子,假如有1/64文章中都出现了“人工智能”关键词,那么D/Dw = 64,那么“人工智能”这个关键字的权重就是IDF = log(D/Dw) = log(64) = 6。“应用”这个关键词在1/4的文章中都出现过,那么关键词“应用”的权重IDF = log(D/Dw) = log(4) = 2加上关键词的权重,整体的相关性的公式是:
T F 1 I D F 1 + T F 2 I D F 2 + . . . + T F n I D F n

那么我们再计算一下“人工智能的应用”这个搜索整体的相关性:
T F 1 I D F 1 + T F 2 I D F 2 + . . . + T F n I D F n = 0.003 6 + 0.02 0 + 0.005 2 = 0.028

这样计算出来的词条相关性就算是比较准确的了。当然这个只是初步的一个TF-IDF计算啦,在现在的搜索引擎中,已经对TF-IDF进行了很多的优化,使得相关度的度量更加准确了。

TF-IDF的信息论依据

在信息论中,我们可以用query中关键词(key word)的信息量来表示这个关键词所含有信息的多少,所以我们可以用关键词的信息量来表示这个词的权重,可以用公式表示:

I ( w ) = P ( w ) log P ( w ) = T F ( w ) N log ( T F ( w ) N ) = T F ( w ) N log ( N T F ( w ) )

因为N为整个语料库的大小,所以N是一个常数,然后我们可以把公式表示成如下所示:
I ( w ) = P ( w ) log P ( w ) = T F ( w ) N log ( N T F ( w ) ) T F ( w ) log ( N T F ( w ) ) T F ( w ) log ( 1 T F ( w ) )

由上述的公式可以知道,关键词的权重是只与关键词的词频相关的,但是可以发现这么来计算关键词的权重也会有一些小的漏洞,就是假如有两个关键词Wa和Wb,他们有着相同的词频,但是Wa是集中出现在某些少数的特定文章中的,Wb是散布在很多文章中的,相比而言,Wa相比于Wb的权重就应该更大一些,因为Wa比Wb拥有更高的分辨率。显然我们需要更好的公式来通过关键词的分辨率去计算关键词的权重。在《数学之美》一书中,吴军博士对此做出了以下的理想假设:
1.每篇文章的大小基本相同,均为M个词那么
M = N D = w T F ( w ) D

2.一个关键词在文章中出现,不管出现多少次,贡献都等同,这样一个词要么在一个文献中出现c(w)=TF(w)/D(w)次,要么是0(c(w) < M)。所以从上面得到的公式我们可以推导出:
I ( w ) T F ( w ) log N T F ( w ) = T F ( w ) log M D c ( w ) D ( w ) = T F ( w ) log ( D D ( w ) M c ( w ) )

所以,由这个公式可以知道,TF-IDF和信息量之间的差异,因为上式随着c(w)的增加而递减,所以我们将上述公式继续进行推导可以得到:
T F ( w ) log ( D D ( w ) M c ( w ) ) = T F ( w ) ( log ( D D ( w ) ) + log ( M c ( w ) ) ) = T F ( w ) log ( D D ( w ) ) + T F ( w ) log ( M c ( w ) ) = T F I D F ( w ) + T F ( w ) log ( M c ( w ) )

所以可以得到:
T F I D F ( w ) = I ( w ) T F ( w ) log ( M c ( w ) )

所以由上述式子可以知道,当关键词的信息量I(w)越大,那么他的TF-IDF(w)的值就越大;同时query命中文章中的w次数越多,c(w)越大,TF-IDF(w)也越大。所以在信息论的角度,也可以解释博文开头的那句论断。
综合上面的理解,我们可以知道TF-IDF是衡量query中关键词(key word)的重要性(权重)的重要指标。现在的算法中统计关键词权重算法虽然说对于TF-IDF而言有了很大的改进,但是总的来说基本上都还是基于TF-IDF的,所以理解了TF-IDF的原理,就基本上理解了搜索中的关键词权重的算法。
此博文是我基于吴军博士的巨作《数学之美》的内容,对于TF-IDF算法的理解,希望能对大家对于关键词权重算法的理解有所帮助,因本人能力有限,如有错误疏漏,请各位朋友轻喷,如有转载,也请您注明出处,谢谢。

猜你喜欢

转载自blog.csdn.net/oscar6280868/article/details/80884470