更多文章,请关注微信公众号:NLP分享汇
原文链接:ICLR2024:能够自我反思的SELF-RAG
下面介绍的这篇论文是最近被ICLR 2024 accepted oral,作者来自University of Washington & Allen Institute for AI & IBM Research AI。
论文标题:SELF-RAG: Learning to Retrieve, Generate, and Critique Through Self-reflection
论文链接:https://arxiv.org/pdf/2310.11511
代码和模型:https://selfrag.github.io/
背景
大语言模型(LLMs)尽管功能强大,但它们生成的响应常常包含事实性错误,这是因为它们只依赖于模型内部的参数知识。
现有方法的局限性:检索增强生成(RAG)是一种通过检索相关知识来增强语言模型输入的方法,它减少了知识密集型任务中的事实错误。然而,RAG方法在检索和整合检索到的文档时存在不区分情况的问题,可能会导致生成的回答质量下降,或者引入不相关或偏题的文档。
论文介绍了一种新的框架,自反思检索增强生成(SELF-RAG),旨在通过检索和自我反思提高LLMs生成文本的质量和事实准确性。SELF-RAG训练一个任意的语言模型,使其能够根据需求适应性地检索文档,并生成和反思检索到的文档以及自身的生成内容,这是通过特殊的token—reflection tokens来实现的。
SELF-RAG的关键特点:
-
按需检索:SELF-RAG只在必要时检索文档,提高了模型的多功能性。
-
自我反思:通过生成reflection tokens,模型能够在推理阶段控制自己的行为,以适应不同的任务需求。
-
可控性:在推理阶段,SELF-RAG能够根据reflection tokens来定制其行为,使其能够满足多样化的任务要求。
SELF-RAG概览
图1 Overview of SELF-RAG
SELF-RAG如何通过检索、批评和生成文本来增强整体生成质量、事实性和可验证性。图1左侧部分展示了检索增强生成(RAG)的传统方法,它不区分检索的必要性,统一检索固定数量的文档,并且不会重新审视生成质量。右侧部分展示了SELF-RAG的工作流程:
Step1:检索(Retrieve on demand)
在第一步中,SELF-RAG根据输入提示(prompt)和前面的生成内容,决定是否需要通过检索来增强持续生成的内容。如果模型确定检索将会有帮助,它会输出一个检索标记(retrieval token),以按需调用检索模型(Retriever Model)。
Step2:生成(Generate segment in parallel)
在第二步中,SELF-RAG会并行处理多个检索到的文档,评估它们的相关性,并生成相应的任务输出。这一步骤可能涉及生成多个候选的输出片段。
Step3:批评(Critique outputs and select best segment)
在第三步中,SELF-RAG生成批评标记(critique tokens),以批评自身的输出,并在事实性和整体质量方面选择最佳片段。批评过程涉及评估检索到的文档的相关性(ISREL),输出片段的支持度(ISSUP),以及整体的实用性(ISUSE)。
举例说明:
-
以“美国各州名称的由来”为例,SELF-RAG首先确定是否需要检索信息。
-
确定需要检索后,模型检索并评估检索到的文档的相关性,并生成关于州名来源的输出。
-
然后,模型生成critique tokens,以自我评估生成的输出在事实性和质量方面的表现。
四种reflection tokens
表1 Four types of reflection tokens used in SELF-RAG
Retrieve(检索)
输入:输入 x
和前一步的输出 y
。
输出:是一个决策标记,决定何时需要进行检索。
-
yes:
表示继续生成需要事实基础,需要检索相关文档。 -
no:
表示当前生成不需要检索文档,可能是因为序列不需要事实基础或可能不会通过知识检索得到增强。 -
continue:
表示模型可以继续使用之前检索到的证据。
ISREL(相关性)
输入:输入 x
,检索到的文档 d
。
输出:评估检索到的文档 d
对于解决输入 x
是否提供了有用的信息。
-
relevant:
表示文档d
对于回答输入x
是相关的。 -
irrelevant:
表示文档d
对于回答输入x
是不相关的。
ISSUP(支持度)
输入:输入 x
,当前的输出 y
,以及检索到的文档 d
。
输出:评估输出 y
中的信息是否得到了文档 d
的支持。
-
fully supported
: 输出y
中的所有可验证陈述都得到了文档d
的支持。 -
partially supported
: 输出y
中的部分信息得到了文档d
的支持,但不是全部。 -
no support
: 输出y
中的信息没有得到文档d
的支持,或者与文档相矛盾。
ISUSE(实用性)
输入:输入 x
和当前的输出 y
。
输出:评估输出 y
对于输入 x
的整体实用性和信息价值。5个等级。
算法实现
图2 SELF-RAG算法伪代码
输入:输入提示 x
和前一步的生成 y<t
(如果有的话)。
输出:下一个输出片段 yt
。
步骤:
if 检索决策:模型M预测是否需要检索(Retrieve
)。这是通过模型根据当前的输入和前一步的生成来决定的。
-
执行检索 (如果
Retrieve
== "Yes"):使用检索器R
根据当前的输入x
和前一步的生成yt-1
来检索相关的文本段落D
。 -
生成和评估
-
对于每个检索到的文档
d ∈ D
,模型预测其与输入x
的相关性ISREL
。 -
同时,模型生成下一个响应片段
yt
并预测该片段是否得到文档d
的支持ISSUP
。
-
-
批评和选择最佳片段
-
模型生成批评标记
ISUSE
来评估整体的响应片段的实用性。 -
根据
ISREL
、ISSUP
和ISUSE
的预测,模型对每个片段进行评分并选择最佳片段。
-
else 不执行检索:(如果Retrieve == "No"):
-
模型直接预测下一个输出片段
yt
给定输入x
。 -
模型预测该片段的实用性
ISUSE
。
输出选择
-
根据上述步骤中的评分和批评,选择最终的输出片段
yt
。
Retrieve
, ISREL
, ISSUP
, ISUSE
是反思标记(reflection tokens),它们帮助模型在生成文本时进行自我评估和自我调整。推理过程中,模型会动态决定是否需要检索信息,并基于检索到的信息和自我反思的结果生成文本。该算法允许模型灵活地调整检索频率和生成文本的行为,以适应不同的下游应用和用户偏好。
SELF-RAG训练
训练批评模型(Critic Model)
数据收集:为了训练批评模型,研究者们需要收集关于反思标记的数据。手动标注这些数据成本较高,因此他们使用高级的LLM(如GPT-4)生成这些反馈,然后将其知识蒸馏到内部批评模型C中。
Critic学习:收集到训练数据后,批评模型C使用标准的有条件的语言模型目标进行训练,即最大化似然函数来预测反思标记。
训练生成模型(Generator Model)
数据收集:生成模型M的训练数据是通过增强原始输出y,使用检索和批评模型来创建的。对于每个输出片段yt,运行批评模型C来评估是否需要额外的段落来增强生成。
生成学习:使用标准的语言模型目标训练生成模型M,学习预测目标输出以及反思标记。在训练期间,检索到的文本块会被遮蔽(mask out),并且原始词汇表V会扩展以包含一组反思标记。
图3 SELF-RAG training examples
图3在论文中提供了SELF-RAG训练的示例,展示了该框架如何在实际场景中工作。该图通过两个不同的示例来阐释SELF-RAG的训练过程,一个不需要检索,另一个需要检索。
实验结果
表2 Overall experiment results on six tasks
表2展示了SELF-RAG在六个不同任务上的性能结果,并与一系列基线模型进行了比较。这些任务包括封闭集合任务(如PubHealth和ARC Challenge)、短形式生成任务(如PopQA和TriviaQA-unfiltered)、以及长形式生成任务(如传记生成和ALCE-ASQA)。表中列出了不同模型在各个任务上的表现,包括准确率(acc)、事实得分(FS)、情感得分(em)、流畅度(rg)、MAUVE、引用精确度(prec)和引用召回率(rec)等指标。
表中的结果表明,SELF-RAG在多个任务上显著优于基线模型,包括在开放域问答、推理和事实验证任务上的表现。特别是在ALCE-ASQA任务上,SELF-RAG在引用精确度和引用召回率方面取得了显著提升,显示出其在长形式生成任务中的优势。此外,表中还展示了SELF-RAG在不同训练数据规模下的性能,以及通过调整检索阈值来平衡检索频率和准确性的实验结果。这些分析有助于理解SELF-RAG模型的性能特点和潜在的应用场景。
图4 Analysis on SELF-RAG
图4(a): SELF-RAG关键组件的消融研究 (Ablation Studies)
这部分展示了对SELF-RAG模型中关键组件进行消融研究的结果。消融研究是为了识别模型中哪些部分对于最终性能最为关键。
-
Training No Retriever R:没有检索组件的模型。
-
Training No Critic C:没有批评组件的模型。
-
Test No retrieval:在测试时不进行检索的模型。
-
Test Hard constraints:使用硬约束进行检索的模型。
-
Test Retrieve top1:只使用检索到的顶部一个文档的模型。
-
Test Remove ISSUP:在批评引导的束搜索中移除ISSUP分数的模型。
图4(b): 推理时自定义效果的影响 (Customization)
这部分探讨了在推理时调整不同批评类型(Critique token type)权重对模型性能的影响。
-
权重对ISSUP的影响:ISSUP批评类型评估输出由文本段落支持的程度。通过改变ISSUP的权重,可以观察到模型在引用精确度(Citation Precision)和流畅度(Mauve)上的表现变化。
-
引用精确度和流畅度:随着ISSUP权重的增加,模型更倾向于生成由证据支持的内容,可能会提高引用精确度但降低流畅度。
图4(c): 检索频率与模型性能之间的关系 (Retrieval)
这部分分析了检索频率如何影响模型在特定任务上的性能。
-
检索阈值(Retrieval Threshold):改变检索触发的阈值,观察模型检索频率和准确率之间的关系。
-
检索频率:检索频率的变化,可能通过不同的阈值δ来控制。
-
准确率(Accuracy):随着检索频率的变化,模型在PubHealth和PopQA任务上的准确率表现。
图5 Training scale and Human analysis
图5展示了SELF-RAG模型在不同规模的训练数据下的性能表现。包括使用不同数量的训练样本(例如5k、10k、20k、50k)来训练模型,并测量模型在特定任务上(如PopQA、PubHealth、ASQA)的性能(例如准确率、事实得分等)。包含了人类评估的结果,评估SELF-RAG生成的输出以及预测的反思标记的可靠性。这可能涉及到对模型输出的合理性(S&P)、相关性、支持度等指标的评估。