BM25的改造-参照TF
2019-05-23 本文已影响0人
A_You
需求
ElasticSearch 默认使用的是BM25算法进行排序, 参照指标有 IDF、TF、Doc_Length;并有相关权重加权;其实一切都非常完美,但是有客户反应,这样的排序规则解释性不强,就只是希望按照 词频-TF 进行排序;所幸只有这一家客户有这样的需求,并且搜索关键词比较单一
参数
BM25 在 ElasticSearch中的介绍如文档所所述,并且还有如下参数可以调节:
k1
This parameter controls how quickly an increase in term frequency results in term-frequency saturation. The default value is 1.2. Lower values result in quicker saturation, and higher values in slower saturation.
b
This parameter controls how much effect field-length normalization should have. A value of 0.0 disables normalization completely, and a value of 1.0 normalizes fully. The default is 0.75.
方案
在搜索关键词单一的情况下,可以考虑将 b 置为0,忽略文档长度的限制,IDF的权重是一样的,那么剩下的就只有TF权重的影响啦,从而间接的影响排序效果; Elastic Mapping 效果如下:
settings:
"similarity": {
"my_bm25": {
"type": "BM25",
"b": "0"
}
}
Mapping:
"content": {
"type": "text",
"term_vector": "yes",
"similarity": "my_bm25",
"analyzer": "ik_smart"
},
总结
BM25已经是非常好的效果,对于命中词的多样性越大;得分也会也高;对于复杂的搜索词,这种方案就不行啦,其实中间有一段时间一直在寻找 ignore idf 的方法;但是结果然并卵,虽然有一些拆你可以利用,但是也是需要重启集群,做各种配置,重点是只有少量的人在使用
ToDo
如果是你,你会有什么好的Idea,欢迎大家留言,指教!!!