如何计算查询的 TF-IDF?

Posted

技术标签:

【中文标题】如何计算查询的 TF-IDF?【英文标题】:How do I calculate TF-IDF of a query? 【发布时间】:2016-09-03 12:33:17 【问题描述】:

如何计算查询的tf-idf?我了解如何为具有以下定义的一组文档计算 tf-idf:

tf = 文档中出现的次数/文档中的总字数

idf = log(#documents / #documents where term 出现

但我不明白这与查询有何关联。

例如,我阅读了a resource,它说明了查询“life learning”的值

生活 | tf = .5 | idf = 1.405507153 | tf_idf = 0.702753576 学习 | tf = .5 | idf = 1.405507153 | tf_idf = 0.702753576

我理解的 tf 值,每个术语在两个可能的术语中只出现一次,因此是 1/2,但我不知道 idf 来自哪里。 我会认为#documents = 1 并且发生 = 1,log(1) = 0,所以idf 将是 0,但情况似乎并非如此。它是基于您使用的任何文件吗?如何计算查询的 tf-idf?

【问题讨论】:

【参考方案1】:

假设您的查询是best car insurance,您的总词汇表包含car, best, auto, insurance,并且您有N=1,000,000 文档。所以您的查询如下所示:

您的一份文件可能是:

现在计算TF-IDFQueryDocument 之间的余弦相似度

【讨论】:

【参考方案2】:

只有 tf(life) 取决于查询本身。但是,查询的 idf 取决于背景文档,因此 idf(life) = 1+ ln(3/2) ~= 1.405507153。 这就是为什么 tf-idf 被定义为将局部分量(词频)与全局分量(逆文档频率)相乘。

【讨论】:

如何根据背景文件计算idf?例如:query="british chunnel Impact",那么 tf 将是 1/3,但 idf 将保持 1+log(3/2)~=1.405507153 还是会改变?【参考方案3】:

即使这个问题被标记为已回答。我不觉得它被完全回答了。 因此,如果将来有人需要这个:

但我不知道 idf 来自哪里。

在本例中:Project 3, part 2: Searching using TF-IDF 介绍了如何计算查询和一组文档之间的余弦相似度。

正如@hypnoticpoisons 所说,IDF 是一个全局组件,因此每个文档的单词的 IDF 将是相同的:

注意:从技术上讲,我们将查询视为新文档。但是,您不应重新计算 IDF 值:只需使用您之前计算的值即可。

【讨论】:

以上是关于如何计算查询的 TF-IDF?的主要内容,如果未能解决你的问题,请参考以下文章

使用analyzer ='char'如何计算Tf-Idf值?

TF-IDF算法介绍,简单模拟,以及在图数据中应用

TF-IDF算法介绍,简单模拟,以及在图数据中应用

TF-IDF算法介绍,简单模拟,以及在图数据中应用

用语料库计算 tf-idf

Python:在 Pandas 中计算两列之间的 tf-idf 余弦相似度时出现 MemoryError