即使是不成熟的尝试,也胜于胎死腹中的策略。

找寻TF_IDF和BM25的评分计算优化排序

Elasticsearch | 作者 jiakechong1642 | 发布于2017年05月18日 | | 阅读数:5356

1.下面简述下如何根据explain解释TFIDF和BM25的评分计算
2.首先是TFIDF
使用ik_smart分词器,ES为2.3.3
文档是:分词结果是
"伟业我爱我家"     分词结果:【伟业,我,爱我,家】
"我爱我家"     【我,爱我,家】
这两个。
multi_match  匹配,query=我爱我家
排名如下
-----------------------------------------------------------
"伟业我爱我家"    "_score": 6.8563557,
详细参数 
"我":tf=1,idf=6.7638364,fieldNorm=0.5,queryNorm=0.07292504,
“爱我”: tf=1,idf=6.7638364,fieldNorm=0.5,queryNorm=0.07292504
“家”: tf=1,idf=6.278329,fieldNorm=0.5,queryNorm=0.07292504
----------------------------------------------------------
"我爱我家"          "_score": 6.7839246,
"我":tf=1,idf=6.9336233,fieldNorm=0.5,queryNorm=0.07370365,
“爱我”: tf=1,idf=6.9336233,fieldNorm=0.5,queryNorm=0.07370365
“家”: tf=1,idf=6.9336233,fieldNorm=0.5,queryNorm=0.07370365
---------------------------------------------------------
其中queryNorm是由每个term词项的idf综合计算而来,所以在每个文档中,他都是一样的。
然后仔细比较得分,觉得每个得分都可以被推算出来
但是排序结果不符合期望:
queryNorm 官方文档也说了基本没有什么用
tf=1没什么可说
idf有些问题,比如"爱我"在这两个文档中是不同的(这是因为这两个文档在不同的分片中引起的)
那这么说来,TFIDF的得分就仅仅受tf,idf,fieldNorm控制,
而idf因为分片不均匀可能会出现一点差异,fieldNorm又犹由于精度让长度为3或者4 的文档值都为0.5
。综上:tfidf在这种量不多(200万)的短文本检索下,效果很差。

这种情况下,我该怎么优化这个排序呢(让“我爱我家”,排在"伟业我爱我家"前面呢?)
 
 
 
------------------BM25的详情稍后补上-------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[尊重社区原创,转载请保留或注明出处]
本文地址:http://elasticsearch.cn/article/175


1 个评论

用的什么查询啊?不同的查询,评分结果也不一样的。

要回复文章请先登录注册