跳到正文

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. 问法 1 · 场景切入

    假设你在做电商搜索,用户搜‘苹果手机壳’,BM25能精确匹配,但向量检索能召回‘iPhone保护套’。这两种方法你会怎么选?如果混合使用,融合策略怎么定?

  2. 问法 2 · 层层追问

    RAG系统里检索这块,你通常用什么方法?……那BM25和向量检索各有什么优缺点?……混合检索怎么把两者结果结合起来?具体在开放域问答和电商搜索里,你会怎么选?

  3. 问法 3 · 直球架构

    从原理上对比BM25、向量检索和混合检索,分别说清楚它们怎么工作的,在准确性、召回率、语义理解、计算开销上的差异,以及分别适合哪些应用场景。

同模块相关题目