Lucene TF-IDF 相关性算分公式
- - 鲁塔弗的博客Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序. TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为 向量空间模型,名字听起来很复杂,但是它其实只包含了两个简单规则. 某个词或短语在一篇文章中出现的次数越多,越相关. 整个文档集合中包含某个词的文档数量越少,这个词越重要.
Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序
TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为 向量空间模型,名字听起来很复杂,但是它其实只包含了两个简单规则
所以一个term的TF-IDF相关性等于 TF * IDF
这两个规则非常简单,这就是TF-IDF的核心规则,第二个的规则其实有缺陷的,他单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用,显然这并不是完全正确的。并不能有效地反映单词的重要程度和特征词的分布情况,比如说搜索web文档的时候,处于HTML不同结构的特征词中对文章内容的反映程度不同,应该有不同的权重
TF-IDF的优点是算法简单,运算速度很快
Lucene为了提高可编程行,在上述规则做了一些扩充,就是加入一些编程接口,对不同的查询做了权重归一化处理,但是核心公式还是TF * IDF
Lucene算法公式如下
score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d) )
各种编程插口显得很麻烦,可以不使用,所以我们可以把Lucence的算分公式进行简化
score(q,d) = coord(q,d) · ∑ ( tf(t in d) · idf(t)2 )
某个词或短语在一篇文章中出现的次数越多,越相关
一定要去除掉stop word,因为这些词出现的频率太高了,也就是TF的值很大,会严重干扰算分结果