今天研读 《Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection》
开源实现:Self-RAG
1. 为什么要引入 Self-RAG ?以前的研究有什么不足?
单纯的 LLM 由于仅仅依赖其参数化记忆,因此在回答上仍可能发生事实性错误。传统 RAG 虽然在知识密集型任务上减少了事实性错误的发生,但是存在两个缺陷:
无差别检索导致有害生成
问题:传统 RAG 不管“事实依据是否有用”,都会无差别地去检索段落。
后果:这可能会损害 LLM 的通用性,或者引入不必要/偏离主题的段落,进而导致生成低质量的文本。
生成内容与检索内容不一致
问题:传统模型没有被显式地训练去利用和遵循检索到的段落中的事实
后果:即使检索到了相关的段落,模型最终输出的内容也无法保证与这些检索段落保持一致。
为了解决这两个缺陷,作者提出了自我反思的检索增强生成方法(Self-Reflective Retrieval-Augmented Generation, Self-RAG),这个方法的目标是通过按需检索和自我反思,提高 LLM 的生成质量(包括事实准确性),且不损害模型的通用性。
Self-RAG 以端到端的方式训练一个任意的语言模型(Language Model, LM),使其能在生成任务输出的同时,间歇性地生成特殊的反思标记。其中,反思标记分为两大类:
检索标记 (Retrieval Tokens):用来指示是否需要进行检索。
批评标记 (Critique Tokens):用来评价检索质量及自身生成的质量。
具体而言,当用户提出一个问询,Self-RAG 会进行以下工作步骤:
给定输入提示(Prompt)和已生成的前文:
步骤 1:按需判断与检索
模型首先判断继续生成的内容是否需要通过检索段落来进行增强。
如果需要,输出一个检索标记,按需调用检索器(Retriever)。
步骤 2:并行处理与相关性评估
SELF-RAG 并行处理多个检索到的段落。
评估这些段落的相关性(Relevance),并基于它们分别生成对应的任务输出片段。
步骤 3:自我批评与最佳选择
生成批评标记(Critique tokens),对自身生成的输出进行自我评估。
根据事实性和整体质量选择出最佳的生成结果。
可以通过下图来直观体会传统 RAG 与 Self-RAG 的不同:

前文提到,Self-RAG 会通过端到端的方式来训练一个任意的语言模型。下面来具体介绍一下训推流程:
训练机制:统一词表与 Critic 离线标注
统一词表:
SELF-RAG 将反思标记扩展到模型的词表中,训练生成模型时,将生成反思标记与普通文本统一为 Next Token 预测任务。
训练集包含交织着反思标记、检索段落和普通文本的丰富语料。
离线 Critic 模型:
借鉴思想:反思标记的灵感来自强化学习中的奖励模型。
离线插值:反思标记由一个专门训练好的 Critic 模型在离线阶段插入到原始语料库中。因此在训练 Generator 时不需要同时运行 Critic 模型,大大降低了开销。
Critic 模型的监督来源:Critic 模型的一部分监督数据是通过 Prompting 闭源商业大模型(GPT-4)收集的,数据包含“输入、输出以及对应的反思标记”。
推理与可定制解码算法:
在模型训练好之后,推理阶段不需要改变模型参数,仅通过控制反思标记的生成概率或规则,就能动态改变模型的行为。
推理时算法: 由于模型在每个片段开始前都会预测反思标记,因此检索的频率可以通过 “反思标记” 出现的频次来动态决定,这就是 “可定制的解码算法” :
灵活调整检索频率:可以针对不同的下游应用需求调整检索频次。(比如开放式创作可以减少检索频次,医疗或法律问答等严谨业务场景可以增加检索频次)
基于片段的束搜索:利用反思标记概率的加权线性和作为片段得分,基于片段的得分展开束搜索。用户可以根据偏好定制模型行为。(这个会在后面详细展开)
下面是 Self-RAG 的实验表现:
总体效果: 在包含推理和长文本生成的 6 个任务上,SELF-RAG 显著优于参数量更大的预训练/指令微调 LLM 以及广泛采用的传统 RAG 方法,且拥有更高的引用准确率。
具体基线对比:
在 4 个任务上超越了检索增强版的 ChatGPT;
在所有 6 个任务上超越了 Llama2-chat 和 Alpaca。
结论: 实验分析证明了带反思标记的训练与推理在提升总体性能以及测试期模型定制(例如平衡引用精确度与完整度之间的权衡)方面的有效性。
2. Self-RAG 建模
提示:本文实验中的“一个片段”指一个句子。但事实上 “一个片段” 的大小可以自行定义。
Self-RAG 系统的核心思路是,通过端到端的训练,使一个语言模型 M 学会生成特殊的反思标记 ,并通过反思标记来标识:
当前生成的片段是否有检索知识库的必要
当前生成的片段在相关性、支撑性、完整性等指标上的表现
2.1 问题描述
形式化地,对于给定的输入 x ,我们训练 M 来序列化地生成文本输出 y = [y1, y2, ..., yT] ,其中 yt 表示组成第 t 个输出片段的 Token 序列。yt 中的 Token 包含正常的文本表示 Token 以及上面提到的 “反思标记” 。反思标记的相关信息在下表列出:

于是可以得到 Self-RAG 的推理阶段算法:

用自然语言来描述这段算法,就是:
给定输入 x 和已生成的前文 y<t ,模型预测 Retrieve 标记,算法分两条路径走:
路径 A:无需检索 (Retrieve == No)
Generate:模型像普通 LM 一样直接预测下一个文本片段 yt 。
Critique:模型预测 ISUSE(评估该片段 yt 对于回答问询 x 的整体有用度)。
路径 B:需要检索 (Retrieve == Yes)
Retrieve:调用检索器 R ,根据 (x, yt-1) 检索出候选文档集合 D 。
Generate(并行):针对 D 中的每一个文档 d :
模型预测 ISREL(评估文档 d 是否与问询 x 相关);
基于 x, d, y<t 生成对应的候选文本片段 yt 。
Critique:针对每个生成的候选片段 yt 和对应的文档 d ,模型预测:
ISSUP(评估事实支持度)
ISUSE(评估整体有用度)。
Rank & Select:根据预测出的 ISREL、ISSUP 和 ISUSE 标记概率,对所有候选片段 yt 进行综合打分与排序,选出最优的 yt 。
这里留两个思考点:
候选文档 D 是由 (x, yt-1) 检索出的。如果单纯由 x 检索出,或者是由(x, y<t)检索出,会在工程上产生怎样的质量-效率变化?
不难发现,作者在这里做了单文档支撑假设。因为该算法中每个候选文本片段 yt 只有一篇支撑文档 d 。但是就像我们在 HippoRAG 学习贴 中讨论过的,对于多跳问答场景,回答片段可能需要多篇支撑文档共同组成支撑推理链。如果考虑这一点,我们可以做怎样的扩展优化?
2.2 Self-RAG 的训练流程
训练阶段的核心思想就是:将原始词表与所有的反思标记合并,形成扩展词表。在整个端到端训练流程中,采用标准的 Next Token Prediction 训练目标。
训练采取三步骤方法:
步骤一:训练一个专门的 Critic 模型 C ,使其学会预测各类反思标记,用于评估检索出的段落以及生成的任务输出质量。
步骤二:利用训练好的 Critic 模型 C 和检索器 R ,对原始任务数据集进行处理。
将检索到的段落以及 Critic 预测出的反思标记离线插入到任务输出中,构建出一份“文本与反思标记交织”的训练语料库。
步骤三:在这份插入了反思标记的语料库上,使用标准的语言模型的交叉熵损失来训练生成器 M 。
最终效果:训练完成后,生成器 M 自己就能直接生成反思标记,在推理阶段可以彻底脱离 Critic 模型。
2.2.1 Critic 模型的训练流程
Critic 模型的训练数据收集:
由于为每个文本片段人工标注反思标记非常昂贵且低效,因此作者采用更加便宜且高效的方案:用当时 SOTA 的 LLM(GPT-4)来生成训练数据。对于 Table 1 中定义的每一组反思标记(Retrieve, ISREL, ISSUP, ISUSE):
实例采样:从原始训练集(X, Y)中随机采样样本组(Xsample, Ysample)。
定制指令:由于不同反思标记的定义和输入格式不同(参见 Table 1),作者为每类标记设计了不同的 Prompt 指令。
示例 (Retrieve):给 GPT-4 喂入特定指令(例如:“给定一条指令,判断从网络查找外部文档是否有助于生成更好的回答”),附带少量示例 I ,以及原始任务输入 x 和输出 y ,让 GPT-4 预测适当的反思标记:p(r | I, x, y) 。
人类评估验证:人工评估显示,GPT-4 预测出的反思标记与人类评估结果表现出高度一致性。
数据规模:为每种反思标记类型收集 4k ~ 20k 条监督训练数据,最后整合为 Critic 模型 C 的总训练集。
这里事实上引出了一个问题:既然外部 LLM 本身就支持分析输入文本并添加“反思标记”,为什么不直接让外部 LLM 处理原始任务数据集并用于训练生成器 M ,反而要 “多此一举” 地引入中间的 Critic 模型 C ?
这是因为直接调用外部闭源 LLM 的 API 会增加 API 调用成本,且会损害研究的可复现性。为了解决这个问题,作者采用了蒸馏的思路。通过 Prompting GPT-4 生成反思标记,构建监督训练集,以此方式将知识蒸馏到一个内部的 Critic 模型 C 中。通过内部已经存在的 C ,后续工作就不再需要外部 API 调用成本,而且其他研究者也能很好地复现这篇研究的实验结果。
Critic 模型的学习:
训练目标:当我们收集到数据集 Dcritic 之后,将 Critic 模型 C 初始化为一个预训练语言模型(就是用一个预训练语言模型作为基座的意思),并使用标准的条件语言模型目标(极大似然估计)进行微调:

这个训练目标的含义是,在给定输入 x 和输出 y 的条件下,最大化生成对应反思标记 r 的对数概率。
虽然理论上任何预训练语言模型都可以作为初始模型,但在实验中,作者将 Critic 模型 C 初始化为与后续 Generator 模型相同的基座——即 Llama 2-7B 。
训练后的 Critic 模型在绝大多数反思标记类别上,与 GPT-4 预测结果的一致性超过了 90% 。这证明了小参数量模型(7B)成功容纳了 GPT-4 对生成质量、相关性及事实支持度的评判与反思能力。
2.2.2 生成器的训练
生成器的训练数据收集:
这一阶段的目标是:构建出文本与反思标记、检索段落交织的数据集 Dgen ,以便让 Generator 在训练阶段精确模拟 Self-RAG 在推理阶段的流程。
逐片段标注数据流程:
对于给定的原始训练样本 (x, y),拆分为片段 y = [y1, y2, ..., yT] 。针对每一个片段 yt :
判断检索需求 (Retrieve):
运行 Critic 模型 C,判断是否需要外部段落增强。
如果需要,在数据中插入特殊的检索标记 Retrieve = Yes 。
检索并评估相关性 (ISREL):
检索器 R 检索出 Top-K$个段落集合 D。
对于每一个段落 d ∈ D ,运行 Critic 模型 C 评估该段落是否相关,并预测出 ISREL 标记。
评估事实支持度 (ISSUP):
如果段落是相关的(ISREL = Relevant),运行 Critic 模型 C 继续评估该段落是否支持模型生成的片段,并预测出 ISSUP 标记。
位置插入:批评标记 ISREL 和 ISSUP 会被附加在检索段落或生成的片段之后。
评估整体有用度 (ISUSE):
在整个输出 y 的末尾,运行 C 预测整体有用度标记 ISUSE。
存入数据集:
最终,将拼装好的 “原始输入 + 带反思标记与检索段落” 的增强数据加入到生成器的训练集 Dgen 中。
下图展示了这一流程(<p> 和 </p> 包围起来的部分是检索到的文本块 d):

生成器的学习:
训练目标:生成器模型 M 在利用反思标记装配好的增强语料库 Dgen 上进行微调,使用标准的 Next Token Prediction 训练目标:

这里可以和 Critic 模型的训练目标做比对:
Critic 模型 C :仅学习 “在给定 x, y 的条件下预测反思标记 r” 。
Generator 模型 M :在给定输入 x 的条件下,联合学习预测目标文本 y 和反思标记 r 。
此外,有两个细节需要注意:
词表扩展:
将原始词表 V进行扩充,融入所有的反思标记集合 {Critique, Retrieve} 。
检索段落的 Loss Masking :
在计算交叉熵损失(Loss)时,把被检索到的文档块 Mask 掉(不计算 Loss)。
原因与逻辑:生成器 M 并不负责学习 “检索到的段落” 的质量,它只负责学习以下三点:
什么时候触发检索标记
如何在看到检索文档后生成批评标记
如何结合检索文档生成文本回答
2.3 Self-RAG 推理
Self-RAG 在推理阶段具备灵活定制模型效果的功能。
带阈值的自适应检索:框架允许用户手动设定一个触发阈值,如果 Retrieve = Yes 的归一化概率超过了这个阈值,就触发外部检索器调用。
基于批评标记的树状解码与打分机制:在每个片段生成步骤 t :
当触发检索时,检索器 R 返回 K 个相关段落。
生成器 M 并行处理这 K 个段落,生成 K 个不同的候选片段。
执行片段级束搜索(Beam Size = B),在时间步 t 保留得分最高的前 B 个候选片段路径,并在生成结束时返回累积得分最高的最优序列。
束搜索要求 “保留得分最高的前 B 个候选片段路径” ,那么得分如何衡量呢?
针对某个段落 d ,候选片段 yt 的综合得分由语言模型生成概率与反思标记的批评得分共同决定:

其中,批评总分 S 是三类批评标记得分的加权线性和:

stG 是批评标记单项归一化得分,计算方式如下:

rˆ 表示代表该类型批评标记中最期望生成的最优标记(例如 ISREL =Relevant )。pt(rˆ) 表示模型生成该最优标记的概率。NG 是该批评类型可能的不同取值个数。
作者指出了通过反思标记控制模型行为的两种方式:
软控制(Soft Reward / 调整权重 wG ):
wG 是推理阶段可自由调节的超参数。
示例:若希望生成结果高度严谨、有据可依,可以调高 wISSUP 的权重;若希望侧重整体流畅度与有用性,可调高 wISUSE 的权重。
硬控制(Hard Constraints / 显式过滤):
一旦模型生成了不期望的批评标记(例如产生 ISSUP = No support 或 ISREL = Irrelevant),直接在束搜索过程中剔除该候选片段路径。
3. 实验与结果
3.1 数据集与任务设置
评估形式与整体设定:
零样本评估:所有实验均在 Zero-shot 设置下进行,仅向模型提供描述任务的指令,不包含任何少样本示例(Few-shot Demonstrations)。
多维评估指标:从整体正确性、事实性和流畅度三个维度综合考量生成质量。
三类下游任务与数据集:
闭集任务
数据集:
PubHealth:公共卫生领域的事实验证数据集。
ARC-Challenge:由科学考试题构成的多项选择推理数据集。
评估方式与指标:通过聚合目标类别的答案概率,以准确率(Accuracy)作为评估指标。
短文本生成任务
数据集:
PopQA:开放领域问答数据集。作者专门挑选了包含 1,399 个长尾/罕见实体(维基百科月浏览量低于 100)的子集,用于测试高难度长尾知识。
TriviaQA-unfiltered:开放领域问答数据集,沿用前人划分的 11,313 个测试查询。
评估指标:判断生成内容中是否包含标准答案(Gold Answers),而非要求严格的完全匹配(Exact Match)。
长文本生成任务
数据集:
Biography Generation:人物传记生成任务。
ALCE-ASQA:长文本问答任务。
评估指标:
人物传记:使用 FactScore 指标评估生成内容的事实准确性。
ASQA:使用官方指标评估正确性(str-em)、基于 MAUVE 的流畅度,以及引用精确率与召回率。
3.2 Baseline
3.3 实验研究与结果
实验设置:
训练数据与模型基座:
数据规模与来源:总计使用 150k 条指令-输出对,采样自 Open-Instruct 处理的数据集以及知识密集型数据集。
模型基座:
生成器:分别使用 Llama2-7B 和 Llama2-13B。
Critic 模型:统一使用 Llama2-7B。
默认检索器:采用现成的 Contriever-MS MARCO,训练时每个输入最多检索 10 篇文档。
推理配置:
反思标记权重超参 (wG):
wISREL = 1.0(相关性)
wISSUP = 1.0(事实支持度)
wISUSE = 0.5(整体有用度)
检索阈值 (Retrieval Threshold):
大多数任务设为 0.2。
在 ALCE (ASQA) 任务上设为 0(强制每次都触发检索,以满足严格的引用要求)。
解码与加速:
片段级:采用 Beam Search,束宽 B 设为 2。
Token 级:采用贪婪解码。(可以理解为 B = 1 的束搜索)
推理引擎:使用 vllm 框架进行推理加速。(vllm 是一个本地部署模型的框架,对 Linux 系统的支持性很好)
推理时检索文档的来源策略:
默认:使用 Contriever-MS MARCO 的 Top 5 篇文档。
人物传记 (Biographies) & 开放域问答:额外叠加搜索引擎检索到的 Top 5 篇文档(共 10 篇)。
ASQA 任务:为了保证对比的公平性,所有基线统一使用官方由 GTR-XXL 检索出来的 Top 5 篇文档。
实验结果如下表所示:

实验结果分析:
与无检索 Baseline 对比:
全面超越开源微调模型:SELF-RAG(7B 和 13B)在所有评估任务上均大幅优于同等规模的监督微调 LLM(如 Alpaca、Llama2)。
部分任务超越 ChatGPT:在 PubHealth(公共卫生事实验证)、PopQA(长尾开放问答)、人物传记生成以及 ASQA(长文本问答的 Rouge 和 MAUVE 指标)上,表现超过了 ChatGPT。
越级击败大模型 Prompt 方案:在人物传记生成任务上,SELF-RAG 7B 和 13B 击败了 CoVE (65B)。CoVE 采用了复杂的迭代 Prompt 机制引导 Llama2-65B 进行自我修正,而 SELF-RAG 以小得多的参数量实现了超越。
与有检索 Baseline 对比:
开源模型全局最优:在所有任务上,SELF-RAG 均取得了开源模型中的最高性能。
揭示传统 RAG 的“失效场景”:
在只需从检索文档中简单提取或复制子串的任务(如 PopQA、Bio)上,传统 RAG(如 Alpaca/Llama2-chat + RAG)相比无检索版本有所提升。
但在需要深层推理或判断的任务(如 PubHealth、ARC-Challenge)上,传统 RAG 相比无检索基线几乎没有带来显著改善(无差别检索引入了无用上下文)。
引用准确率的优势:
大多数传统 RAG 基线缺乏准确引用的能力。
在 ASQA 任务中,SELF-RAG 的引用精确度(Precision)和召回率(Recall)远超所有开源模型。
甚至在引用精确度(Citation Precision,衡量生成的陈述是否完全被所引用的证据支持)上超越了 Ret-ChatGPT。
7B 与 13B 的反常现象:在某些事实精确度指标上,SELF-RAG 7B 偶尔表现优于 13B。原文指出这是因为较小的 7B 模型往往倾向于生成更短、但严格有据可依的回答。
数据集消融实验对照(Llama2-FT7B):
Llama2-FT7B 仅在相同指令数据上微调,不包含反思 Token,仅在测试期进行常规 RAG。
实验显示 Llama2-FT7B 性能显著落后于 SELF-RAG。这直接证明了 SELF-RAG 的性能提升并非单纯来自训练数据,而是来自于 SELF-RAG 框架(按需检索与自反思机制)本身的有效性。
3.4 分析与讨论

3.4.1 消融实验
实验设置:
样本规模:为了更高效地探索各种微调变体,消融实验将训练数据规模缩减至 50k 条(主实验为 150k)。
评估数据集:选用 PopQA、PubHealth 和 ASQA(抽取 150 个样本)三个代表性任务进行验证。
实验变体设计:
作者将消融变体分为训练端(Training)与推理端(Inference)两大类:
① 训练端消融变体
No Retriever:使用标准指令微调方法,仅在“指令-输出”对上训练,完全不提供检索段落。
No Critic:在输入-输出对中始终固定拼接 Top-1 检索文档,但不包含任何反思标记(做法类似于 SAIL ,用于验证“反思标记”本身的训练价值)。
② 推理端消融变体
No retrieval:在推理阶段完全禁用检索能力。
Hard constraints:摒弃自适应概率阈值,仅在模型生成 Retrieve = Yes 时硬性触发检索。
Retrieve top 1:如同传统 RAG,始终强制检索并仅使用 Top-1 文档,无视相关性与反思。
Remove ISSUP:在推理期的片段 Beam Search 中,仅剔除 ISSUP(事实支持度)打分,保留其他打分项。
实验结果如图 3(a) 所示:
所有组件缺一不可:表 3a 结果表明,无论移除训练端还是推理端的任何一个组件,模型性能都会出现明显下滑。
训练机制是性能基石:SELF-RAG 与 No Retriever 以及 No Critic 之间存在巨大的性能差距。这证明了通过 Critic 模型插入反思 Token 并训练 Generator,是 SELF-RAG 获得强大能力的重要原因(而非单纯依赖预训练权重)。
传统 RAG(Retrieve top 1)的局限:无差别地强制使用 Top-1 检索段落,会导致模型在 PopQA 和 ASQA 上的性能大幅下降,再次印证了“盲目嵌入无用上下文对生成有害”的论点。
事实支持度 ISSUP 的关键作用:在 Beam Search 打分公式中移除 ISSUP 后,模型在长文本问答数据集 ASQA 上的表现受到了显著伤害,证明了对“生成内容是否被证据支撑”进行显式打分的必要性。
3.4.2 推理期定制模型的效果
作者在长文本问答数据集 ASQA 上对 7B 模型进行了测试,通过改变评估“事实支持度”的批评权重 wISSUP ,观察到了显著的权衡现象(数据在图 3(b) 中给出):
调高 wISSUP 权重:
正向效应(引用精确度提升):模型的引用精确率显著增加。因为系统在采样时会强行优先保留那些“被检索证据完全支持”的候选片段。
负向效应(MAUVE 得分下降):代表文本流畅度与自然度的 MAUVE 得分有所下降。
现象背后的原因:当模型生成的文本变得更长、更丰富流畅时,不可避免地会包含一些无法被外部引用段落完全支撑的陈述。为了做到绝对“有据可依”,模型在表述上会做出一定的妥协。
3.4.3 效率与准确率的权衡
作者在 PubHealth 和 PopQA 两个数据集上评估了不同 δ 值对检索频率及任务准确率的影响,观察到了显著的现象(数据在图 3(c) 中给出):
检索频率的剧烈变化:随着 δ 的变动,两个数据集上的实际检索频率均发生了剧烈改变。
对不同任务性能影响的差异:
PopQA(长尾事实问答):减少检索会导致性能大幅下降。因为 PopQA 包含大量长尾知识实体,严重依赖外部检索补充参数化知识的不足。
PubHealth(公共卫生事实验证):减少检索带来的性能下降相对较小。
3.4.4 训练数据集大小的影响

实验设计:
采样子集:从原始的 150k 训练数据中,随机采样出 5k、10k、20k、50k 四个子集。
对比变体:分别在这四个子集上微调出 4 个 SELF-RAG 7B 变体,并与在完整 150k 数据上训练的最终版 SELF-RAG 7B 进行对比。
评估数据集:在 PopQA、PubHealth 以及 ASQA(评估引用精确度)上观察数据量对性能的影响轨迹( 参见图 4(a), 4(b), 4(c) )。
核心实验现象与对比:
呈持续上升趋势:在所有评估数据集上,随着训练数据量的增加,SELF-RAG 的性能整体呈现出明显的上升曲线。
任务敏感度差异:性能提升在 PopQA(长尾开放问答) 和 ASQA(长文本问答引用) 上尤为显著。
对比普通微调基线(Llama2-FT7B):
普通微调基线 Llama2-FT7B 在训练数据从 50k 增加到 150k 时,并没有观察到如此显著的性能改善。
这表明普通的指令微调容易较早陷入性能瓶颈,而 SELF-RAG 这种结合反思 Token 与按需检索的复合训练模式对数据规模有更好的扩展性(Scalability)。
核心结论与扩展潜力:
SELF-RAG 具备继续 Scaling 的潜力:虽然作者在研究中考虑到训练成本,将数据规模限制在 150k,但从上升且未完全饱和的曲线趋势来看,进一步扩大 SELF-RAG 的训练数据量有望带来更大的性能提升。
3.4.5 人类评估
评估设置与样本采样:
样本规模:从 PopQA(短文本问答)和 Bio(人物传记生成)的生成结果中随机抽取了 50 个样本。( 参见图 4(d) )
评估人员:由人工标注员进行独立审核。
评估指标:S&P (Support & Plausibility)
参考了前人工作的评估标准,重点考察两个维度构成的 S&P 复合指标:
Plausible(合理性):模型输出是否合理、切题(符合日常对话语境下对问题的恰当回答)。
Supported(事实支撑度):所给出的外部证据段落是否足以验证回答的有效性/真实性。
排除条件:在计算 S&P 时,过滤掉了 SELF-RAG 本身预测为“无相关性(Irrelevant)”或“无支持(No support)”的样本。
反思标记的可靠性验证:
除了评估生成的最终文本,标注员还被要求验证:模型自己预测的反思标记,是否与人类的直觉判断相符?
例如:当模型预测了 ISSUP = Fully supported 时,人工去核对该生成片段是否真的被所引用的文献完全支持;当预测 ISREL = Relevant 时,检查检索段落是否真的相关。
人类评估结论:
高 S&P 得分:在短文本问答 PopQA 上,SELF-RAG 的输出获得了很高的 S&P 得分,证明其生成结果既合理又具备充分的证据支撑。
反思标记可靠:人工标注员发现,模型预测的 ISREL(相关性)和 ISSUP(支持度)反思标记与人类自身的评估结果高度一致。
4. 结论
作者在这项研究中提出了 SELF-RAG,这是一种通过按需检索与自我反思来提升大语言模型生成质量与事实性的全新框架。
SELF-RAG 通过预测原始词表中的下一个 Token 以及新引入的特殊标记——反思标记,训练语言模型学会去检索、生成以及评估外部文本段落与自身的生成内容。此外,SELF-RAG 利用反思标记,实现了在测试期(推理阶段)对语言模型行为进行灵活定制的能力。
作者在 6 个下游任务上使用多种指标进行了全面评估,结果表明,SELF-RAG 的表现显著优于参数量更大的语言模型以及采用传统 RAG 方法的模型。