计算词频权重和逆文档频率时,为什么要使用日志?

49
IDF的公式是log(N/df t),而不仅仅是N/df t。
其中,N表示集合中的文档总数,df t表示词项t的文档频率。
据说使用对数是因为它“减弱”了IDF的影响。这是什么意思?
此外,为什么我们在这里使用对数频率加权来进行词项频率的加权呢?

请查看 https://mailman.uib.no/public/corpora/2018-June/thread.html。 - alvas
5个回答

67

Debasis的回答是正确的。我不知道他为什么会被downvote。

这里有一个直觉: 如果单词“computer”在doc1中的词频为10,在doc2中为20,则我们可以说doc2与单词“computer”更相关。

然而,如果相同单词“computer”在doc1中的词频为100万,在doc2中为200万,这时,它们对于单词“computer”的相关性没有太大的差异了,因为它们都包含了非常高的单词“computer”计数。

就像Debasis的答案一样,添加对数是为了降低具有高频率的词的重要性,例如使用以2为底数的对数,100万的计数将减少到19.9!

我们还将log(tf)加1,因为当tf等于1时,log(1)等于零。通过加一,我们区分了tf = 0和tf = 1。

希望这有所帮助!


1
很好的回答,但问题不是关于TF而是IDF吗?看起来你的推理应该应用在TF-IDF上。 - Xavier Mukodi
1
是的,相同的想法也适用于IDF术语。 IDF越高,给定单词/令牌的独特性就越高。假设总文档数为100M,具有给定令牌的文档数为10,则100M / 10 = 10M。因此,应用对数可能会有所帮助。 - unki
TF公式中没有日志,请参见:https://en.wikipedia.org/wiki/Tf%E2%80%93idf - David

37

在文档中一个术语出现的次数越多并不一定意味着相对重要性更高... 术语频率对文档相关性的贡献本质上是一个次线性函数... 因此使用对数来近似这个次线性函数...

同样适用于idf... 线性idf函数可能会过度提高具有高idf术语(由于拼写错误而变得罕见)的文档分数... 采用次线性函数则效果更好...


2
我会尝试更加实际地回答你的问题。我们来看两个词——“the”和“Serendipity”。
在这里,“the”是一个常见词,如果我们的语料库有1000个文档,它几乎会出现在每个文档中,但是“Serendipity”是一个罕见的词,可能只会出现在少数文档中,例如我们假设它只在一个文档中出现。
因此,在计算两者的逆向文件频率(IDF)时:
IDF log(IDF)
The = 1000/1000 = 0
0
Serendipity = 1000/1 =1000
~6.9
现在我们可以看到,如果我们的词频(TF)范围在0-20之间,如果我们的IDF不是以log(IDF)的形式表示,那么它肯定会支配TF,但如果以log(IDF)的形式表示,则对结果的影响与TF相等。

1
你可以这样想,我们获取整个语料库中单词的信息内容,即信息内容 = -log(p) = -log(n_i/N) = log(N/n_i)。

0
在IDF的背景下,让我举个例子:
假设我们有1000个文档,词项t1只出现在其中一个文档中,而词项t2则出现在两个文档中。
如果我们不取对数,则
t1的IDF = 1000 t2的IDF = 500
这是否意味着t1比t2更重要和罕见?显然不是,如果我们谈论大数据和数百万个文档,那么出现在1、2、5或10个文档中的词汇将被视为同等重要。这就是为什么我们要取对数来减小这种影响的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接