BM25属于bag-of-word(词袋)模型, 是用来计算某一个目标文档(Document)相对于一个查询关键字(Query)的“相关性”(Relevance)的流程。BM25认为:词频和相关性之间的关系是非线性的,具体来说,每一个词对于文档相关性的分数不会超过一个特定的阈值,当词出现的次数达到一个阈值后,其影响不再线性增长,而这个阈值会跟文档本身有关。达到的效果是,某一个单词对最后分数的贡献不会随着词频的增加而无限增加。
算法按照以下3部分来构建
- 单词与文档之间的相关性
- 单词与query之间的相关性
- 每个单词的权重
单词和目标文档的相关性
tf-idf中,单词和文档的相关性用“词频”表示(关于和的计算可以参考文章文本特征提取之TF-IDF),BM25对词频进行了标准化处理,公式如下:
其中,为query中的第个词, 为目标文档中的词频,是文档D的长度,是语料库全部文档的平均长度,和是参数。
单词和query的相关性
其中,是词项t在查询q中的权重,从上面的公式中可以看到,当词频无限增大时,
单词权重
单词的权重最简单的就是用idf值或是其变种,我们用表示单词的权重。
合起来公式就是
BM25 在 TF-IDF 的基础上增加了两个可调参数: 和 ,分别代表 “词语频率饱和度(term frequency saturation)” 和 “字段长度规约(Field-length normalization)”
- 词语频率饱和度(term frequency saturation): 参数的值一般介于 1.2 到 2.0 之间。数值越低则饱和的过程越快速。如果 取 0,则对应 BIM 模型,document term frequency完全没有影响,如果 取较大值,对应使用原始的 term frequency
- 字段长度归约(Field-length normalization): 将文档的长度归约化到全部文档的平均长度上。b=1 表示基于文档长度对 term frequency 进行完全的缩放,b=0 表示归一化时不考虑文档长度因素,长文档更有可能排在前面如果查询很长,
- 对于 query term 也可以采用类似的权重计算方法。对查询长度没有进行归一化(相当于b=0)。 表示 term frequency in query 并没有影响,(apple apple pie) 和 (apple pie) 完全一样。
参考文档