计算词频权重和IDF、逆文档频率时为什么要用log?

问题描述 投票:0回答:5

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

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

据说使用Log是因为它“减弱”了IDF的影响。这是什么意思?

此外,为什么我们使用对数频率权重来衡量术语频率,如下所示:

enter image description here

information-retrieval tf-idf
5个回答
65
投票

Debasis 的答案是正确的。我不知道为什么他被否决了。

这是直觉: 如果 doc1 中“computer”一词的词频为 10,而 doc2 中为 20,我们可以说 doc2 比 doc1 与“computer”一词更相关。

但是,如果 doc1 中同一个单词“computer”的词频为 100 万,doc2 为 200 万,此时,相关性方面不再有太大差异,因为它们都包含非常高的计数术语“计算机”。

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

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

希望这有帮助!


37
投票

文档中术语出现的次数越多,相关性就越高...术语频率对文档相关性的贡献本质上是一个次线性函数...因此,对数可以近似这个子线性函数。线性函数...

同样适用于 idf...线性 idf 函数可能会过多地提高具有高 idf 术语的文档分数(由于拼写错误,这可能是罕见的术语)...次线性函数表现更好.. .


2
投票

我会尝试更多地将我的答案放在实际方面。让我们用两个词——“The”和“Serendipity”。

所以这里的第一个单词“the”,如果我们的语料库有 1000 个文档,几乎会出现在每个文档中,但“serendipity”是一个罕见的单词,可能出现在较少的文档中,例如我们认为它只出现在一个文档中.

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

以色列国防军 日志(IDF)
= 1000/1000 = 0 0
机缘巧合 = 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 出现在 2 个文档中。

如果我们没有记录日志

t1 的 IDF = 1000 t2 的 IDF = 500

这是否意味着 t1 的重要性和稀有性是其两倍?显然不是,如果我们谈论的是大数据和数百万个文档,那么第 1、2、5 或 10 个文档中出现的单词将被认为同样重要。这就是为什么为了减少这种影响我们采用对数。

© www.soinside.com 2019 - 2024. All rights reserved.