如何为查询计算tf-idf
?我理解如何使用以下定义计算一组文档的tf-idf:
tf =文档中的出现/文档中的总词数
idf = log(#documents / #documents where term occurrence
但我不明白这与查询有何关联。
例如,我看了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和occurrence = 1,log(1)= 0,所以idf
将为0,但似乎并非如此。它是基于您使用的任何文件?你如何计算查询的tf-idf?
答案 0 :(得分:4)
只有tf(生命)取决于查询本身。但是,查询的idf取决于背景文档,因此idf(生命)= 1 + ln(3/2)〜= 1.405507153。 这就是为什么tf-idf被定义为将本地组件(术语频率)与全局组件(逆文档频率)相乘。
答案 1 :(得分:2)
假设您的查询是最佳汽车保险,您的总词汇量包含汽车,最佳,自动,保险,并且您拥有N=1,000,000
个文档。所以你的查询如下:
你的一份文件可能是:
现在计算TF-IDF
和Query
的{{1}}之间的余弦相似度。
答案 2 :(得分:0)
即使这个问题被标记为已回答。我不觉得它得到了完整的回答。 所以如果将来有人会需要这个:
<块引用>但我不知道 idf 来自哪里。
在这个例子中:Project 3, part 2: Searching using TF-IDF 介绍了如何计算查询和一组文档之间的余弦相似度。
正如 @hypnoticpoisons 所述,IDF 是一个全局组件,因此每个文档的单词的 IDF 将相同:
<块引用>注意:从技术上讲,我们将查询视为新文档。但是,您不应重新计算 IDF 值:只需使用您之前计算过的值即可。