更多文章,请关注微信公众号: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)、相关性、支持度等指标的评估。