Appearance
5.3.1 BM25 是什么?
先给结论:BM25 可以先理解成一种基于关键词匹配的相关性排序方法。它关心的是:查询里的词有没有出现在文档里、出现了多少次、这些词在整个语料里是不是稀有,以及文档长度会不会影响判断。
所以 BM25 的重点不在“理解语义”,而在“根据词项匹配情况给文档排序”。
为什么它属于“稀疏检索”
和向量检索不同,BM25 不会把一段文本编码成一个稠密向量。
它更像在看:
- 查询里有哪些词
- 文档里命中了哪些词
- 这些词的重要性有多高
因此它常被归到:
- 关键词检索
- 稀疏检索
这类方法里。
“稀疏”这个说法,可以先粗略理解成:
- 不是用一个稠密的连续向量去表示整体语义
- 而是围绕词项、词频、稀有度这些信号来做匹配
BM25 到底在看什么
如果只讲最实用的理解,BM25 大致会考虑三类信息:
1. 查询词有没有命中
这是最基础的一层。
如果用户搜的是:
- “退款规则”
那么没有命中这些词的文档,通常不会排得很靠前。
2. 词在文档里出现得多不多
如果一个文档多次出现查询词,通常说明它和这个主题更相关。
但 BM25 也不会无限放大这个信号,因为出现 20 次不一定就比出现 5 次真的强那么多。
3. 词在整个语料里是不是稀有
这也是 BM25 很有价值的一点。
如果一个词在所有文档里都特别常见,它区分文档的能力就弱。
如果一个词比较少见,却刚好在某篇文档里命中,那它往往更有区分度。
比如:
- “系统”
- “文档”
这类词可能太常见,区分能力弱。
而像:
- 某个产品型号
- 某个规则编号
- 某个接口名
这类词的区分能力通常更强。
为什么它还会考虑文档长度
因为长文档天然更容易“碰巧包含更多词”。
如果不做长度调整,长文档可能会因为字多、词多而被高估。
所以 BM25 会把文档长度也纳入考虑,避免长文档仅仅因为更长就总占优势。
你不需要先记住具体公式,但最好先记住这个判断:
- BM25 不只是看命中了没有,还在平衡词频、稀有度和文档长度
一个更实用的理解方式
你可以先把 BM25 理解成:
- “关键词命中了哪些”
- “这些关键词是不是重要”
- “这篇文档是不是在这些关键词上更有代表性”
它解决的不是语义接近,而是:
- 在关键词检索里,谁更该排前面
为什么它在今天仍然重要
因为真实业务里,有大量问题本来就不该只靠“语义差不多”解决。
比如:
- 规则编号
- 产品型号
- 精确术语
- 接口名称
- 字段名
这类问题里,BM25 往往比单纯向量检索更稳。
一个常见误区
很多人会把 BM25 想成:
- 只是简单的字符串匹配
这不够准确。
更稳的说法是:
- 它是一种基于关键词统计特征的相关性排序方法
也就是说,它不是只看“有没有出现”,还会看:
- 出现频率
- 词项稀有度
- 文档长度影响
一句话总结
BM25 是一种基于关键词匹配的相关性排序方法。它不做稠密语义表示,而是根据词项命中、词频、稀有度和文档长度来判断哪些文档更该排在前面。在术语、编号和精确匹配场景里,它仍然非常重要。