找到问题的解决办法了么?
tfidf   bm25   评分计算

tfidf bm25 评分计算

相似度算法中文档长度和文档平均长度是怎么计算的

回复

Elasticsearchstephen_qu 发起了问题 • 2 人关注 • 0 个回复 • 2322 次浏览 • 2020-01-07 11:12 • 来自相关话题

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

Elasticsearchjiakechong1642 发表了文章 • 1 个评论 • 5617 次浏览 • 2017-05-18 15:44 • 来自相关话题

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的详情稍后补上-------------------------                                

相似度算法中文档长度和文档平均长度是怎么计算的

回复

Elasticsearchstephen_qu 发起了问题 • 2 人关注 • 0 个回复 • 2322 次浏览 • 2020-01-07 11:12 • 来自相关话题

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

Elasticsearchjiakechong1642 发表了文章 • 1 个评论 • 5617 次浏览 • 2017-05-18 15:44 • 来自相关话题

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的详情稍后补上-------------------------