BM25算法 原理简介

bm25 是什么?

 

bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法,再用简单的话来描述下bm25算法:我们有一个query和一批文档Ds,现在要计算query和每篇文档D之间的相关性分数,我们的做法是,先对query进行切分,得到单词$q_i$,然后单词的分数由3部分组成:

  • query中每个单词q_{i}和文档d之间的相关性
  • 单词q_{i}和query之间的相关性
  • 每个单词的权重

最后对于每个单词的分数我们做一个求和,就得到了query和文档之间的分数。

下面将从3个部分来介绍bm25算法。

单词权重

单词的权重最简单的就是用idf值

IDF(q_{_i})=log\frac{N-df_{i} + 0.5}{df_{i} + 0.5}

其中N表示索引中全部文档数,df_{i}为包含了q_{i}的文档的个数。依据IDF的作用,对于某个q_{i},包含q_{i}的文档数越多,说明q_{i}重要性越小,或者区分度越低,IDF越小,因此IDF可以用来刻画q_{i}与文档的相似性。

单词和文档的相关性

tf-idf中,这个信息直接就用“词频”,如果出现的次数比较多,一般就认为更相关。但是BM25洞察到:词频和相关性之间的关系是非线性的,具体来说,每一个词对于文档相关性的分数不会超过一个特定的阈值,当词出现的次数达到一个阈值后,其影响不再线性增长,而这个阈值会跟文档本身有关。

在具体操作上,我们对于词频做了”标准化处理“,具体公式如下:

S(q_{i},d)=\frac{(k_{1}+1)tf_{td}}{K+tf_{td}}​​​​​​​,    K=k_{1}(1-b+b*\frac{L_{d}}{L_{ave}})

其中,tf_{td}是单词t在文档d中的词频,L_{d}是文档d的长度,L_{ave}是所有文档的平均长度,变量k_{1}​​​​​​​是一个正的参数,用来标准化文章词频的范围,当k_{1}​​​​​​​=0,就是一个二元模型(binary model)(没有词频),一个更大的值对应使用更原始的词频信息。b是另一个可调参数(0

单词和查询的相关性

当query很长时,我们还需要刻画单词与query的之间的权重。对于短的query,这一项不是必须的。

S(q_{i}, Q)=\frac{(k_{3}+1)tf_{tq}}{k_{3}+tf_{tq}}

这里tf_{tq}表示单词t在query中的词频,k_{3}是一个可调正参数,来矫正query中的词频范围。

完整公式

于是最后的公式为:

RSV_{d}=\sum_{t\in q}^{}log\left [ \frac{N-df_{i}+0.5}{df_{i}+0.5} \right ]\cdot \frac{(k_{1}+1)tf_{td}}{k_{1}(1-b+b*\frac{L_{d}}{L_{ave}})+tf_{td}}\cdot \frac{(k_{3}+1)tf_{tq}}{k_{3}+tf_{tq}}

​​​​​​​

 

 

 

你可能感兴趣的:(机器学习,学习,算法,自然语言处理,机器学习)