在 tf-idf 中,为什么我们按文档频率而不是语料库中所有文档的平均词频进行归一化?
In tf-idf why do we normalize by document frequency and not average term frequency across all documents in the corpus?
平均词频是该词在其他文档中出现的平均频率。直觉上我想比较它在本文档中出现的频率相对于语料库中的其他文档。
一个例子:
- d1有词"set"100次,d2有词"set"1次,d3有词"set"1次,d4-N没有词集
- d1出现"theory"字100次,d2出现"theory"字100次,d3出现"theory"字100次,d4-N没有字集
文档 1 对于单词 "set" 和单词 "theory" 具有相同的 tf-idf,尽管单词集对 d1 比理论更重要。
使用平均词频可以区分这两个例子。 tf-iatf(逆平均词频)是一种有效的方法吗?对我来说,它会给我更重要的关键字,而不仅仅是 "rare" 和 "unique" 关键字。如果 idf 是 "an estimate of how rare that word is",iatf 不是更好的估计吗?实施起来似乎稍微有点困难(尤其是在数据经过预处理的情况下)。
我正在考虑 运行 一个实验并手动分析每个度量中排名最高的关键字,但想先通过其他人的眼睛。
后续问题:
为什么 tf-idf 被如此频繁地使用,而不是像这样可能更准确的替代方法? (如果这是一种有效的方法)。
更新:
运行 一个实验,我手动分析了几十个文档的分数和相应的热门词,看起来 iatf 和逆收集频率(我描述的标准方法)的结果非常相似。
Tf-idf 并不是要比较文档中一个词在两个语料库中的重要性。
它的目的是区分文档中某个词相对于相同术语在同一集合的其他文档(而不是跨集合)中的分布的重要性。
您可以为您的案例应用的标准方法是:收集频率,cf(t),而不是文档频率,df(t)。
cf(t) 衡量术语 t 在语料库中出现的次数。
cf(t) 除以总集合大小会给你概率
从集合中采样 t。
然后您可以计算 tf(t,d) 和 cf(t) 值的线性组合,这为您提供了从文档或集合中抽取术语 t 的概率。
P(t,d) = \lambda P(t|d) + (1-\lambda) P(t|Collection)
这被称为 Jelinek Mercer 平滑语言模型。
对于你的例子(令 \lambda=0.5):
Corpus 1: P("set",d1) = 0.5*100/100 + 0.5*100/102
Corpus 2: P("set",d1) = 0.5*100/100 + 0.5*100/300
很明显,语料库 2 的 P("set",d1) 比语料库 1 少(几乎三分之一)
平均词频是该词在其他文档中出现的平均频率。直觉上我想比较它在本文档中出现的频率相对于语料库中的其他文档。
一个例子:
- d1有词"set"100次,d2有词"set"1次,d3有词"set"1次,d4-N没有词集
- d1出现"theory"字100次,d2出现"theory"字100次,d3出现"theory"字100次,d4-N没有字集
文档 1 对于单词 "set" 和单词 "theory" 具有相同的 tf-idf,尽管单词集对 d1 比理论更重要。
使用平均词频可以区分这两个例子。 tf-iatf(逆平均词频)是一种有效的方法吗?对我来说,它会给我更重要的关键字,而不仅仅是 "rare" 和 "unique" 关键字。如果 idf 是 "an estimate of how rare that word is",iatf 不是更好的估计吗?实施起来似乎稍微有点困难(尤其是在数据经过预处理的情况下)。
我正在考虑 运行 一个实验并手动分析每个度量中排名最高的关键字,但想先通过其他人的眼睛。
后续问题: 为什么 tf-idf 被如此频繁地使用,而不是像这样可能更准确的替代方法? (如果这是一种有效的方法)。
更新: 运行 一个实验,我手动分析了几十个文档的分数和相应的热门词,看起来 iatf 和逆收集频率(我描述的标准方法)的结果非常相似。
Tf-idf 并不是要比较文档中一个词在两个语料库中的重要性。 它的目的是区分文档中某个词相对于相同术语在同一集合的其他文档(而不是跨集合)中的分布的重要性。
您可以为您的案例应用的标准方法是:收集频率,cf(t),而不是文档频率,df(t)。
cf(t) 衡量术语 t 在语料库中出现的次数。 cf(t) 除以总集合大小会给你概率 从集合中采样 t。
然后您可以计算 tf(t,d) 和 cf(t) 值的线性组合,这为您提供了从文档或集合中抽取术语 t 的概率。
P(t,d) = \lambda P(t|d) + (1-\lambda) P(t|Collection)
这被称为 Jelinek Mercer 平滑语言模型。
对于你的例子(令 \lambda=0.5):
Corpus 1: P("set",d1) = 0.5*100/100 + 0.5*100/102
Corpus 2: P("set",d1) = 0.5*100/100 + 0.5*100/300
很明显,语料库 2 的 P("set",d1) 比语料库 1 少(几乎三分之一)