为什么在计算术语频率权重和IDF,逆文档频率时使用日志?

时间:2014-11-21 18:33:38

标签: information-retrieval tf-idf

IDF的公式是log(N / df t),而不仅仅是N / df t。

其中N =集合中的总文档,df t =术语t的文档频率。

据说使用日志是因为它“抑制”了IDF的影响。这是什么意思?

另外,为什么我们使用对数频率进行对数频率称量,如下所示:

enter image description here

4 个答案:

答案 0 :(得分:35)

Debasis的回答是正确的。我不确定他为什么会被投票。

这是直觉: 如果doc1中“计算机”一词的术语频率为10,而doc2中的术语频率为20,我们可以说doc2对于“计算机”这个词来说比doc1更相关。

然而,如果同一个词的术语频率''计算机',对于doc1是100万而doc2是2百万,那么,在相关性方面没有太大的区别,因为它们都包含非常高的计算术语'计算机'。

就像Debasis的回答一样,添加日志是为了抑制具有高频率的术语的重要性,例如:使用log base 2,计数100万将减少到19.9!

我们还在log(tf)中加1,因为当tf等于1时,log(1)为零。通过添加一个,我们区分tf = 0和tf = 1.

希望这有帮助!

答案 1 :(得分:21)

不一定是文档中术语的出现更多的是相关性......术语频率对文档相关性的贡献本质上是一个次线性函数...因此日志近似于此次线性函数......

同样适用于idf ......线性idf函数可能会提高过高的idf条件的文档分数(由于拼写错误可能是罕见的术语)...子线性函数执行得更好......

答案 2 :(得分:0)

您可以认为我们正在获取整个语料库中单词的信息内容,即信息内容= -log(p)= -log(n_i / N)= log(N / n_i)。

答案 3 :(得分:0)

我将尝试在实际方面更多地回答。让我们用两个词-“ The”和“ Serendipity”。

因此,这里的第一个单词“ the”,如果我们的语料库有1000个文档,几乎每个文档中都会出现,但是“偶然性”是一个罕见的单词,并且可能出现的文档数量较少,例如,我们认为它仅出现在一份文件。

因此,在计算两者的IDF时-

<身体>
IDF 日志(IDF)
= 1000/1000 = 0 0
机缘= 1000/1 = 1000 〜6.9

现在,我们看到如果TF的范围在0-20左右,那么如果我们的IDF不是log(IDF),则肯定会主导该TF,但如果将其作为log(IDF),则它将等于像TF一样对结果产生影响。