当前位置:   article > 正文

elasticsearch bm25调参_elasticsearch query语句设置bm25

elasticsearch query语句设置bm25

bm25

                                         


        elasticsearch中BM25相似度算法使用的公式如上所示。其中f(qi, D) 表示term qi在文档D中的出现次数,即tf。参数k1用来控制公式对tf的敏感程度,k1越小,对tf越不敏感,即tf增大时,公式的值变化不大。参数b用来控制文档长度对权值的惩罚程度:b=0,则文档长度对权值没有影响,b=1,则文档长度对权值达到完全的惩罚作用。由于在我的应用中,词频不重要,而且需要query与文档尽量相似,即需要对文档长度进行惩罚,因此将k1设为较小的值1.2,将b设为较大的值为0.9。


IDF 还是和之前的一样. 公式 IDF(q) = 1 + ln(maxDocs/(docFreq + 1))

f(q, D) 是 tf(term frequency)

|d| 是文档的长度, avgdl 是平均文档长度.

先不看 IDF 和 Document Length 的部分, 变成 tf * (k + 1) / (tf + k),

相比传统的 TF/IDF (tf(q in d) = sqrt(termFreq)) 而言, BM25 抑制了 tf 对整体评分的影响程度, 虽然同样都是增函数, 但是, BM25 中, tf 越大, 带来的影响无限趋近于 (k + 1), 这里 k 值通常取 [1.2, 2], 而传统的 TF/IDF 则会没有临界点的无限增长.

文档长度的影响, 同样的, 可以看到, 命中搜索词的情况下, 文档越短, 相关性越高, 具体影响程度又可以由公式中的 b 来调整, 当设值为 0 的时候, 就跟之前 ‘TF/IDF’ 那篇提到的 "norms": { "enabled": false } 一样, 忽略文档长度的影响.

综合起来,

k = 1.2

b = 0.75

idf * (tf * (k + 1)) / (tf + k * (1 - b + b * (|d|/avgdl)))

最后再对所有 term 求和. 就是 Elasticsearch 5 中一般查询的得分了.


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/126662
推荐阅读
相关标签
  

闽ICP备14008679号