暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

彻底搞懂 ES 相关度评分算法(二):BM25(Okapi BM25)

Elasticsearch之家 2022-05-17
1743

点击上方“蓝字”,轻松关注我们



人数1600+的社区,ES 8.x 课程、社区大佬免费答疑

Elastic开源社区 欢迎加入

1、引言

BM25
(全称:Okapi BM25) 其中 BM 指的是 Best Matching 的缩写,是搜索引擎常用的一种相关度评分函数。和TF/IDF
一样,BM25 也是基于词频和文档频率和文档长度相关性来计算相关度,但是规则有所不同,文章中将会给出详细讲解。

BM25
 也被认为是 目前最先进的 评分算法。

2、相关度概率模型

BM25 是一个 bag-of-words 检索功能,它根据每个文档中出现的查询词对一组文档进行排名,而不管它们在文档中的接近程度如何。它是一系列评分函数,其组件和参数略有不同。

3、Okapi BM25 函数

给定一个查询$Q$,包含关键词 q1,q2,···q1,对于文档 D 的 BM25 分数为计算公式:

3.1 逆文档频率:$IDF(q_i)$

3.1.1 函数公式及参数

3.1.2 函数曲线

以下是 IDF(qi) 随着文档频率 (qi)(反词频)的变化曲线:

BM25 的 IDF 看起来与经典的 Lucene IDF 差别不大。这里存在差异的原因是它采用了概率相关模型
,而 TF-IDF 所使用的的是向量空间模型
 。

3.1.3 总结

原本 IDF(qi) 对文档频率(反词频)非常高的词项是有可能计算出负值得出负分的,所以 Lucene 对 BM25 的常规 IDF 进行了一项优化:通过在获取对数之前将值加 1,让结果无法得出负值。最终结果是一个看起来和 Lucene 当前的 IDF 曲线极为相似的 IDF曲线。

总结:BM25 相对于 TF-IDF 在 IDF 计算分数的层面上增益并不明显。

3.2 词频相关性函数:S(qi,D)

3.2.1 函数及参数

3.2.2 相关性曲线

在 TF-IDF
 算法中,coord(q,d) 可以对匹配到的词项提供加成,文档中出现的次数越多,加成越多,这个关系是一个线性函数。

但是,如果同一个 doc 中,出现了 1000 次某个相同的词项,比如 _id = 1 的文档的 title 字段为:“苹果-苹果- ··· -苹果”(共 1000 次苹果),而 _id = 2 的文档的 title 字段为:“苹果-苹果-···-苹果”(共 100 次苹果)。那么对于词项“苹果”,文档1的相关性应该是文档2的十倍吗?

显然不是,对于文档一和文档二,这两个文档对苹果这个词项的相关性应该是非常接近的,换句话说,当文档中出现了一个词项的时候,后面再次出现相同词项,对当前文档的相关性虽然应该有提升,但是提升幅度应该逐渐下降。当词频足够多或者说达到某个阈值的时候,再增加词频对于相关度的提升应该无限趋近于0。

降低 TF 的增益权重的常用手段是对其取平方根,但是这仍然是一个无穷大函数,所以就需要设置一个阈值来限制 TF 的最大值。而 $k_1$ 就是控制因子。

也就是说,当文档频率不断增大,TF 得分最大值也就是 k1 + 1,而不会继续增大下去。

BM25降低了TF的对评分增益率

非常直观的可以看到,这条曲线随着词频的不断增大,无限地趋近于 (k + 1)(默认 k = 1.2)

3.2.3 k1 值的作用

我们可以人为地通过设置 k 的值来控制最大 TF 得分。更重要的一点是增加 k 的值可以延迟 TF 达到最大值的速度,通过拉伸这个临界值,可以来调节较高和较低词频之间的差异相关性。

3.3 文档长度相关性:K

下图是不同 $L$下,$S(q_i,D)$ 随着词频的变化曲线:

紫色曲线为:$L$ = $1\over5$,即当前文档长度:平均文档长度 = 1:5
红色曲线为:$L$ = 1,即当前文档长度:平均文档长度 = 1:1
黄色曲线为:$L$ = 5,即当前文档长度:平均文档长度 = 5:1

从图中可以看出,L越小,越快地随着词频的增加而达到 S(qi,D) 即TF
评分阈值,也就是最佳分数。


总的来说:当词频越小的时候,提升词频对评分的帮助是越大的。反之,当词频足够的时候,再提升词频对S(qi,D)的提升几乎无帮助。

4、最终函数公式

更多干货,敬请关注

↓国内超过一般认证工程师出自于此

欢我们的内容就点“在看”分享给小伙伴哦

文章转载自Elasticsearch之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论