【发布时间】:2015-01-19 23:46:07
【问题描述】:
IDF 的公式是 log( N / df t ) 而不仅仅是 N / df t。
其中 N = 集合中的文档总数,df t = 词条 t 的文档频率。
据说使用日志是因为它“抑制”了 IDF 的效果。这是什么意思?
另外,我们为什么要对术语频率使用对数频率加权,如下所示:
【问题讨论】:
标签: information-retrieval tf-idf
IDF 的公式是 log( N / df t ) 而不仅仅是 N / df t。
其中 N = 集合中的文档总数,df t = 词条 t 的文档频率。
据说使用日志是因为它“抑制”了 IDF 的效果。这是什么意思?
另外,我们为什么要对术语频率使用对数频率加权,如下所示:
【问题讨论】:
标签: information-retrieval tf-idf
Debasis 的回答是正确的。我不确定他为什么被否决。
这是直觉: 如果 doc1 中单词“computer”的词频为 10,而 doc2 中为 20,我们可以说 doc2 比 doc1 中的单词“computer”更相关。
但是,如果同一个词“计算机”的词频对于 doc1 是 100 万,而 doc2 是 200 万,此时,在相关性方面已经没有太大差异,因为它们都包含非常高的计算术语“计算机”。
就像 Debasis 的回答一样,添加 log 是为了降低频率较高的术语的重要性,例如使用 log base 2,100 万的计数将减少到 19.9!
我们还将 log(tf) 加 1,因为当 tf 等于 1 时,log(1) 为零。通过加一,我们可以区分 tf=0 和 tf=1。
希望这会有所帮助!
【讨论】:
在文档中出现的词越多,相关性就不一定越多……词频对文档相关性的贡献本质上是一个次线性函数……因此用对数来近似次线性函数...
同样适用于 idf...线性 idf 函数可能会过多地提高具有高 idf 术语的文档分数(由于拼写错误,这可能是罕见的术语)...亚线性函数的性能要好得多...
【讨论】:
您可以认为我们正在获取整个语料库中单词的信息内容,即信息内容 = -log(p) = -log(n_i/N) = log(N/n_i)。
【讨论】:
我将尝试将我的答案更多地放在实际方面。让我们用两个词——“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 对结果的影响。
【讨论】: