跳到正文

RAG 检索噪声 3 大策略

从数据构建、检索优化到后处理的策略

原题:当RAG系统出现检索上下文不准确或噪声干扰时,有哪些有效的解决策略?请从数据构建、检索优化和后处理等角度阐述,并说明常用的训练和评估数据集。

模型微调 · 字节真题

30 秒回答

  1. 数据构建:文档切分策略、元数据标注、负样本构造
  2. 检索优化:混合检索、查询改写、Embedding微调
  3. 后处理:重排序模型、上下文压缩、置信度过滤
  4. 评估数据集:MS MARCO、Natural Questions、HotpotQA、自建业务数据集

回答与解析

答案要点

  • 数据构建:文档切分策略、元数据标注、负样本构造
  • 检索优化:混合检索、查询改写、Embedding微调
  • 后处理:重排序模型、上下文压缩、置信度过滤
  • 评估数据集:MS MARCO、Natural Questions、HotpotQA、自建业务数据集

数据构建层面

文档切分优化

  • 按语义边界切分(标题、段落),避免硬截断;重叠窗口保留上下文连贯性
  • 构建多级索引:摘要级 + 细节级,先粗筛再精确定位

数据质量提升

  • 清洗低质量文档,添加领域-specific的元数据标签(时间、来源、类别)
  • 构造难负样本:训练时加入语义相近但答案错误的段落,增强判别能力

检索优化层面

查询侧改进

  • 查询改写(Query Rewriting):用LLM扩展同义词、澄清指代消解
  • HyDE(假设文档嵌入):生成伪答案后再检索,弥合查询-文档语义鸿沟

检索策略

  • 混合检索:BM25关键词 + Dense向量双路召回,取长补短
  • Embedding微调:用领域数据对比学习,让向量空间更适配业务

后处理层面

重排序(Rerank)

  • 交叉编码器(Cross-Encoder)精排,计算查询-文档交互注意力
  • 多任务学习:同时预测相关性和答案抽取位置

上下文压缩

  • 置信度过滤:设定相似度阈值,低分文档直接丢弃
  • 摘要提取:用SLM压缩长文档,保留关键信息

常用数据集

数据集 特点
MS MARCO 大规模真实搜索日志,标准Benchmark
Natural Questions 长答案、需要多跳推理
HotpotQA 多文档联合推理,考察噪声过滤能力
FiQA/SciFact 金融/科学领域,垂直场景评估

实践建议:业务落地必建自有评测集,覆盖真实Bad Case分布。

口语版讲法(约4分钟)

  • 一句话定位:RAG检索不准的本质是信息源和匹配逻辑不匹配
  • 数据构建:语义切分和负样本构造
  • 检索优化:混合检索和查询改写
  • 后处理:重排序和置信度过滤
  • 评估与落地:标准数据集+自建业务集

这道题问的是RAG检索不准怎么办,在我看来,本质是两件事没对齐:一是信息源怎么拆和怎么标,二是匹配逻辑怎么调。拆得不对,后面怎么改都难。我从数据构建、检索优化和后处理三个角度讲一下我的做法。

先说数据构建。文档切分很多人直接按固定字数截断,但这对语义是破坏性的。我一般会按语义边界来切,比如标题、段落,还会加一个重叠窗口,保证上下文连贯。举个例子,处理客服退款政策文档时,我会把“退款条件”和“退款流程”作为两个独立块,但每块末尾带上下一块的标题,这样检索时不会漏掉跨块信息。另外,我会给每个块打上元数据标签,比如时间、来源、类别,这样检索时可以按这些字段做预过滤。还有一个很重要的点,就是构造难负样本。训练Embedding模型时,我会加入语义相近但答案错误的段落,让模型学会区分“看着像但不对”的情况,这对提升判别能力非常关键。

再说检索优化。这里有个常见的误区,就是只依赖向量检索。实际上,向量检索在语义匹配上强,但在精确关键词匹配上弱,比如订单号、政策条款编号。所以我会用混合检索,把BM25关键词和向量双路召回结合起来,再合并排序。查询改写也很实用,比如用大模型把用户的问题做同义词扩展或指代消解,把“它”换成具体的商品名。还有一个技巧是HyDE,就是先生成一个伪答案,再用这个伪答案去检索,能有效弥合查询和文档之间的语义鸿沟。当然,这些方法的前提是你的Embedding模型在领域数据上做过微调,否则效果会打折扣。

后处理是最后的把关。我会加一个重排序层,用Cross-Encoder对召回的结果做精排,因为它能计算查询和文档的交互注意力,比Bi-Encoder更准。同时,我会做置信度过滤,设定一个相似度阈值,低于阈值的直接丢弃,避免低质量片段进入生成器。还有一个做法是上下文压缩,用一个小模型把长文档摘要成关键信息,减少噪声。这里有个坑:重排序模型本身有计算开销,如果召回量太大,延迟会飙升,所以我会把召回数控制在20以内,再精排取前3。

说到评估,我除了用MS MARCO、Natural Questions这些开源数据集,一定会构建自己的业务评测集,覆盖真实场景的bad case。比如在金融风控场景,我会专门构造一些“相似但不相关”的案例来测试模型的抗噪声能力。

最后,我更倾向把整个流程看成一套组合拳,而不是单一技术。数据构建是地基,检索优化是骨架,后处理是精装修。如果只能选一个,我会优先把数据切分和难负样本做好,因为这是最根本的。

关键一句:评估时除了开源数据集,一定要构建自己的业务评测集,覆盖真实bad case。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做电商客服的RAG系统,用户问“我的订单到哪了”,系统检索到一段物流信息但其实是另一个订单的。你会从哪些环节去优化,避免这种噪声干扰?

  2. 问法 2 · 层层追问

    RAG系统里检索出来的上下文不准确或者有噪声,你一般怎么处理?……那如果从数据构建角度呢?……还有检索环节或者拿到结果之后,有没有什么补救措施?

  3. 问法 3 · 直球架构

    当RAG系统检索出现上下文不准确或噪声干扰时,有哪些解决策略?请从数据构建、检索优化和后处理三个方面展开,并说说常用哪些训练和评估数据集。

同模块相关题目