BM25算法原理

BM25算法原理

BM25(Best Matching 25)是信息检索领域用来计算查询(Query)与文档(Document)之间相关性的核心算法。BM25 是在经典的 TF-IDF 基础上改进而来的,它主要解决了 TF-IDF 中的两个痛点:词频饱和度文档长度归一化

1. TF-IDF

1.1 TF-IDF 的两个核心组件

TF-IDF 是由两部分相乘得来的:

TF (Term Frequency) —— 词频

  • 含义:某个词在当前文档中出现的频率。

  • 逻辑:一个词在文档中出现次数越多,说明它越能代表这篇文档的主题。

  • 公式

    $$TF(t, d) = \frac{\text{词 } t \text{ 在文档 } d \text{ 中出现的次数}}{\text{文档 } d \text{ 的总词数}}$$

IDF (Inverse Document Frequency) —— 逆文档频率

  • 含义:衡量一个词有多“稀有”。

  • 逻辑:如果一个词在语料库中的所有文档里都频繁出现(比如“的”、“是”、“我们”),那么它对于区分文档就没有什么贡献。相反,如果一个词只在极少数文档中出现,它的辨识度就极高。

  • 公式

    $$IDF(t) = \log\left(\frac{\text{语料库中的文档总数}}{\text{包含词 } t \text{ 的文档数} + 1}\right)$$

    注:分母加 1 是为了防止除以零(平滑处理)。


1.2 最终计算公式

$$TF\text{-}IDF = TF \times IDF$$

  • 高 TF-IDF 值:表示该词在当前文档中出现次数多,且在其他文档中出现次数少。这通常是一个非常好的关键词
  • 低 TF-IDF 值
    • 如果 TF 低:词没怎么出现。
    • 如果 IDF 低:词太常见了(如停用词),不具备代表性。

1.3 一个直观的例子

假设你有一个包含 10,000 篇文章的图书馆:

  1. 场景 A:词语“原子能”在某篇 1,000 字的文章中出现了 10 次。
    • 它的 TF 适中。
    • 由于“原子能”这个词很专业,全馆只有 10 篇文章提到它,它的 IDF 就会非常高。
    • 结果:TF-IDF 很高,判定为该文的关键词。
  2. 场景 B:词语“今天”在同一篇文章中也出现了 10 次。
    • 它的 TF 和“原子能”一样。
    • 但全馆 10,000 篇文章几乎每篇都有“今天”,它的 IDF 接近 0。
    • 结果:TF-IDF 很低,判定为无意义的通用词。

1.4 TF-IDF 的局限性(为什么后来有了 BM25?)

虽然 TF-IDF 很经典,但它有两个明显的短板,这正是 BM25 改进的地方:

  1. 词频线性增长问题:在 TF-IDF 中,一个词出现 100 次的权重是出现 1 次的 100 倍。但在实际检索中,出现 20 次和出现 100 次的相关性差别其实没那么大。
  2. 忽视文档长度:TF-IDF 对长文章有天然的“偏爱”,因为长文章更容易堆砌关键词。BM25 引入了长度归一化来解决这个问题。

2. BM25

2.1 BM25的核心公式

对于一个查询语句 $Q$,包含关键词 $q_1, q_2, …, q_n$,它与文档 $D$ 的相关性得分计算如下:

$$Score(D, Q) = \sum_{i=1}^{n} IDF(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot (1 - b + b \cdot \frac{|D|}{avgdl})}$$

其中:

  • $f(q_i, D)$:关键词 $q_i$ 在文档 $D$ 中出现的频率(TF)
  • $|D|$:文档 $D$ 的长度
  • $avgdl$:整个语料库中所有文档的平均长度
  • $k_1$ 和 $b$:可调参数(通常取 $k_1 \in [1.2, 2.0]$,$b = 0.75$)
  • $IDF(q_i)$:逆文档频率

2.2 三大核心部分

逆文档频率IDF

BM25 的 IDF 部分与传统 TF-IDF 略有不同,旨在惩罚在大量文档中都出现的“常用词”:

$$IDF(q_i) = ln \big( 1 + \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} \big)$$

其中$N$是总文档数,$n(q_i)$是包含关键词$q_i$的文档数。如果一个词在越多文档中出现,它的 IDF 值就越低,对得分的贡献越小

词频饱和度

这是 BM25 对 TF-IDF 的重大改进。在 TF-IDF 中,词频越高,得分线性增长;但在 BM25 中,随着词频增加,得分的增长会趋于平缓。

  • 逻辑:如果一个关键词在文章中出现了 100 次,它对相关性的贡献并不会比出现 20 次的文章高出 5 倍。
  • 参数 $k_1$:控制这种饱和的速度。$k_1$ 越小,词频对得分的影响越快达到上限。

文档长度归一化

长文章天然容易包含更多的关键词,这会导致它们在简单的 TF 计算中占便宜。BM25 通过引入文档长度比率来抵消这种偏见。

  • 逻辑:如果一个短文档和一个长文档包含相同次数的关键词,短文档通常更相关(信息密度更高)。
  • 参数 $b$:决定长度归一化的强度。
    • 如果 $b=1$,完全进行长度归一化。
    • 如果 $b=0$,不考虑长度(退化回不带长度补偿的模式)。

BM25算法原理
http://example.com/2026/03/24/BM25算法原理/
作者
Kon4tsu
发布于
2026年3月24日
许可协议