如何计算查询的 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-IDF
与Query
和Document
之间的余弦相似度。
【讨论】:
【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章