IDF的公式是log(N / df t),而不仅仅是N / df t。
其中N =集合中的总文档,df t =术语t的文档频率。
据说使用日志是因为它“抑制”了IDF的影响。这是什么意思?
另外,为什么我们使用对数频率进行对数频率称量,如下所示:
答案 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一样对结果产生影响。