跳到正文

RAG检索质量差:Embedding与Rerank调优

大模型应用中 Embedding 与 Rerank 的调优策略

原题:当大模型应用中出现检索上下文不准确或质量不佳的情况时,您会采取哪些应对策略和技术方案?

向量检索 · 字节真题

30 秒回答

  1. 识别检索失败的具体环节(召回率低/精确率低/排序差)
  2. 提出至少3种具体技术方案
  3. 说明方案适用场景和 trade-off
  4. 体现工程落地经验

回答与解析

答案要点

  • 识别检索失败的具体环节(召回率低/精确率低/排序差)
  • 提出至少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. 问法 1 · 场景切入

    假设我们做一个电商客服助手,用户问“这个订单什么时候发货”,结果检索出来的上下文全是退款政策,完全对不上。你遇到这种情况会怎么排查和修复?

  2. 问法 2 · 层层追问

    RAG应用中检索上下文质量不行,你一般怎么处理?……比如是召回不够还是噪声太多?……那如果要兼顾效果和延迟,你会优先上哪些方案?

  3. 问法 3 · 直球架构

    当检索上下文不准确或质量差时,请给出你的应对策略和技术方案,包括问题诊断环节和至少三种具体方案,并说明各自的适用场景和trade-off。

同模块相关题目