首先,log很容易让人联想到熵和简化计算,而此处无疑是前者。
这里不妨扩展下楼主的问题:TF*IDF的科学依据是什么?或者如何科学解释tf*idf,为什么tf*idf可以成为信息检索领域文档关键词行之有效的权重量化方法?
记得在读研期间也曾想追根溯源,找到tf*idf的科学解释,而绝大部分书本上给出的文字解释 “TF:衡量词对描述文档内容的能力大小,IDF:衡量词区分其所在文档与其他文档的能力”。刚开始如 @52nlp 一样找到了吴军老师在google黑板报的《数学之美 系列九 -- 如何确定网页和查询的相关性》,可惜文中仅给出了TF*IDF的历史背景以及结论(亦可见@52nlp 给出的解释),相信大家看后还是一头雾水,至少我是。因为其略去了太多中间过程,好在最近出版的《数学之美》 实体书中吴军老师在延伸阅读部分给出了较详细的解释,但是,个人感觉还不够严谨。
关于TF*IDF的解释,我认为解释最到位、最直观的是梁斌博士的《走进搜索引擎》,详细如下:
假定一个文档就是信息源,该文档包含T1,T2,T3,...,Tn共n个词汇,每个词汇出现了N1,N1,N3,...,Nn次,词汇在文档集中出现的文档频率(词汇的发生概率)分别为D1,D2,D3,...,Dn,那么传输一个这样的文档需要多少编码长度呢?
假设每个词汇的出现相互独立,并且不考虑出现的先后顺序(即把文档看作bag of words,信息检索模型中常见)。因此由这些词汇组成的文档的概率为:X=D1^N1*D2^N2*D3*N3* ... *Dn^Nn。那么,对具有这种概率的事件进行编码,需要的编码长度为(依据为自信息:任意随机事件的自信息量定义为该事件发生概率的对数的负值,设事件x的概率为p(x),那么其自信息定义为I(x)=-log(p(x)),也可以理解为某个概率的事件进行编码所需要的最小编码长度):
-log(X)=-log(D1^N1*D2^N2*D3*N3* ... *Dn^Nn)
=-N1*log(D1) - N2*log(D2) - N3*log(D3) - ... -Nn*log(Dn)
即这篇文档理论上能够最大极限地被压缩到-log(X)比特,并且数学上可以证明这样的压缩形式是极限压缩。
另外,也可以这样理解,对于关键词Ti,文档频率为Di,这个关键词的编码长度为-log(Di),因此在文档中出现Ni次,所以,共需要编码长度为-Ni*log(Di)。而整个文档的编码长度为sum(-Ni*log(Di)),其中1<=i<=n,与上面的式子相同。
接下来,考察该文档中每个词的平均编码长度(与之对应的是熵的概念,因为在信息论中自信息量是一个随机变量,不能用来作为整个信源的信息测度,所以引入平均自信息量,即熵,定义为H(X)=sum(-pi*log(pi))),即整个文档需要的编码长度除以总词数,即:log(X)/sum(Ni),即-N1*log(D1) - N2*log(D2) - N3*log(D3) - ... -Nn*log(Dn) / (N1+N2+N3 + ... + Nn)。
在这个平均编码长度中,每个关键词都做出了不同的贡献。我们将关键词在文档中的重要性量化为对平均编码长度的贡献上。不难得出如下结论:越是出现次数多(词频高)且罕见的词汇(文档频率低)的关键词对平均编码长度大小的贡献越大。
假设K=sum(Ni),对于关键词Ti而言,它对平均编码长度的贡献为:-Ni*log(Di) / K,即 Ni / k * log(1/Di),其中Ni / K为在文档中关键词Ti的词频(TF,Term Frequency),log(1/Di)=log(|D| / |{j: Ti 出现在文档dj中}|)为文档中关键词Ti的文档频率倒数的对数式,称为逆文档频率(IDF,Inverse Document Frequency),这就是经典的TF*IDF。
这里把文档看作信息源,需要通过信道传输,而首要工作就是编码,文档的最小编码长度即为自信息量,平均编码长度为熵,而每个关键词对文档的编码都有不同的贡献,根据贡献的大小量化其重要性,即TF*IDF。
拓展:
由于TF*IDF未考虑词的位置,以及web页面中的HTML标记等信息,所以在实际应用中有很多变形,大家如果有好的实践经验,不妨在此分享和讨论?