BM25(Best Matching 25)介绍与使用
BM25(Best Matching 25)是一种基于概率检索框架的改进算法,主要用于信息检索中的相关性评分。它通过引入词频饱和函数、文档长度归一化等机制,克服了传统TF-IDF算法的局限性。
一、BM25的核心原理
1. 改进TF-IDF的三大维度
-
词频饱和控制:通过引入非线性函数限制高频词的影响,避免词频无限增长导致相关性偏差。
-
文档长度归一化:对长文档进行惩罚,解决长文档因包含更多关键词而天然得分高的问题。
-
参数可调节性:通过调节因子(如k1、b)灵活控制词频和文档长度的影响程度。
2. 核心设计思想
-
词的重要性(IDF):基于逆文档频率衡量词的区分能力,包含该词的文档越多,其权重越低。
-
词与文档的相关性(TF优化):对词频进行非线性变换,使高频词贡献趋于饱和。
-
词与查询的相关性(查询词频):若查询较长,会额外考虑查询中的词频(qfi),但通常默认qfi=1。
二、BM25的计算公式
BM25的得分公式分为三个部分,最终得分为所有查询词项的加权和:
Score ( Q , D ) = ∑ i = 1 n IDF ( q i ) ⋅ f ( q i , D ) ⋅ ( k 1 + 1 ) f ( q i , D ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ D ∣ avgdl ) \text{Score}(Q,D) = \sum_{i=1}^n \text{IDF}(q_i) \cdot \frac{f(q_i,D) \cdot (k_1+1)}{f(q_i,D) + k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\text{avgdl}}\right)} Score(Q,D)=i=1∑nIDF(qi)⋅f(qi,D)+k1⋅(1−b+b⋅avgdl∣D∣)f(qi,D)⋅(k1+1)
- IDF(逆文档频率)
-
公式:
IDF ( q i ) = log ( N − n ( q i ) + 0.5 n ( q i ) + 0.5 ) \text{IDF}(q_i) = \log \left( \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} \right) IDF(qi)=log(n(qi)+0.5N−n(qi)+0.5)
-
N N N:文档总数
-
n ( q i ) n(q_i) n(qi):包含词项 q i q_i qi的文档数
-
作用:衡量词项的全局区分度,高频词(如“的”)IDF值低。
-
- TF(词频)与长度归一化
-
文档词频 f ( q i , D ) f(q_i,D) f(qi,D):词项 q i q_i qi在文档 D D D中的出现次数。
-
长度归一化因子:
K = k 1 ⋅ ( 1 − b + b ⋅ ∣ D ∣ avgdl ) K = k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\text{avgdl}} \right) K=k1⋅(1−b+b⋅avgdl∣D∣)
-
∣ D ∣ |D| ∣D∣:文档 D D D的长度(词数)
-
avgdl \text{avgdl} avgdl:文档集合的平均长度
-
参数作用:
◦ k 1 k_1 k1(默认1.2):控制词频饱和度,值越大饱和速度越慢。
◦ b b b(默认0.75):控制文档长度的影响, b = 0 b=0 b=0时忽略长度。
-
- 得分计算示例
假设文档库中有1000篇文档( N = 1000 N=1000 N=1000),查询词“算法”在50篇文档中出现( n ( q i ) = 50 n(q_i)=50 n(qi)=50),当前文档 D D D中“算法”出现5次( f ( q i , D ) = 5 f(q_i,D)=5 f(qi,D)=5),文档长度 ∣ D ∣ = 800 |D|=800 ∣D∣=800,平均长度 avgdl = 500 \text{avgdl}=500 avgdl=500,参数 k 1 = 1.2 k_1=1.2 k1=1.2, b = 0.75 b=0.75 b=0.75:
- 计算IDF:
IDF = log ( 1000 − 50 + 0.5 50 + 0.5 ) ≈ 2.12 \text{IDF} = \log \left( \frac{1000 - 50 + 0.5}{50 + 0.5} \right) \approx 2.12 IDF=log(50+0.51000−50+0.5)≈2.12 - 计算K值:
K = 1.2 ⋅ ( 1 − 0.75 + 0.75 ⋅ 800 500 ) ≈ 1.8 K = 1.2 \cdot \left(1 - 0.75 + 0.75 \cdot \frac{800}{500} \right) \approx 1.8 K=1.2⋅(1−0.75+0.75⋅500800)≈1.8 - 最终得分:
Score = 2.12 ⋅ 5 ⋅ ( 1.2 + 1 ) 5 + 1.8 ≈ 2.12 ⋅ 1.54 ≈ 3.26 \text{Score} = 2.12 \cdot \frac{5 \cdot (1.2+1)}{5 + 1.8} \approx 2.12 \cdot 1.54 \approx 3.26 Score=2.12⋅5+1.85⋅(1.2+1)≈2.12⋅1.54≈3.26
三、BM25的优势与场景
1. 优势
-
抗长文档偏差:通过归一化因子平衡长文档的天然优势。
-
灵活的参数调节:可根据业务需求调整 k 1 k_1 k1和 b b b,优化排序效果。
-
适用性广:尤其适合短查询与长文档的匹配(如搜索引擎)。
2. 应用场景
-
搜索引擎:Elasticsearch从5.0版本后默认使用BM25。
-
问答系统:结合RAG(检索增强生成)提升答案相关性。
-
推荐系统:用于候选内容与用户查询的匹配评分。
四、与TF-IDF的对比
维度 | TF-IDF | BM25 |
---|---|---|
词频处理 | 线性增长,无上限 | 非线性饱和(如 k 1 = 1.2 k_1=1.2 k1=1.2时趋近于 k 1 + 1 k_1+1 k1+1) |
文档长度 | 无归一化 | 通过参数 b b b动态调整影响 |
参数灵活性 | 固定公式 | 可调节 k 1 k_1 k1、 b b b、 k 3 k_3 k3(查询词频参数) |