技术分享
RAG入门-详解BM25
BM25
BM25(Best Matching 25)主要用来计算一个文档(Document)与用户查询语句(Query)之间的相关性得分。
它是目前全文搜索领域(如 Elasticsearch, Lucene, Solr)最主流的搜索算法,被认为是经典TF-IDF算法的改进版,常被用于搜索引擎、文档检索、RAG检索阶段的第一轮召回或稀疏检索基线。
关于TF-IDF算法详见上一篇:
BM25要解决什么问题
在搜索场景中,用户输入一个查询:machine learning retrieval
系统需要从大量文档中找出最相关的文档。一个朴素想法是:
查询词在文档中出现得越多,文档越相关。
例如,文档A中出现了10次retrieval,文档B中只出现了1次,那么A可能更相关。
但这个想法有三个问题:
第一,高频词不一定重要。例如“the”“is”“of”在英文中极常见,不能因为它们出现多就认为文档相关。
第二,词频的边际收益应该递减。一个查询词出现1次和2次差别很大,但出现100次和101次差别通常不大。
第三,长文档天然更容易匹配查询词。如果不做长度归一化,长文档会因为包含更多词而获得不公平优势。
BM25正是围绕这三个问题设计的。BM25的计算逻辑主要基于以下三个要素:
- TF (Term Frequency,词频): 一个词在文档中出现的次数越多,相关性通常越高。
- IDF (Inverse Document Frequency,逆文档频率): 如果一个词在所有文档中都很罕见(如“量子纠缠”),它比常见词(如“的”、“是”)更能代表文档的主题。罕见词的权重更高。
- 文档长度归一化 (Document Length Normalization): 长文章天然包含更多词汇。BM25会对长文档进行分值惩罚,对短文档进行补偿,以确保匹配的公平性。
其中TF和IDF都是TF-IDF的内容,新引入的这个文档长度归一化有效优化了TF-IDF在长短文本的权重问题。
BM25核心公式
参数含义:
- : 查询语句中的第个关键词。
- : 词在文档中出现的频率(TF)。
- : 当前文档的长度。
- : 语料库中所有文档的平均长度。
- : 可调参数(通常取1.2到2.0),控制词频饱和的速度。
- : 可调参数(通常取0.75),决定文档长度惩罚的力度。
- : 词的逆文档概率
由这个公式我们可以计算在给定查询对于文档D的相似指数。
BM25常用的IDF形式是:
其中是总文档数量,是包含查询词的文档数量。
可以预见,出现在越多文档中的词,越大,IDF越小,而log曲线让IDF的边际效益递减。
再看公式右边:
其中,就是TF-IDF中的TF。但不同的是BM25这里也做了个缩放:
其中BM25使用对文本长度进行归一化,避免长短文本问题。当文本长度大于平均长度时,会大于1从而增大分母,从而压低得分,反之亦然。
而对于整个公式而言,当上升时,分数确实会上升,但上升速度会越来越慢。参数控制这种上升速度,越大,词频增长的影响越明显,越小,词频越快进入饱和(增长变慢,最后接近天花板)。
通过控制参数和,我们能控制模型对于长文本和高频词的敏感程度,避免长文档占便宜,也避免词频线性增长问题。
BM25和TF-IDF的关系
BM25可以看作是TF-IDF的改进版本。
BM25 保留了 IDF 思想,但对 TF 做了更精细的建模:
| 维度 | TF-IDF | BM25 |
|---|---|---|
| 词频增长 | 通常线性或对数增长 | 明确建模饱和效应 |
| 文档长度 | 处理方式较简单 | 显式长度归一化 |
| 参数控制 | 较少 | 有、可调 |
| 实践表现 | 基础方法 | 通常更强、更稳定 |
因此,在很多传统搜索任务中,BM25往往比朴素TF-IDF表现更好。
优劣势
优势
- 无需训练。只需要统计语料库中的词频、文档频率和文档长度即可。
- 可解释性强。每个词对最终分数的贡献都可以拆解。
- 速度快。BM25可以很好地结合倒排索引实现高效检索。
- 鲁棒性强。在没有大量标注数据时,BM25往往是一个非常强的baseline。
- 适合作为RAG的第一阶段检索器。在很多RAG系统中,BM25常被用于lexical retrieval,然后再用dense retriever或reranker做进一步排序。
劣势
BM25还是集成了TF-IDF很多统计模型的劣势
- 它不能理解语义,不知道词之间的同义、上下位、语境关系。
- 它对分词、停用词、词干化、大小写归一化等预处理非常敏感。
- 它还是没有解决高维稀疏问题,如果语料库中有几十万甚至上百万个词,向量维度会非常高,而且大多数位置是0。
- 它不适合处理复杂语义查询。例如:
Which papers propose retrieval-augmented generation methods for open-domain question answering?这种查询中,相关性不只是词是否出现,还涉及语义理解。
BM25在RAG中的作用
在RAG系统中,BM25通常扮演稀疏检索器的角色。一个典型流程是:
用户查询
↓
BM25召回top-k文档
↓
向量检索召回top-k文档
↓
合并候选集
↓
reranker重排序
↓
LLM基于高分文档生成答案
BM25的优势在于它对关键词、实体名、术语、代码标识符、数字、专有名词非常敏感。
例如:
ERR_CONNECTION_RESET
BM25 formula k1 b parameter
paper title: Attention Is All You Need
这些查询中,词面匹配很关键,BM25往往比纯向量检索更稳定。向量检索擅长语义泛化,BM25擅长精确匹配。二者互补。
总结
BM25是一个经典但非常实用的检索排序函数。它基于三个核心思想:
- IDF:稀有词更重要。
- 词频饱和:词出现越多越相关,但收益递减。
- 长度归一化:长文档不能因为更长就天然占优。
它比朴素TF-IDF更稳健,也比神经检索方法更轻量、更可解释。在现代RAG和搜索系统中,BM25仍然是不可忽视的核心组件,尤其适合作为第一阶段召回器或与向量检索形成混合检索。