Skip to content

5.3.1 BM25 是什么? ​

先给结论:BM25 可以先理解成一种基于关键词匹配的相关性排序方法。它关心的是:查询里的词有没有出现在文档里、出现了多少次、这些词在整个语料里是不是稀有,以及文档长度会不会影响判断。

所以 BM25 的重点不在“理解语义”,而在“根据词项匹配情况给文档排序”。

为什么它属于“稀疏检索” ​

和向量检索不同,BM25 不会把一段文本编码成一个稠密向量。

它更像在看:

  • 查询里有哪些词
  • 文档里命中了哪些词
  • 这些词的重要性有多高

因此它常被归到:

  • 关键词检索
  • 稀疏检索

这类方法里。

“稀疏”这个说法,可以先粗略理解成:

  • 不是用一个稠密的连续向量去表示整体语义
  • 而是围绕词项、词频、稀有度这些信号来做匹配

BM25 到底在看什么 ​

如果只讲最实用的理解,BM25 大致会考虑三类信息:

1. 查询词有没有命中 ​

这是最基础的一层。

如果用户搜的是:

  • “退款规则”

那么没有命中这些词的文档,通常不会排得很靠前。

2. 词在文档里出现得多不多 ​

如果一个文档多次出现查询词,通常说明它和这个主题更相关。

但 BM25 也不会无限放大这个信号,因为出现 20 次不一定就比出现 5 次真的强那么多。

3. 词在整个语料里是不是稀有 ​

这也是 BM25 很有价值的一点。

如果一个词在所有文档里都特别常见,它区分文档的能力就弱。

如果一个词比较少见,却刚好在某篇文档里命中,那它往往更有区分度。

比如:

  • “系统”
  • “文档”

这类词可能太常见,区分能力弱。

而像:

  • 某个产品型号
  • 某个规则编号
  • 某个接口名

这类词的区分能力通常更强。

为什么它还会考虑文档长度 ​

因为长文档天然更容易“碰巧包含更多词”。

如果不做长度调整,长文档可能会因为字多、词多而被高估。

所以 BM25 会把文档长度也纳入考虑,避免长文档仅仅因为更长就总占优势。

你不需要先记住具体公式,但最好先记住这个判断:

  • BM25 不只是看命中了没有,还在平衡词频、稀有度和文档长度

一个更实用的理解方式 ​

你可以先把 BM25 理解成:

  • “关键词命中了哪些”
  • “这些关键词是不是重要”
  • “这篇文档是不是在这些关键词上更有代表性”

它解决的不是语义接近,而是:

  • 在关键词检索里,谁更该排前面

为什么它在今天仍然重要 ​

因为真实业务里,有大量问题本来就不该只靠“语义差不多”解决。

比如:

  • 规则编号
  • 产品型号
  • 精确术语
  • 接口名称
  • 字段名

这类问题里,BM25 往往比单纯向量检索更稳。

一个常见误区 ​

很多人会把 BM25 想成:

  • 只是简单的字符串匹配

这不够准确。

更稳的说法是:

  • 它是一种基于关键词统计特征的相关性排序方法

也就是说,它不是只看“有没有出现”,还会看:

  • 出现频率
  • 词项稀有度
  • 文档长度影响

一句话总结 ​

BM25 是一种基于关键词匹配的相关性排序方法。它不做稠密语义表示,而是根据词项命中、词频、稀有度和文档长度来判断哪些文档更该排在前面。在术语、编号和精确匹配场景里,它仍然非常重要。