
🚀 本文收录于Github:AI-From-Zero 项目 —— 一个从零开始系统学习 AI 的知识库。如果觉得有帮助,欢迎 ⭐ Star 支持!
by @Laizhuocheng
想象一下,你带着一个问题走进图书馆:“RAG 为什么经常要混合检索?”图书管理员很聪明,能理解你的意思,也能把答案讲得很顺。但如果书架没有索引、书名没有目录、资料也没有编号,他再聪明也只能在书堆里乱翻。
RAG 里的大模型也很像这位管理员。它擅长理解、归纳和表达,但它回答问题前,需要先从知识库里找到相关材料。这个“先找资料”的环节,就是检索系统在干活。
BM25 就是检索系统里一位很老练的“关键词检索员”。它不会像大模型那样理解复杂语义,却很擅长判断:哪些文档真的包含了用户关心的词,哪些词在当前问题里更关键,哪些文档只是凑巧沾边。
所以,BM25 在 RAG 里不是为了取代向量检索,而是为了补上一块很重要的能力:精准匹配关键词、术语、编号、人名、错误码和专有表达。
BM25 可以理解为一种经典的文本相关性排序算法。用户输入一个查询词,系统拿它和文档库里的每篇文档做对比,然后给每篇文档打一个分。分数越高,说明这篇文档越可能和问题相关。
它的核心思想并不神秘:一个词在某篇文档中出现得越合理,这篇文档越可能相关;但如果这个词在所有文档里都很常见,它的区分度就会下降。
这就像你在公司群里找“部署失败 403”。“失败”这个词可能到处都有,价值不高;“403”更少见,区分度更强;如果某篇文档同时出现“部署”“403”“权限”,它就更像你要找的答案。
词频有用,但不能无限加分:一个关键词在文档里出现多次,通常说明它更相关。但出现 3 次和出现 300 次不应该差出 100 倍,否则刷词文档会占便宜。BM25 会让词频收益逐渐变缓。
稀有词更有价值:像“模型”“系统”这类词很常见,区分能力有限;像“BM25”“embedding”“403”“LangChain”这类词更具体,往往更能定位内容。BM25 会给稀有词更高权重。
文档长度要被校准:长文档天然更容易包含更多词,如果不校准,长文档会更容易拿高分。BM25 会考虑文档长度,避免“长”本身变成优势。
BM25 的工作过程可以想成一次“带权关键词投票”。查询中的每个词都会对文档投票,但不同词的票数不一样;文档越能合理覆盖关键查询词,得分越高。
用户的问题会先被分词或切分成若干检索单元。例如“RAG 为什么要用 BM25”可以拆成“RAG”“为什么”“BM25”等词。真正实现时,还会考虑大小写、停用词、中文分词、同义词扩展等细节。
优点:处理过程清晰,速度快,容易调试。
缺点:它主要看字面匹配,对“语义相近但用词不同”的表达不敏感。
类比:像在书店里按书名和关键词查目录,查得快,但你得说出接近目录里的词。
BM25 会判断一个词在整个文档库里有多稀有。越稀有的词,越能帮助系统区分文档;越常见的词,越容易只是背景噪声。
例如在 AI 知识库里,“模型”可能出现很多次;“BM25”“倒排索引”“混合检索”更具体。查询里如果出现这些具体词,系统应该更重视它们。
每篇文档都会根据查询词逐项加分。某个查询词在文档里出现得越合理,这一项得分越高;文档过长时,分数会被适度校准,避免长文档靠“覆盖面广”抢走位置。
工作流程:
RAG 里常见做法不是只用 BM25,也不是只用向量检索,而是把两者组合起来。BM25 擅长字面命中,向量检索擅长语义相近,二者一起用,可以减少“语义理解到了,但关键术语漏了”的问题。
类比:BM25 像按书名、编号和关键词找书;向量检索像请一个懂主题的店员帮你推荐相似书。一个负责“找准词”,一个负责“懂意思”,配合起来更稳。

对比维度 | 优势 | 局限 |
|---|---|---|
关键词匹配 | 对专有名词、错误码、接口名、参数名很敏感 | 用户换一种说法时可能匹配不到 |
速度与成本 | 可基于倒排索引快速检索,资源成本低 | 复杂语义理解能力有限 |
可解释性 | 分数来源清楚,便于排查为什么命中某篇文档 | 排序质量依赖分词、停用词和字段设计 |
工程稳定性 | 成熟、易部署,适合大规模文档库 | 面对口语化问题时可能召回不足 |
RAG 配合度 | 适合作为混合检索的一路召回 | 通常需要和向量检索、重排序一起使用 |
BM25 的优势在于稳、快、可解释。当用户问的是具体实体、精确术语或日志片段时,它往往比纯语义检索更直接。
它的短板也很明确:它不真正理解语义。如果用户问“为什么回答引用了旧材料”,而文档里写的是“知识库召回版本过期”,BM25 可能因为关键词差异而漏掉相关材料。
BM25 在现代 RAG 系统里依然常见,不是因为它新,而是因为它解决的问题很基础:很多真实业务问题并不只是“语义相似”,还包含大量精确标识符。
企业知识库问答:制度文档、接口文档、排障手册里经常有术语、编号、版本号。BM25 能帮助系统快速找到包含关键字的原始材料。
代码和日志检索:函数名、类名、错误码、配置项往往必须精确命中。向量检索可能理解大意,但 BM25 更容易把具体片段捞出来。
客服和工单系统:用户描述里常带产品名、套餐名、订单状态。BM25 可以先召回强相关候选,再交给向量模型或重排序模型精筛。
工程上常见的方案是混合检索:一路用 BM25,一路用向量检索,然后把两边结果合并、去重、重排序。这样既保留关键词命中的精度,也获得语义召回的覆盖面。
更严谨的系统还会加入 reranker。它像第二轮面试官,对 BM25 和向量检索找来的候选文档重新打分,判断哪些内容更适合放进大模型上下文。
BM25 自身不会变成语义模型,但它会继续作为检索系统的基础部件存在。未来更常见的形态,是 BM25、向量检索、结构化过滤、重排序和权限控制一起组成完整链路。
对 RAG 来说,检索不是“找几段文本”这么简单,而是要在成本、速度、准确性、权限和可解释性之间做平衡。BM25 的价值就在于,它提供了一条便宜、透明、可靠的关键词召回通道。
一句话概括:BM25 是一种经典关键词检索排序算法,它根据词频、词的稀有度和文档长度,判断哪些文档更可能回答用户问题。
它和向量检索的关键差异是:BM25 更像“按词找资料”,向量检索更像“按意思找资料”。在 RAG 里,二者不是对手,而是互补关系。
可以把 BM25 记成 RAG 检索层里的“老派检索员”:不擅长猜隐含意思,但对明确的词、编号、术语和错误码非常可靠。
很多 RAG 问题看起来像生成问题,根源却在检索。如果检索阶段漏掉关键材料,大模型再会表达,也只能基于不完整上下文回答。
好的 RAG 系统并不是把所有希望都压在大模型上,而是把检索、排序、过滤和生成拆清楚。BM25 的意义就在这里:它提醒我们,智能系统里那些朴素、透明、可控的部件,常常是稳定交付的地基。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。