RAG检索质量差:Embedding与Rerank调优
大模型应用中 Embedding 与 Rerank 的调优策略
原题:当大模型应用中出现检索上下文不准确或质量不佳的情况时,您会采取哪些应对策略和技术方案?
向量检索 · 字节真题
30 秒回答
- 识别检索失败的具体环节(召回率低/精确率低/排序差)
- 提出至少3种具体技术方案
- 说明方案适用场景和 trade-off
- 体现工程落地经验
回答与解析
答案要点
- 识别检索失败的具体环节(召回率低/精确率低/排序差)
- 提出至少3种具体技术方案
- 说明方案适用场景和 trade-off
- 体现工程落地经验
问题诊断:先定位失效环节
- 召回问题:相关文档没进候选池 → 需优化向量表示或扩大检索范围
- 精确问题:噪声文档混入 → 需过滤或重排序
- 排序问题:相关文档得分低 → 需重排序模型或特征工程
核心应对策略
1. 查询侧优化(Query Rewriting)
- 意图澄清:用LLM扩展同义词、补全省略的主语
- 伪文档生成:HyDE 用模型生成假设答案再检索
- 查询分解:复杂问题拆成子查询分别检索
2. 检索侧增强
- 混合检索:向量+关键词 BM25 融合,互补长尾和精确匹配
- 多路召回:不同 embedding 模型、不同切分粒度并行召回
- 粗排→精排:先用轻量模型快速筛选,再用 Cross-Encoder 精排
3. 文档侧处理
- 动态上下文压缩:用 LLM 提取关键片段,去除冗余
- 元信息过滤:按时间、来源等标签预过滤
- 索引优化:调整 chunk 大小和重叠策略,关键信息不截断
4. 重排序与过滤
- Cross-Encoder 精排:比双塔模型准,但计算重
- 置信度过滤:设置相似度阈值,低置信触发兜底或拒答
工程权衡
| 方案 | 延迟 | 效果增益 | 适用场景 |
|---|---|---|---|
| 查询改写 | +50-100ms | 中等 | 用户 query 口语化严重 |
| Cross-Encoder 重排 | +100-300ms | 显著 | 对精度要求高,可接受延迟 |
| 混合检索 | +20ms | 中等 | 通用场景 baseline |
实际落地建议:先上混合检索+轻量重排,再按需叠加复杂模块,同时建立 bad case 回流机制持续迭代。
口语版讲法(约4分钟)
- 定位失效环节
- 查询侧优化:改写与分解
- 检索侧增强:混合检索与重排
- 文档侧与工程权衡
- 兜底与持续迭代
这道题其实是在问,当RAG的检索环节掉链子时,怎么系统性地定位和修复。我一般先定位失效环节,是召回不够、精度太差,还是排序没排好。比如召回问题,相关文档根本没进候选池,那可能是向量表示不够好或检索范围太小;精度问题就是噪声文档混进来了,需要过滤或重排;排序问题则是相关文档得分低,得改进重排模型或特征。
具体到方案,我重点讲几个点。先说查询侧优化。用户query经常口语化、缺主语,我会用LLM做意图澄清,扩展同义词、补全主体。还有一个好用的技巧是HyDE,先用模型生成一个假设答案,拿它去检索,效果往往比用原始query好。复杂问题我会拆成子查询分别检索再合并,这样能提高召回。
再一个是检索侧增强。最基础也最有效的方案是混合检索,把向量检索和BM25关键词检索结合起来。向量擅长语义匹配,BM25强在精确匹配,比如订单号、错误码这些,向量可能跑偏,但BM25能精准命中。实际落地时,我会先用混合检索做粗筛,再上轻量重排比如Cross-Encoder精排,把最相关的几篇顶到前面。这里有个坑,Cross-Encoder效果虽好,但延迟高,所以一般只对粗筛后的top 50或top 100重排,不能全量做。
文档侧也有一些技巧。比如动态上下文压缩,用LLM从长文档里提取关键片段,去掉冗余,这样既能提升精度又能减少Hallucination。还有元信息过滤,比如按时间、来源标签预过滤,对时效性强的场景很管用。
工程权衡上,我会根据场景取舍。举个例子,客服退款场景,用户query口语化严重,查询改写收益明显;但如果是企业合规文档检索,对精度要求高且能接受几百毫秒延迟,那Cross-Encoder重排值得上。通用场景我倾向先上混合检索加轻量重排,再按需叠加。前提是得有bad case回流机制,持续收集线上失败的query,定期分析并迭代模型或规则。
说到迭代,其实这里还有一个延伸点:当检索质量一直上不去时,我会考虑是不是chunk策略出了问题。比如固定切分容易把关键信息切散,导致召回失败,这时候可能要改用语义切分或parent document策略,让子chunk和父文档关联。
所以整体上,我更倾向把检索优化看成一个持续迭代的过程,先定位瓶颈,选最轻量的方案上线,再用bad case驱动改进,而不是一上来就堆复杂模块。
关键一句:当检索质量持续不佳时,chunk策略可能是瓶颈,需考虑语义切分或parent document策略。
面试官还可能这样问
- 问法 1 · 场景切入
假设我们做一个电商客服助手,用户问“这个订单什么时候发货”,结果检索出来的上下文全是退款政策,完全对不上。你遇到这种情况会怎么排查和修复?
- 问法 2 · 层层追问
RAG应用中检索上下文质量不行,你一般怎么处理?……比如是召回不够还是噪声太多?……那如果要兼顾效果和延迟,你会优先上哪些方案?
- 问法 3 · 直球架构
当检索上下文不准确或质量差时,请给出你的应对策略和技术方案,包括问题诊断环节和至少三种具体方案,并说明各自的适用场景和trade-off。