BM25的改造-参照TF

需求

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,欢迎大家留言,指教!!!

你可能感兴趣的:(BM25的改造-参照TF)