Solr相似度算法一:Lucene TF-IDF 相关性算分公式
来源:互联网 发布:淘宝店铺悬浮导航制作 编辑:程序博客网 时间:2024/04/30 07:28
Solr相似度算法一:Lucene 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) )
- tf(t in d ), = frequency½
- idf(t) = 1 +log(文档总数/(包含t的文档数+1))
- coord(q,d) 评分因子,。越多的查询项在一个文档中,说明些文档的匹配程序越高,比如说,查询"A B C",那么同时包含A/B/C3个词的文档 是3分,只包含A/B的文档是2分,coord可以在query中关掉的
- queryNorm(q)查询的标准查询,使不同查询之间可以比较
- t.getBoost() 和 norm(t,d) 都是提供的可编程接口,可以调整 field/文档/query项 的权重
各种编程插口显得很麻烦,可以不使用,所以我们可以把Lucence的算分公式进行简化
score(q,d) = coord(q,d) · ∑ ( tf(t in d) · idf(t)2 )
结论
- TF-IDF 算法是以 term为基础的,term就是最小的分词单元,这说明分词算法对基于统计的ranking无比重要,如果你对中文用单字切分,那么就会损失所有的语义相关性,这个时候 搜索只是当做一种高效的全文匹配方法
- 按照规则1
某个词或短语在一篇文章中出现的次数越多,越相关
一定要去除掉stop word,因为这些词出现的频率太高了,也就是TF的值很大,会严重干扰算分结果 - TF和IDF在生成索引的时候,就会计算出来: TF会和DocID保存在一起(docIDs的一部分),而IDF= 总文档数 / 当前term拥有的docIDs 长度
0 0
- Solr相似度算法一:Lucene TF-IDF 相关性算分公式
- Solr相似度算法一:Lucene TF-IDF 相关性算分公式
- Lucene TF-IDF 相关性算分公式
- TF/IDF tf idf算法公式
- TF-IDF 余弦相似度
- TF-IDF提取关键词并用余弦算法计算相似度
- spark mllib 中的tf-idf算法计算文档相似度
- 文本相似度计算之tf-idf
- TF-IDF与余弦相似度
- TF-IDF公式
- 文本相似度,余弦,BM25,TF-IDF ,DF
- TF-IDF与文档相似度的应用
- tf-idf权值的向量表示、余弦相似度
- 【Spark Mllib】TF-IDF&Word2Vec——文本相似度
- NLP计算文档相似度之TF-IDF
- 使用spark TF-IDF特征计算文章间相似度
- 利用lucene获取tf-idf
- 利用lucene获取tf-idf
- This Android SDK requires Andro...date ADT to the latest version问题
- elasticsearch-head
- Oracle_Update...Set...From...解决方法Merge Into...Using...
- google guava 重复key的Map范例使用
- GIT - 基本概念(分支, 差异, 合并)
- Solr相似度算法一:Lucene TF-IDF 相关性算分公式
- iOS tableViewscell的动画效果
- php pdo 链接数据库
- 在两台Linux机器之间配置一条SLIP链路,以便使用互联网socket进行通信
- 160. Intersection of Two Linked Lists
- sql server 月份减一
- SO_REUSEADDR
- Android onTouch事件分析和传递机制
- LLDB调试命令(二)掌握target命令 让你的项目崩溃位置从此无处遁形