搜索排序算法之BM25

        BM25属于bag-of-word(词袋)模型, 是用来计算某一个目标文档(Document)相对于一个查询关键字(Query)的“相关性”(Relevance)的流程。BM25认为:词频和相关性之间的关系是非线性的,具体来说,每一个词对于文档相关性的分数不会超过一个特定的阈值,当词出现的次数达到一个阈值后,其影响不再线性增长,而这个阈值会跟文档本身有关。达到的效果是,某一个单词对最后分数的贡献不会随着词频的增加而无限增加。

算法按照以下3部分来构建

  • 单词qiq_i与文档DD之间的相关性
  • 单词qiq_i与query之间的相关性
  • 每个单词qiq_i的权重

单词和目标文档的相关性
        tf-idf中,单词和文档的相关性用“词频”表示(关于tftfidfidf的计算可以参考文章文本特征提取之TF-IDF),BM25对词频进行了标准化处理,公式如下:

score(tfqi,D)=tftd(k1+1)tftd+k1(1b+bDavgdl) score(tf_{q_i, D})=\frac{tf_{td}*(k_1+1)}{tf_{td}+k_1*(1-b+b*\frac{|D|}{avgdl})}
其中,qiq_i为query中的第ii个词, tf(qi,D)tf(q_i, D)为目标文档中qiq_i的词频,D|D|是文档D的长度,avgdlavgdl是语料库全部文档的平均长度,k1k_1bb是参数。

单词和query的相关性

score(tfqi,Q)=(k2+1)tftqk2+tftq score(tf_{q_i, Q}) = \frac{(k_2+1)*tf_{tq}}{k_2+tf_{tq}}
其中,tftqtf_{tq}是词项t在查询q中的权重,从上面的公式中可以看到,当词频无限增大时,score(tfqi,D)=k2+1score(tf_{q_i, D})=k_2+1

单词权重
        单词的权重最简单的就是用idf值或是其变种,我们用idf(qi)idf(q_i)表示单词qiq_i的权重。

合起来公式就是

score(D,Q)=i=1nidf(qi)tftd(k1+1)tftd+k1(1b+bDavgdl)(k2+1)tftqk2+tftq score(D,Q)=\sum_{i=1}^nidf(q_i)*\frac{tf_{td}*(k_1+1)}{tf_{td}+k_1*(1-b+b*\frac{|D|}{avgdl})} * \frac{(k_2+1)*tf_{tq}}{k_2+tf_{tq}}

BM25 在 TF-IDF 的基础上增加了两个可调参数: k1k_1bb,分别代表 “词语频率饱和度(term frequency saturation)” 和 “字段长度规约(Field-length normalization)

  • 词语频率饱和度(term frequency saturation): k1k_1参数的值一般介于 1.2 到 2.0 之间。数值越低则饱和的过程越快速。如果 k1k_1 取 0,则对应 BIM 模型,document term frequency完全没有影响,如果k1k_1 取较大值,对应使用原始的 term frequency
  • 字段长度归约(Field-length normalization): 将文档的长度归约化到全部文档的平均长度上。b=1 表示基于文档长度对 term frequency 进行完全的缩放,b=0 表示归一化时不考虑文档长度因素,长文档更有可能排在前面如果查询很长,
  • 对于 query term 也可以采用类似的权重计算方法。对查询长度没有进行归一化(相当于b=0)。k2=0k_2=0 表示 term frequency in query 并没有影响,(apple apple pie) 和 (apple pie) 完全一样。

参考文档

可插拔的相似度计算
经典检索算法
搜索中的权重度量利器: TF-IDF和BM25

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章