原理
主要用于搜索相关性的评分,概况如下:对Query进行语素解析,生成语素$q_i$,然后对于搜索结果D,计算语素$q_i$与D的相关性得分,最后将$q_i$相对于D的相关性得分进行加权求和,从而得到最终的query和D的相关性得分。一般公式如下: \(\operatorname{Score}(Q, d)=\sum_{i}^{n} W_{i} \cdot R\left(q_{i}, d\right)\) 公式中:Q表示Query,$q_i$表示Q解析后的语素,通常对于中文来说就是词语,每个词语就是一个$q_i$。d表示搜索结果的文档,$W_i$表示语素$q_i$的权重,$R(q_i, d)$表示语素$q_i$与文档打的相关性得分。对于其中权重的计算一般是基于IDF,具体公式如下: \(\operatorname{IDF}\left(q_{i}\right)=\log \frac{N-n\left(q_{i}\right)+0.5}{n\left(q_{i}\right)+0.5}\) 公式中:N表示全部的文档数,$n(q_i)$表示包含$q_i$的文档数。
相关性得分$R(q_i,d)$的计算公式如下: \(\begin{array}{c} R\left(q_{i}, d\right)=\frac{f_{i} \cdot\left(k_{1}+1\right)}{f_{i}+K} \cdot \frac{q f_{i} \cdot\left(k_{2}+1\right)}{q f_{i}+k_{2}} \\ K=k_{1} \cdot\left(1-b+b \cdot \frac{d l}{\text { avgdl }}\right) \end{array}\) 公式中:$k_1, k_2, b$为调节 因子,基于经验$k_1 = 2,k_2=1, b=0.75$,$f_i$为$q_i$在d中出现的频率,$q_{f_i}$为$q_i$在Query中出现的频率。dl为文档d的长度,avgdl为所有文档的平均长度。通常$q_{f_i}$=1, 泽公式可以简化为: \(R\left(q_{i}, d\right)=\frac{f_{i} \cdot\left(k_{1}+1\right)}{f_{i}+K}\) 综上可以得到BM25的计算公式: \(\text { Score }(Q, d)=\sum_{i}^{n} I D F\left(q_{i}\right) \cdot \frac{f_{i} \cdot\left(k_{1}+1\right)}{f_{i}+k_{1} \cdot\left(1-b+b \cdot \frac{d l}{a v g d l}\right)}\) 从BM25的公式可以看到,通过使用不同的语素分析方法、语素权重判定方法,以及语素与文档的相关性判定方法,我们可以衍生出不同的搜索相关性得分计算方法,这就为我们设计算法提供了较大的灵活性。
参考
1.BM25