一、背景
BM25算法本质上来说是tf-idf的升级版本。
tf-idf的全程是:词频-逆文档频率(term frequency–inverse document frequency),就是词频*逆文档频率。
BM25全程:best match,思想和tf-idf是一样的。
二、TF-IDF公式
1.TF
在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语 t_{i} 来说,它的重要性可表示为:
以上式子中 n_{i,j} 是该词在文件d_{j}中的出现次数,而分母则是在文件d_{j}中所有字词的出现次数之和。
2.IDF
其中
|D|:语料库中的文件总数
$|\{ j: t_{i} \in d_{j}\}| $:包含词语 t_{i} 的文件数目(即 n_{i,j} neq 0的文件数目)如果该词语不在语料库中,就会导致被除数为零,因此一般情况下使用
三、BM25公式
$ Score(Q, d) = \sum_{i = 1}^t w_i * R(q_i, d) $
上面式子中wi表示qi的权重,R(qi,d)为qi和d的相关性,Score(Q,d)就是每个语素qi和d的相关性的加权和。
wi 的计算方法有很多,一般是用IDF来表示的,但这里的IDF计算和上面的有所不同,具体的表达式如下:
$w_i = IDF(q_i) = \log \frac {N - n(q_i) + 0.5} {n(q_i) + 0.5}$
上面式子中N表示文本集合中文本的总数量,n(qi)表示包含qi这个词的文本的数量,0.5主要是做平滑处理。
R(qi,d)的计算公式如下:
$R(q_i, d) = \frac {f_i * (k_1 + 1)} {f_i + K} * \frac {qf_i * (k_2 + 1)} {qf_i + k_2}$
其中
$K = k_1 * (1 - b + b * \frac {dl} {avg dl})$
上面式子中fi为qi在文本d中出现的频率,qfi为qi在Q中出现的频率,k1,k2,b都是可调节的参数,dl,avgdl分别为文本d的长度和文本集D中所有文本的平均长度
一般qfi=1,取k2=0,则可以去除后一项,将上面式子改写成:
$R(q_i, d) = \frac {f_i * (k_1 + 1)} {f_i + K}$
通常设置k1=2,b=0.75。参数b的作用主要是调节文本长度对相关性的影响。
一般取值范围是
k1∈[1.2,2.0]:它用于调节饱和度变化的速率。数值越低则饱和的过程越快速。
b=0.75:字段长度归约用 b 来表示,它的值在 0 和 1 之间,1 意味着全部归约化,0 则不进行归约化。
文献:
1.https://zhuanlan.zhihu.com/p/113224707
2.https://www.cnblogs.com/jiangxinyang/p/10516302.html
3.https://d.shikey.com/jike/%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4%E5%B7%B2%E5%AE%8C%E7%BB%93/55%20AI%E6%8A%80%E6%9C%AF%E5%86%85%E5%8F%82%E5%AE%8C%E7%BB%93/pdf/019%E8%AE%B2%E7%BB%8F%E5%85%B8%E6%90%9C%E7%B4%A2%E6%A0%B8%E5%BF%83%E7%AE%97%E6%B3%95%EF%BC%9ABM25%E5%8F%8A%E5%85%B6%E5%8F%98%E7%A7%8D%EF%BC%88%E5%86%85%E9%99%84%E5%85%A8%E5%B9%B4%E7%9B%AE%E5%BD%95%EF%BC%89.pdf?preview