检索增强生成 (Retrieval-Augmented Generation, RAG) 已成为构建可靠 AI 应用的事实标准。通过将大型语言模型 (LLMs) 与外部知识库连接,我们可以使其回答有据可依,从而减少幻觉。

然而,标准的 RAG 流程存在一个显著的低效问题。当我们检索文档时,通常会抓取“前 k 个 (top-k) ”段落,并将它们全部塞进 LLM 的上下文窗口中。这种方法寄希望于模型能自己弄清楚哪些句子是重要的,哪些只是噪音。

这种策略导致了输入冗余 。 我们将不相关的内容喂给模型,这不仅增加了计算成本 (更多的 Token) ,而且反直觉的是,这反而增加了产生幻觉的风险,因为模型会被检索文本中的“干扰项”分散注意力。

如果我们能在中间放置一个智能过滤器呢?一个能阅读检索到的文档并传递回答用户问题所需确切证据的“证据提取器”?

在这篇文章中,我们将深入探讨 SEER (自我对齐证据提取) , 这是由哈尔滨工业大学和华为的研究人员提出的一个框架。SEER 引入了一种新颖的方法,无需昂贵的人工标注数据集即可训练证据提取器。它利用自我对齐过程来教导模型做到忠实、有用且简洁。

问题所在: 为什么简单的过滤会失败

理想情况下,LLM 应该接收到的支持性内容既要有助于回答查询,又要足够简洁以节省推理时间。

以前构建此类“过滤器”的尝试主要依赖于启发式 (基于规则的) 方法。例如,系统可能会将文档拆分成句子,并检查它们是否包含查询中的关键词。虽然简单,但这些方法存在三个主要缺陷:

  1. 泛化能力差: 手工设计的规则很难适应新的领域。
  2. 语义缺失: 随意将文本切成块通常会破坏上下文的含义。
  3. 长度分布偏斜: 基于规则的过滤通常会产生长度分布奇怪的训练数据,从而使模型产生偏差。

SEER 的作者提出了一个关键问题: 我们能否利用模型本身来弄清楚什么样的证据才是好证据?

为了验证这一直觉,他们比较了基于启发式的增强 (使用字符串包含规则) 与“基于模型的增强” (让模型挑选证据) 。

比较基于模型和基于启发式的增强在上下文相关性方面的差异。

图 2 所示,基于模型的方法 (Upper Model-based Aug) 的潜在上限显著高于启发式方法 (StrInc) 。这表明模型实际上比我们要硬编码的规则更“懂”什么是好证据;我们只需要解锁这种能力。

SEER 框架: 高层概览

SEER 代表 Self-Aligned Evidence Extraction for Retrieval-Augmented Generation (面向检索增强生成的自我对齐证据提取) 。其目标是训练一个小巧、高效的“提取器”模型 (\(\mathcal{E}\)) ,将其置于检索器和最终生成器之间。

提取器接收一个查询和一组检索到的段落,然后输出一段简洁的证据 \(e\)。随后,该证据被传递给生成器 (\(\mathcal{G}\)) 以产生最终答案。

带有证据提取器的 RAG 流程,其中支持性内容和干扰性内容分别标记为绿色和黄色。

图 1 所示,有效的证据必须满足三个不同的标准:

  1. 忠实度 (Faithfulness): 证据必须真实存在于源文本中 (无幻觉) 。
  2. 有用性 (Helpfulness): 证据必须包含回答问题所需的信息。
  3. 简洁性 (Conciseness): 证据应尽可能短,以节省成本并减少噪音。

图 1 展示了平衡这些标准是多么棘手。选项 1 很忠实但错过了完整答案。选项 2 很有用但由于冗余。选项 3 则是“恰到好处的区域”——完美地做到了忠实、有用且简洁。

三阶段流程

SEER 如何在没有人工标签的情况下训练模型找到这种“恰到好处”的证据?它使用了如 图 3 所示的三阶段流程。

SEER 的整体系统框架,主要由三个建模阶段组成。

  1. 证据提取 (采样) : 模型生成其自己的候选证据。
  2. 专家评估: “专家”模型在忠实度、有用性和简洁性方面对这些候选证据进行评分。
  3. 自我对齐: 模型利用这些分数更新其权重,学习偏好更好的证据。

让我们详细分解每个阶段。

第一阶段: 通过采样进行证据提取

第一步依赖于响应采样的概念。给定查询 \(q\) 和检索到的段落 \(P\),基础模型生成多个候选证据输出。

\[ e \sim \tilde { \mathcal { E } } ( \cdot | q \oplus P ) , \quad o \sim \mathcal { G } ( \cdot | q \oplus e ) , \]

由于 LLM 通常遵循幂律分布 (它们倾向于频繁输出相同的“头部”响应) ,SEER 删除了重复项以创建唯一的均匀候选集。这种多样性至关重要;它为对齐算法提供了各种排名的选项,从“糟糕的证据”到“完美的证据”。

第二阶段: 专家评估

一旦模型生成了一组候选证据,我们要如何知道哪些是好的呢?SEER 采用了三个自动化“专家”来对证据进行评分。这形成了一个名为 QuadQARE (查询、答案、检索段落、证据) 的四元组数据集。

1. 忠实度专家

该专家检查提取的证据 \(e\) 是否得到原始检索段落 \(P\) 的支持。它使用一个名为 ALIGNSCORE 的 NLI (自然语言推理) 模型。如果证据是捏造的或修改过多,该分数就会下降。

\[ s ^ { f } = \mathrm { A L I G N S C O R E } ( P , e ) , \]

2. 有用性专家

该专家衡量效用。它提出的问题是: 添加此证据是否会让正确答案出现的可能性变大? 它通过比较生成器在证据和没有证据两种情况下生成标准答案 \(a\) 的概率来计算。

\[ s ^ { h } = \mathrm { S i g } \left( \log \frac { \prod f ( a | q \oplus e ) } { \prod f ( a | q ) } \right) , \]

如果证据 \(e\) 提高了正确答案的概率,\(s^h\) 就会接近 1。如果它是无关的,分数就会很低。

3. 简洁性专家

为了防止模型只是复制整个段落 (这虽然忠实且有用,但在效率上很低) ,SEER 衡量了简洁性。它将提取的证据 \(e\) 与“全长答案” \(t\) (包含答案的最小陈述句) 进行比较。

\[ s ^ { c } = { \mathrm { S B E R T } } _ { \mathrm { c o s i n e } } ( t , e ) , \]

这里使用了语义相似度 (SBERT) 。证据越接近最小必要答案,得分越高。

“平滑 CoV 加权”技巧

现在我们有了三个分数: \(s^f, s^h, s^c\)。你可能会认为我们应该直接取平均值。然而,SEER 引入了一种基于变异系数 (CoV) 的巧妙加权机制。

其洞察在于,不同标准的学习难度各不相同。如果模型在忠实度方面已经非常出色 (分数方差低) ,我们就不应该浪费训练周期去进一步优化它。我们应该关注模型表现不一致 (方差高) 的标准。

首先,他们计算每种分数类型的 CoV (标准差除以均值) :

\[ c ^ { f } = \sigma ^ { f } / \mu ^ { f } , \]

然后,他们使用这些系数上的 Softmax 函数确定权重 (\(\alpha\)) :

\[ \alpha ^ { f } = \frac { \exp ( c ^ { f } / \tau ) } { \sum _ { * } \exp ( c ^ { * } / \tau ) } , \]

最后,总分 \(s\) 是加权和:

\[ s = \alpha ^ { f } s ^ { f } + \alpha ^ { h } s ^ { h } + \alpha ^ { c } s ^ { c } , \]

这确保了优化过程动态地聚焦于最需要改进的属性。

第三阶段: 自我对齐 (LPO)

我们现在拥有了一份候选证据列表以及每个证据的质量评分。通常在这里会使用标准的强化学习方法,如 PPO (近端策略优化) 或 DPO (直接偏好优化) 。

然而,作者认为这些还不够。PPO 不稳定且难以调优。DPO 是成对的 (A 与 B 相比) ,没有考虑到差异的幅度或整体列表排名。

SEER 引入了列表感知偏好优化 (Listwise-aware Preference Optimization, LPO) 。 它修改了 DPO 的损失函数,加入了一个基于排名位置的加权因子 \(\lambda_{w,l}\)。

损失函数如下所示:

\[ \begin{array} { r l } & { \mathcal { L } ( \pi _ { \theta } ; \pi _ { \mathrm { r e f } } , \lambda _ { w , l } ) _ { \mathrm { L P O } } = - \mathbb { E } _ { ( x , y _ { w } , y _ { l } ) \sim \mathcal { D } } } \\ & { \quad \left[ \lambda _ { w , l } \log \mathrm { S i g } \left( \beta \frac { \pi _ { \theta } \left( y _ { w } | x \right) } { \pi _ { \mathrm { r e f } } \left( y _ { w } | x \right) } - \beta \frac { \pi _ { \theta } \left( y _ { l } | x \right) } { \pi _ { \mathrm { r e f } } \left( y _ { l } | x \right) } \right) \right] , } \end{array} \]

关键的创新在于 \(\lambda_{w,l}\) 项。它根据平均倒数排名 (MRR) 的增益来缩放损失。本质上,如果模型将高排名候选者与低排名候选者交换,其受到的惩罚要比交换两个平庸候选者更重。

\[ \lambda _ { w , l } = s _ { w } \Delta \mathrm { M R R } _ { w , l } + s _ { l } \Delta \mathrm { M R R } _ { l , w } , \]

这种“列表感知”的方法允许 SEER 优化证据候选者的整个排名,推动模型向理想的“恰到好处”的证据靠拢。

实验结果

这个复杂的流程真的能带来更好的 RAG 性能吗?作者在三个基准测试上测试了 SEER: NaturalQuestions (NQ)、TriviaQA (TQA) 和 HotpotQA。

1. 准确性与成本

最令人印象深刻的结果是性能与 Token 使用量之间的权衡。

QA 性能比较表。

表 1 中,比较 CGE Full (输入完整的检索段落) 与 FGE SEER :

  • 性能: SEER 始终获得更高的精确匹配 (EM) 和 F1 分数。例如,在使用 Llama2 的 NQ 数据集上,SEER 达到了 0.4549 的 EM,而 Full 方法为 0.4382。
  • 成本: 看一下 “Tok” (平均 Token 数) 这一行。Full 方法使用了约 800 个 Token。SEER 使用了不到 100 个。
  • 效率: SEER 将证据长度减少了 9.25 倍 , 同时提高了准确性。对于基于 API 的 RAG 系统来说,这是巨大的成本节约。

2. 对齐方法的影响

作者验证了他们选择 LPO 而非 PPO 和 DPO 的合理性。

关于忠实度、有用性和简洁性的对齐性能条形图。

图 4 显示了详细情况。在几乎每一个指标 (忠实度、有用性、简洁性) 中,LPO (每组最右边的条形) 都优于 Base 模型、PPO 和标准 DPO。这证实了将列表级排名信号纳入偏好优化可以创建更鲁棒的提取器。

3. 对噪声的鲁棒性

现实世界的检索是混乱的。通常,检索器会返回 4 个糟糕的文档和 1 个好的文档。

模型性能与噪信比 (NSR) 的关系。

图 5 通过增加“噪信比”(NSR) 来测试模型的鲁棒性。

  • 蓝色条/线 (Aligned): SEER 模型。
  • 灰色条/线 (Base): 未对齐模型。

随着噪声的增加 (x 轴向右移动) ,两者的性能都会下降。然而,对齐后的模型 (SEER) 保持了显著更高的“银标准忠实度”分数,并且通常比基础模型遭受的性能下降幅度更小。这表明 SEER 有效地学会了忽略干扰内容。

结论与启示

SEER 代表了使 RAG 系统更高效、更可靠的重要一步。通过从启发式过滤器转向基于模型的自我对齐 , 我们可以创建出能够充当智能信息策展人的系统。

这项研究的关键要点是:

  1. 少即是多: 你不需要给 LLM 喂数千个 Token 的上下文。高质量、经过提取的证据通常比完整文档能产生更好的答案。
  2. 自我修正有效: LLM 具有识别好证据的潜在能力;它们只需要利用自己生成的数据进行对齐。
  3. 训练中排名很重要: 在微调这些模型时,将训练数据视为成对关系 (A 比 B 好) 是不错的,但通过 LPO 将它们视为排名列表 (A 最好,B 还可以,C 很差) 效果要好得多。

对于从事 RAG 开发的学生和从业者来说,SEER 凸显了流程中“中间层”的重要性。优化检索器和生成器是标准做法,但优化两者之间的接口——证据提取器——可能是获得性能提升最唾手可得的果实。