BM25 vs 向量检索 vs 混合检索怎么选?
RAG系统中三种检索方法原理对比,适用场景分析
原题:在检索增强生成(RAG)系统中,常用的检索方法包括BM25、向量检索和混合检索等。请详细说明这些方法的工作原理,比较它们在准确性、召回率、语义理解能力、计算开销等方面的优缺点,并结合实际应用场景(如开放域问答、电商搜索、推荐系统)分析各自的适用条件。
向量检索 · 小红书真题
回答与解析
三种检索方法的核心原理
BM25(稀疏检索)
- 基于词频(TF)和逆文档频率(IDF)计算相关性得分
- 公式核心:
score = Σ IDF(q_i) * (f(q_i)*(k1+1)) / (f(q_i)+k1*(1-b+b*dl/avgdl)) - 本质是精确关键词匹配,对高频词有惩罚,对文档长度做归一化
向量检索(稠密检索)
- 用BERT等编码器将查询和文档映射到同一语义空间
- 通过余弦相似度或点积计算语义相关性
- 能捕捉同义词、上下位词等语义关系,如"苹果手机"≈"iPhone"
混合检索
- 并行执行BM25和向量检索,结果融合(常用RRF倒数排序融合或加权求和)
- RRF公式:
score = Σ 1/(k + rank_i),k通常取60,对排名敏感而非绝对分数
关键维度对比
| 维度 | BM25 | 向量检索 | 混合检索 |
|---|---|---|---|
| 准确性 | 关键词匹配准,语义漂移大 | 语义理解强,可能引入噪声 | 兼顾两者,上限最高 |
| 召回率 | 低(同义词漏召) | 高(语义扩展) | 最高 |
| 计算开销 | 极低(倒排索引,毫秒级) | 高(向量计算+ANN近似) | 最高 |
| 数据依赖 | 零,即插即用 | 需领域适配的embedding模型 | 需调优融合权重 |
场景适配分析
开放域问答(如通用知识库)
- 首选混合检索:用户问题表述多变,需语义理解;但专有名词(人名、日期)需BM25保证精确
- 例:问"GPT-4啥时候发布的",向量检索可能召回"GPT-3发布",BM25锁定"GPT-4"
电商搜索(小红书/淘宝)
- 核心混合检索,但策略不同:
- 商品标题、SKU属性用BM25保证品牌、型号精确匹配
- 笔记/UGC内容用向量检索理解场景化表达(如"显白口红"→橘调色系)
- 权重动态调整:搜索词含品牌词时提高BM25权重,长尾词时提高向量权重
推荐系统(内容召回)
- 以向量检索为主:用户兴趣是隐式语义,非明确关键词
- BM25仅作冷启动或热门兜底
小红书场景的特殊考量
笔记搜索是典型的半结构化文本+强语义需求场景:
- 标题/标签用BM25精确匹配运营关键词
- 正文内容用向量检索理解"氛围感穿搭""早八妆"等社区黑话
- 实际落地需解决:图文多模态统一检索、实时笔记的增量索引更新
学习建议
建议先掌握每种检索方法的基本原理,再通过对比表格梳理优缺点,结合真实场景理解适用性,推荐动手实现简易版BM25和向量检索加深理解。
口语版讲法(约4分钟)
- 一句定位:RAG检索本质是召回与精度的取舍
- BM25:精确关键词匹配,适合专有名词场景
- 向量检索:语义扩展强,但依赖embedding质量
- 混合检索:实际落地标配,RRF融合有坑
- 场景举例:电商搜索中品牌词与长尾词的动态权重
这道题其实是在问RAG系统里召回与精度的取舍。说白了,没有一种检索方法能通吃所有场景,真正落地的做法往往是混合的。我先说BM25,它本质是精确关键词匹配,靠词频和逆文档频率打分。它的好处是零数据依赖,即插即用,计算开销极低,倒排索引毫秒级响应。但缺点也很明显,同义词、上下位词它完全抓不到。比如用户搜‘苹果手机’,BM25只能匹配到字面‘苹果’和‘手机’,如果文档里写的是‘iPhone’,它就漏了。所以BM25适合品牌名、型号、订单号这种精确检索场景。
再说向量检索,它用Embedding模型把查询和文档都映射到语义空间,算余弦相似度。它能理解‘苹果手机’约等于‘iPhone’,召回率很高。但这里有个坑:向量检索的质量完全取决于embedding模型有没有在目标领域上微调过。如果直接用通用模型去搜医疗或法律文档,召回的全是语义相似但实际无关的内容,噪声很大。而且向量计算加ANN近似,延迟和资源开销都比BM25高一个量级。
所以实际落地,混合检索是标配。常见做法是BM25和向量检索并行跑,然后用RRF,也就是倒数排序融合来合并结果。RRF公式是score等于1除以k加排名,k通常取60。它只看排名不看绝对分数,所以鲁棒性不错。但这里有个容易翻车的点:如果两个通道的召回量级差异很大,比如向量通道召回500条但BM25只召回10条,直接RRF可能把BM25的高质量结果埋没掉。我上线前会做一遍小流量A/B测试,分别调k值和召回截断数,确保融合后的Recall@K和延迟都达标。
举一个电商搜索的例子。你在淘宝搜‘显白口红’,用户意图是场景化的,向量检索能理解‘显白’对应橘调或蓝调色系。但商品标题里‘口红’、品牌名‘MAC’这些精确词,必须靠BM25锁定。所以实际策略是:搜索词含品牌或型号时,动态提高BM25权重;长尾场景词时,提高向量权重。这个权重不是拍脑袋定的,而是用历史点击日志训练一个轻量分类器,实时判断当前query的类型。
另外还有一个值得深挖的点:混合检索的融合时机。是先检索再融合,还是先融合索引再做单一检索?后者就是ColBERT那种late interaction的思路,能减少工程复杂度,但对索引结构的改动比较大。
所以我的总体判断是:BM25是保底,向量检索是增量,混合检索是工程落地的最优解。但前提是embedding模型要领域适配,融合参数要按场景调过。如果资源有限,我会优先把预算花在embedding模型的微调和检索链路的监控上,而不是盲目上多路召回。
关键一句:混合检索的融合时机:先检索后融合 vs. 先融合索引再检索,后者如ColBERT的late interaction思路。
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做电商搜索,用户搜‘苹果手机壳’,BM25能精确匹配,但向量检索能召回‘iPhone保护套’。这两种方法你会怎么选?如果混合使用,融合策略怎么定?
- 问法 2 · 层层追问
RAG系统里检索这块,你通常用什么方法?……那BM25和向量检索各有什么优缺点?……混合检索怎么把两者结果结合起来?具体在开放域问答和电商搜索里,你会怎么选?
- 问法 3 · 直球架构
从原理上对比BM25、向量检索和混合检索,分别说清楚它们怎么工作的,在准确性、召回率、语义理解、计算开销上的差异,以及分别适合哪些应用场景。