今天读完了吴军老师的数学之美第十一章,我对从信息论去解释TF-IDF有了更加深刻的理解。
我们知道Google来查询网页时,表现的很好。表现的好是因为Google给你返回的网页与你的查询相关性很大。比如我们搜索“原子能的应用”,那么搜索引擎需要做的就是在大量的网页中给你推荐一些相关性很强的网页。那么问题来了?如果让你做一个搜索引擎你如何构建。
如果我来构建搜索引擎,首先我会用最简单粗暴的办法!我统计网页中的词频(Term Frequency,TF),比如某个网页有1000个词,其中“原子能”,“的”,“应用”分别出现的次数为2次,35次和5次。那么词频分别是0.002,0.035,0.005。我简单的将词频求和,得0.042。那么我用这个词频和来衡量相关性。如果网页a的词频和为0.042, 网页b的词频和为0.052,我优先推荐网页a。
那么有的同学会发现这里有漏洞!“的”这个词频占比很大,然而它对衡量相关性毫无用处。所以我们需要去停用词(停用词指的是“是”, “中”,“地”等词)。还有个漏洞,我们直观上感觉“原子能”这个词应该更重要,而“应用”这个词不那么重要。所以我们需要更改我们的方法。我们直观上的感觉一个关键词W在D个文档中出现的次数Dw,Dw越小,证明这个网页和当前搜索更相关。我们用IDF(逆文档频率)来对这种直觉建模(IDF = ),至于为什么这样衡量我后续会用信息论来解释。
总结一下,我们用TF-IDF来衡量一个关键词与网页的相关性。因为直觉上,网页中所含的关键词词频TF越大,与网页更相关。如果这个关键词越集中在少量的几个网页中,这个关键词与这个网页更相关。所以衡量搜索和网页的相关性就用下列公式来衡量。(上面我是介绍了为何公式1.1来衡量相关性的思路)
那么为什么IDF =,而不是IDF=.我下面从信息论的角度解释一下。
我们知道一个词的信息量
其实最后TF-IDF就成了词w在整个语料库中的信息量与词w在某篇文档i的信息量的差值。图片中I(w)为词w在整个语料库的信息量,I(w)^i表示词w在第i篇文档的信息量。感兴趣的同学可以看一下公式的推导。这里解释了为什么IDF用IDF = 来衡量。
我一直强调直观的理解,下面我来谈一下我对信息论的一点想法。我们知道信息熵是用来衡量信息量的大小,信息量等同于不确定性的大小。我举这样一个例子,比如有队伍A和队伍B比赛,需要你预测谁是赢家?这里我们假设认为A赢的概率是1/2,B同理。那么如果我引入一个先验信息——“A队比较强”,这时A赢得概率要更大,不妨设3/4。当我们没有引入先验信息,我们猜A队赢,这时我们心里也很忐忑,也没底。而引入了先验信息之后,我们猜A队赢,这时我们很有把握。这种直观上的感觉有多大把握,就是不确定性!如果用公式计算一下,引入先验信息之前,信息熵很大,也就是不确定性很大,也就是很没有把握。
还有一点需要注意,引入了先验知识,能消除系统的不确定性,而我们当然想要信息更加准确*(也就是信息熵越小越好)(注,这里的先验要与比赛相关,如果是独立变量的话。比如说知道特朗普当选总统,这对于消除系统的不确定性没有丝毫帮助)那么我们回归我们的公式,I(w)代表了词w的信息量,而I(w)^i表现了词w在文档I(注意上标i表示文档i)中的信息量的大小。其实这里比较的是词w在整个预料的信息量与词w在该文档中的信息量的差值,这里其实就是信息增益的原理。