欢迎投稿

今日深度:

elasticsearch bm25调参,elasticsearchbm25

elasticsearch bm25调参,elasticsearchbm25


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 中一般查询的得分了.


www.htsjk.Com true http://www.htsjk.com/Elasticsearch/35883.html NewsArticle elasticsearch bm25调参,elasticsearchbm25 bm25                                                   elasticsearch中BM25相似度算法使用的公式如上所示。其中f(qi, D) 表示term qi在文档D中的出现次...
相关文章
    暂无相关文章
评论暂时关闭