一、背景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/1132247072.https://www.cnblogs.com/jiangxinyang/p/10516302.html3.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