也看引入自我反思的大模型RAG检索增强生成框架:SELF-RAG的数据构造及基本实现思路

今天是2023年10月20日,星期五,北京,天气晴。

我们前面几个文章在讲RAG的评估,在之前的文章中有介绍,检索增强生成(RAG)通过检索相关知识来增强大型语言模型的回复,在提升事实性上有一定帮助。

然而,这些方法可能会阻碍LLMs的多功能性,或引入不必要或偏离主题的段落,导致生成质量低下,因为它们会不加区分地检索段落,而不管事实基础是否有帮助。

此外,由于没有对模型进行明确的训练以利用和跟踪所提供段落中的事实,因此无法保证输出结果与检索到的相关段落保持一致。

最近的工作《SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION 》(地址:https://arxiv.org/pdf/2310.11511.pdf)引入了一个名为"自我反思检索-增强生成"(SELF-RAG)的框架,通过检索和自我反思来提高LM的质量和事实性。

其思想在于,训练一个单一的任意LM,该LM可按需自适应性地检索段落,并使用特殊标记(称为反思标记)生成和反思检索到的段落及其自身的生成。反思标记的生成使LM在推理阶段具有可控性,使其能够根据不同的任务要求调整自己的行为。

实验表明,SELF-RAG在开放域质量保证、推理和事实验证任务上,在提高长篇文章的事实性和引用准确性方面也有显著提高。

地址: https://selfrag.github.io/

这是从另一个角度来做的RAG的工作,读了一下,有些启发,供大家一起参考。

一、基本思想

该工作引入了自我反思检索增强生成(SELF-RAG),通过按需检索和自我反思来提高LLM的生成质量,包括其事实准确性,而不损害其通用性。

以端到端方式训练任意LLM,使其学会在任务输入时,通过生成任务输出和间歇性特殊标记(即反思标记)来反思自己的生成过程。反思标记分为检索标记和批判标记,分别表示检索需求和生成质量。

具体来说,在给定输入提示和前几代的情况下,SELF-RAG首先会判断用检索到的段落来增强继续生成是否有帮助。如果有帮助,它就会输出一个检索标记,按需调用检索模型(步骤1)。

随后,SELF-RAG同时处理多个检索到的段落,评估它们的相关性,然后生成相应的任务输出(步骤2)。然后,它生成批判标记来批判自己的输出,并从事实性和整体质量方面选择最佳输出(第3步)。

这一过程不同于传统的RAG(图1左),后者无论检索的必要性如何(例如,下图示例不需要事实性知识),都会持续检索固定数量的文档进行生成,而且从不对生成质量进行二次检查。

此外,SELF-RAG还会为每个段落提供引文,并对输出结果是否得到段落支持进行自我评估,从而更容易进行事实验证。

SELF-RAG通过将任意LM统一为扩展模型词汇表中的下一个标记预测,训练其生成带有反射标记的文本。

二、实现细节:重点看数据构造

SELF-RAG通过检索和自我反思来提高LLM的质量和事实性,同时又不牺牲LLM的原始创造性和多功能性。

端到端训练可以让LMM在必要时根据检索到的段落生成文本,并通过学习生成特殊标记对输出进行批判。

这些反思标记(表1)表示需要检索或确认输出的相关性、支持性或完整性。相比之下,常见的RAG方法会不加区分地检索段落,而无法确保引用来源的完整支持。

1、问题形式化和概述

形式上,给定输入x,训练M按顺序生成由多个片段y=[y1,...,yT]组成的文本输出y,其中yt表示第t个片段的标记序列。

首先看推理阶段。图1和算法1展示了SELF-RAG的推理情况。

算法1写的很清晰:对于每一个x和前序生成结果y<t,模型都会解码一个检索标记,以评估检索的效用。如果不需要检索,模型就会像标准LM一样预测下一个输出段落。如果需要检索,模型就会生成一个评论标记,用于评估检索段落的相关性,然后生成下一个回复段落以及一个评论标记,用于评估回应段中的信息是否得到段落的支持。

SELF-RAG并行处理多个段落以生成每个段落,并使用自己生成的反射标记对生成的任务输出执行软约束或硬控制。例如:

在上图中,由于d2没有提供直接证据(ISREL为不相关),且d3输出仅得到部分支持,而d1得到完全支持,因此在第一个时间步骤中选择了检索到的段落d1。

2、训练阶段

下面介绍两个模型的监督数据收集和训练,即批判者C和生成器M。

1)训练批判者模型

数据收集。对每个片段的反射标记进行人工标注的成本很高。最先进的LLM(如GPT-4)可有效用于生成此类反馈。然而,依赖这种专有的LLM可能会提高API成本并降低可重复性,通过促使GPT-4生成反射标记来创建监督数据,然后将其知识提炼为内部C:{Xsample,Ysample}∼{X,Y}。

如表1所示,不同的反射标记组有不同的定义和输入,因此我们对它们使用不同的指令提示。反射标记定义如下:

按需检索(Retrieve):给定输入和前一步生成(如适用)后,LM会确定续篇是否需要事实依据。no表示不需要检索,因为序列不需要事实基础或可能不会通过知识检索得到加强;yes表示需要检索。continue表示一个模型可以继续使用之前检索到的证据。例如,一段话可能包含丰富的事实信息,因此SELF-RAG会根据这段话生成多个片段。

相关性(ISREL):检索到的知识不一定总是与输入相关。这一方面表明证据是否提供了有用的信息(相关)。

支持(ISSUP):归因是指输出是否得到某些证据的充分支持。这一方面判断的是输出中的信息有多少是由证据所包含的,归因分为三个等级:完全支持、部分支持和不支持/矛盾。

有用(ISUSE):将感知到的有用性定义为回复是否是对查询有帮助且信息丰富的答案,而与回复是否符合事实无关,这也可视为可信度。对于有用性,采用五级评价(1为最低,5为最高)。

以"检索"为例。向GPT-4发送了一条特定类型的指令("给定指令,请判断从网络上查找一些外部文档是否有助于生成更好的回复。"),然后用fewshot演示了I的原始任务输入x和输出y,以预测适当的反映标记文本:p(r|I,x,y)。

其针对每个标记,都设定了一些prompt,这块是整个数据的关键:

表8显示了初始检索标记的指令和示例。

表9显示了用于收集"检索给定指令"、"前面的句子"和"以前检索过的段落"三路输出标记的指令和示例

表10显示了用于收集ISREL三路输出标记的指令和示例

表11显示了用于收集ISREL三路输出标记的指令和示例

表12显示了用于收集ISUSE的五路输出标记的指令和示例

人工评估结果表明,GPT-4的反射标记预测与人工评估结果具有很高的一致性,所以为每种类型收集了4k-20k个有监督的训练数据,并将它们组合起来形成C的训练数据,样式如下:

训练数据的样式如下:

批判学习。在收集到训练数据Dcritic之后,用预先训练好的LM对C进行初始化,并使用标准的条件语言建模目标--最大化似然--对其进行训练:

2)训练生成器模型

数据收集。给定一对输入-输出(x,y),使用检索模型和批判者模型来增强原始输出y,以创建精确模拟SELF-RAG推理时间过程的监督数据。对于每个语段yt∈y,运行C来评估额外的语段是否有助于增强生成。如果需要检索,则添加检索特殊标记Retrieve=yes,然后R检索前K个段落D。对于每个段落,C进一步评估该段落是否相关,并预测ISREL。如果段落相关,C会进一步评估该段落是否支持模型生成,并预测ISSUP。

其中,批判标记ISREL和ISSUP会附加在检索到的段落之后。在输出y(或yT)结束时,C会预测总体效用标记ISUSE,并将包含反射标记和原始输入对的增强输出添加到Dgen中。

生成器学习。使用标准的下一个标记目标,在添加了反射标记Dgen的编辑语料库上训练生成器模型M:

M 与C训练不同,M学习预测目标输出和反射标记。在训练过程中会屏蔽掉检索到的文本块以计算损失,并用一组反射标记{Critique,Retrieve}来扩展原始词汇V。 

3、推理阶段

在推理阶段,SELF-RAG通过生成反射标记来自我评估输出结果,从而使其行为适应不同的任务要求。

对于要求事实准确性的任务,目标是让模型更频繁地检索段落,以确保输出结果与可用证据密切吻合。在开放性较强的任务中,如撰写个人经历文章,重点则转向减少检索次数,优先考虑整体创造性或实用性得分。

因此,在推理过程中需要实施控制以满足这些不同目标。方法如下:

带阈值的自适应检索。SELF-RAG通过预测"检索"(Retrieve)来动态决定何时检索文本段落。另外还允许设置阈值。具体来说,如果在Retrieve的所有输出标记中生成Retrieve=Yes标记的概率超过了指定的阈值,就会触发检索:

带批判标记的树状解码。在每个分段步骤t,当需要根据硬条件或软条件进行检索时,R会检索K个段落,生成器M会并行处理每个段落,并输出K个不同的候选续篇。进行分段级波束搜索(波束大小=B),以获得每个时间戳t的前B个分段连续性,并在生成结束时返回最佳序列。

每个段落yt相对于段落d的得分都会用批判者得分S更新,该得分是每个段落yt和段落d的归一化概率的线性加权和。

对于每个批判标记组G(如ISREL),将其在时间戳t的得分记为sGt,并按如下方式计算片段得分:

三、实验设置与结果分析

1、任务和数据集

该工作在一系列下游任务上对SELF-RAG和各种基线进行了评估,用旨在评估整体正确性、事实性和流畅性的指标对输出进行了整体评估。

封闭集任务包括两个数据集,即关于公共卫生的事实验证数据集(PubHealth)和根据科学考试创建的多选推理数据集(ARC-Challenge),使用准确率作为评估指标,并对测试集进行报告。

两个开放域问题解答(QA)数据集:PopQA和TriviaQA-unfiltered,其中系统需要回答有关事实知识的任意问题。

长式生成任务包括传记生成任务和长式质量保证任务ALCE-ASQA,使用FactScore来评估传记,并使用基于MAUVE的官方指标正确性、流畅性以及引用精度和召回率来评估ASQA。

2、实验结果

表2(上)列出了相关对比效果:

如表2(下)所示:

在PubHealth和ARC-Challenge上,有检索功能的基线与没有检索功能的基线相比,性能提升并不明显。

大多数带检索的基线模型在提高引用准确率方面都很吃力。

在实际精确度的度量上,SELF-RAG7B偶尔会优于13B,这是因为较小的SELF-RAG通常倾向于生成精确且较短的输出。

Llama2-FT7B是在与SELF-RAG相同的指令-输出对上训练的基准LM,不进行检索或自我反省,仅在测试时进行检索增强,它落后于SELF-RAG。这一结果表明,SELF-RAG的收益并非完全来自训练数据,并证明了SELF-RAG框架的有效性。

总结

本文主要介绍了最近的工作《SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION 》,该工作引入了一个名为"自我反思检索-增强生成"(SELF-RAG)的框架,通过检索和自我反思来提高LM的质量和事实性。

SELF-RAG通过预测原始词汇中的下一个标记以及新添加的特殊标记(称为"反思标记"),训练LM学习检索、生成和批判文本段落以及自己的生成。

其实现思路与toolformer等有着十分类似的思路,感兴趣的可以结合一起看。

参考文献

1、https://arxiv.org/pdf/2310.11511.pdf

2、 https://selfrag.github.io/

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。

相关推荐

  • Character AI:如何把LLM变成人类想象力引擎?
  • 清华版「AutoGPT」开源,通用智能体XAgent,各种任务都能做
  • 1020.AI日报:DALL·E 3正式上线ChatGPT Plus和企业版
  • 刷到这个“没有译制片腔调的翻译”视频了么?AI可以解决!
  • 突发!美国升级对华芯片出口禁令
  • 前阿里员工坦言:32岁,我的职业生涯要结束了
  • DALL·E 3正式上线ChatGPT;智谱AI今年已融资25亿元;科大讯飞回应美国AI芯片出口管制丨AIGC大事日报
  • 千亿视讯市场:智慧物联巨头大华股份增长新引擎?
  • AI服务器缺货真相调查:两天涨价30万,连“味精大王”都入场了
  • 研发日常踩坑-Mysql分页数据重复
  • 开发者的“贴身伴侣”
  • MySQL到TiDB:Hive Metastore横向扩展之路
  • ZGC关键技术分析
  • AlmaLinux不使用 “红帽代码”,如何保持兼容RHEL
  • 头哥对谈厉启鹏:开源技术的应用和商业价值分析
  • Mojo登陆Mac,比Python快90,000倍
  • IT BOOK多得,2023年度清华社“荐书官”有奖招募啦!
  • 一文掌握在PyCharm中正确设置Python项目
  • 一个人将模型训练单机平台升级成分布式
  • 突然暴雷!MariaDB 决定放弃两款核心产品!专家猛烈抨击!