论文翻译 | ITER-RETGEN:利用迭代检索生成协同增强检索增强的大型语言模型

论文地址:Enhancing Retrieval-Augmented Large Language Models with Iterative Retrieval-Generation Synergy

摘要

检索增强生成由于有望解决包括过时知识和幻觉在内的大型语言模型的局限性而引起广泛关注。然而,检索器很难捕捉相关性,尤其是对于具有复杂信息需求的查询。最近的工作提出通过让大型语言模型积极参与检索来改进相关性建模,即用生成来指导检索。在本文中,我们证明了通过我们称之为ITER-RETGEN的方法可以实现强大的性能,该方法以迭代的方式协同检索和生成:模型对任务输入的响应显示了完成任务可能需要的内容,因此可以作为检索更相关知识的信息上下文,从而有助于在另一次迭代中生成更好的响应。与最近在完成单个输出时将检索与生成交织在一起的工作相比,ITERRETGEN将所有检索到的知识作为一个整体进行处理,并在很大程度上保持了生成的灵活性,而没有结构约束。我们在多跳问答、事实验证和常识推理方面对ITER-RETGEN进行了评估,并表明它可以灵活地利用参数知识和非参数知识,优于或与最先进的检索增强基线竞争,同时减少了检索和生成的开销。我们可以通过生成增强检索自适应来进一步提高性能。

1 引言

生成型大型语言模型(LLM)为许多应用程序提供了强大的功能。尽管LLM很强大,但它们缺乏在训练数据中被低估的知识,并且容易产生幻觉,尤其是在开放领域环境中(OpenAI,2023)。

因此,检索增强LLM引起了广泛关注,因为LLM的输出可能基于外部知识。

先前的检索增强型LMs(Izacard等人,2022b;Shi等人,2023)通常采用一次性检索,即仅使用任务输入(例如,用于开放域问答的用户问题)来检索知识。如果原始输入中明确说明了信息需求,则一次性检索应足以满足这些信息需求,这适用于事实问答(Kwiatkowski et al.,2019)和单跳事实验证(Thorne et al.,2018),但不适用于具有复杂信息需求的任务,例如多跳推理(Yang et al,2018)和长形式问答(Fan et al。2019)。

为了满足复杂的信息需求,最近的工作建议在整个生成过程中多次收集所需的知识,使用部分生成(Trivedi等人,2022a;Press等人,2022)或前瞻性句子(Jiang等人,2023)作为搜索查询。然而,这种将检索与生成交织在一起的结构化工作流具有以下局限性:(1)由于中间生成以之前检索的知识为条件,而对之后检索的知识没有任何意识,因此在生成过程中,它们无法将所有检索的知识作为一个整体进行处理;(2) 它们需要多轮检索来收集一组全面的知识,并且可能通过更新新检索的知识来频繁地改变提示,从而增加了检索和生成的开销。

在本文中,我们发现通过迭代检索生成协同作用来增强检索增强LLM是简单但有效的(ITER-RETGEN,图1)。ITER-RETGEN迭代检索增强生成和生成增强检索:检索增强生成基于所有检索到的知识输出对任务输入的响应(最初使用任务输入作为查询)。该输出显示了完成任务可能需要的内容,因此可以作为检索更多相关知识的信息上下文,即生成增强检索。新检索到的知识可以有利于检索增强生成的另一次迭代。我们还可以利用模型生成来调整检索,通过将知识从能够访问模型生成的重新排序器提取到仅能够访问任务输入的密集检索器,这在用户输入可以很容易地收集,但相关知识或期望输出没有注释的情况下可能是有益的。

图1:ITER-RETGEN迭代检索和生成。在每次迭代中,ITER-RETGEN利用上一次迭代的模型输出作为特定上下文,以帮助检索更多相关知识,这可能有助于改进模型生成(例如,校正该图中Hesse Hogan的高度)。为了简洁起见,我们在此图中只显示了两次迭代。实心箭头将查询连接到检索到的知识,虚线箭头表示检索增强生成。

我们在三个任务上评估了我们的方法,包括多跳问题回答、事实验证和常识推理。我们的方法提示LLM生成一系列推理步骤,然后在少样本设置下得出最终答案。对于上下文演示,我们专注于解决问题,并遵循Wei等人(2022)对思想链进行注释,而没有明确考虑生成增强检索可能受到的影响,这使得它在概念上简单易实现。我们的方法在六个数据集中的四个数据集上实现了比以前最先进的检索增强方法高达8.6%的绝对增益,同时在其余两个数据集中具有竞争力。根据我们的实验,生成通常受益于更多的迭代,两次迭代可以获得最大的性能增益。可以通过选择适当数量的迭代来定制性能成本权衡。我们可以通过上述生成增强检索自适应来进一步提高性能并减少迭代。

我们将研究结果总结如下:

  • 诸如精确匹配(EM)之类的自动度量可能会大大低估LLM在问答任务中的性能。此外,精确匹配的改进并不总是反映出生成的改进。使用LLM的评估可能更可靠。

  • ITER-RETGEN优于或与最先进的检索增强方法竞争,同时更简单,检索和生成的开销更少。通过生成增强检索自适应,我们可以进一步提高性能,还可以减少开销(通过减少迭代)。

  • LLM最好能有效利用参数知识和非参数知识。ITER-RETGEN在问答任务中始终优于Self Ask,无论非参数知识是否提及答案。

2 相关工作

最近几个月,LLM驱动的应用程序激增,如ChatGPT、Bing Chat和CoPilot(Chen等人,2021)。LLM在表现出前所未有的性能水平的同时,也受到以下限制:(1)由于对计算和数据的高需求,持续高效地更新LLM仍然是一个悬而未决的研究问题(Scialom等人,2022);(2) LLM也倾向于产生幻觉(OpenAI,2023),即生成看似合理但非事实的文本。为了缓解这些问题,越来越多的趋势是使用工具(Mialon等人,2023;Gou等人,2022),例如代码解释器(Gao等人,2022b;Shao等人,2020)或搜索引擎(Nakano等人,2021)来扩充LLM,试图将子任务交给更合格的专家,或通过提供更相关的信息来丰富LLM的输入上下文。

检索增强是LLM与外部世界连接的主流方向。先前的检索增强LMs(Izacard和Grave,2021;Shao和Huang,2022)通常以被动的方式接收检索到的知识:在没有LMs干预的情况下,基于任务输入检索知识。由于检索器很难捕捉相关性,特别是在零样本环境中,最近的工作表明,LLM积极参与检索以改进相关性建模,例如,为模型生成的检索提供特定上下文(例如,生成的搜索查询(Nakano等人,2021;Press等人,2022;Yao等人,2022)、部分生成(Trivedi等人,2022a)或前瞻性句子(Jiang等人,2023))。Khattab等人(2022)提出了一种支持各种检索增强方法的DSP编程框架。

最近的工作在完成单个输出时将检索与生成交织在一起。这种结构化的工作流程可能会降低生成的灵活性(Yao等人,2022)。ITER-RETGEN避免了用检索来中断生成,而是迭代检索和生成,即利用上一次迭代的完整生成来检索更多相关信息,有助于改进下一次迭代中的生成。ITER-RETGEN还具有在生成过程中将所有检索到的知识作为一个整体进行处理的优势,并且在概念上更简单、更容易实现,同时在多跳问答、事实验证和常识推理方面具有较强的经验。

一项名为GAR的密切相关的工作(Mao等人,2021)用生成的背景信息增强了查询。HyDE(Gao et al,2022a)也有类似的精神,但专注于零样本信息检索,并建议首先提示LLM生成涵盖回答给定问题所需信息的"假设"段落,然后使用生成的段落来检索真实段落。RepoCoder(Zhang et al,2023)专注于存储库级别的代码完成,并提出了一种两次迭代的检索生成范式,其中第二次迭代利用中间代码完成进行检索。相比之下,我们建议在各种自然语言任务上与ITER-RETGEN协同进行检索和生成,并探索如何进一步调整检索与模型生成。

3 迭代检索生成协同

3.1 概述

给定问题q和检索语料库={},其中是段落,ITER-RETGEN重复次迭代的检索生成;在迭代中,我们(1)利用上一次迭代的生成,与连接,来检索前k个段落,然后(2)提示LLM生成输出,将检索到的段落(表示为)和集成到提示中。因此,每次迭代可以公式化如下:

最后一个输出将作为最终响应产生。

3.2 生成增强检索

有许多自然语言任务具有复杂的信息需求。例如,在开放域多跳问答中,特定的信息需求只有在正确回答了一些先决条件的子问题后才能显现出来。换言之,原始问题与其支持知识之间可能存在语义差距,这是具有表示瓶颈的检索器无法有效解决的。在第一次迭代中,我们只能用问题来检索知识。在以后的迭代中,上一次迭代的LLM输出虽然不能保证正确性,但显示了回答问题可能需要什么,因此可以用来弥合语义差距;随着检索的改进,LLM可能会产生更好的输出。

3.3 检索增强生成

在每次迭代中,我们使用思想链提示生成一个输出,除了我们还为问题准备检索到的知识。尽管可能存在更先进的提示变体,例如,将前几次生成整合到提示中以实现直接改进,但我们将探索留给未来的工作,并专注于以直接的方式研究检索和生成之间的协同作用。

3.4 生成增强检索自适应

模型生成不仅为检索提供了特定的上下文,还可以用来优化检索器,以便检索器更好地捕捉问题中的信息需求。

密集检索器我们在实验中采用了密集检索。给定由参数化的稠密检索器,其中θq和θd分别表示查询编码器和段落编码器的参数,查询和段落之间的相似性得分计算为其编码向量的内积:

重新排序器 重新排序器,参数化为,输出段落与查询相关的概率;我们将概率表示为

蒸馏 重新排序器通常比检索器更善于捕捉查询和段落之间的相关性。因此,我们将知识从一个重新排序者提炼为一个检索者。为了帮助检索器更好地解决问题与其支持知识之间的语义差距,我们允许重新排序器访问(其中是第一次迭代的LLM输出)。我们使用以下训练目标仅优化检索器的查询编码器:

其中KL(·,·)表示两个概率分布之间的KL散度。

4 实验

4.1 数据集

我们在三个推理任务的六个数据集上进行了实验:(1)多跳问答,包括HotPotQA(Yang等人,2018)、2WikiMultiHopQA(Ho等人,2020)、MuSiQue(Trivedi等人,2022b)和Bamboogle(Press等人,2022)。

关于MuSiQue,我们遵循Press等人(2022),仅使用2个问题;(2) 事实核查,包括Feverous(Aly等人,2021);(3) 常识推理,包括战略QA(Geva等人,2021)。示例如表1所示。

我们分别使用2017年10月(Yang等人,2018)和2018年12月(Karpukhin等人,2020)的维基百科转储作为HotPotQA和2WikiMultiHopQA的检索语料库,并将2021年12月的维基百科转储(Izacard等人,2022b)用于其他数据集。

4.2 评估设置

我们对Bamboogle的所有125个问题、StrategyQA训练集的前500个问题以及其他数据集开发集的前五百个问题进行了评估。

所有方法都是在3个热点设置下进行评估的,在演示中共享相同的问题。

评估指标是多跳问答数据集的精确匹配(EM)和F1,以及事实验证和常识推理数据集的准确性。为了进行更稳健的评估,我们还使用text-davinci-003评估模型输出的正确性,所得度量表示为Acc†。用于评估的提示如下,其中{question}、{model output}和{answer}是占位符。

表1:来自六个数据集的示例问题。

4.3 基线

直接提示(Brown等人,2020) 提示LLM在没有解释的情况下直接生成最终答案。当用检索来增强直接提示时,我们使用问题来检索知识,这些知识将放在提示中的问题之前。

**CoT提示(Wei等人,2022)**提示LLM生成自然语言推理步骤,然后是最终答案。

**ReAct(Yao et al,2022)**将推理、行动和观察步骤交织在一起,直到达到最终确定答案的行动。一个操作可以是生成查询以搜索信息,也可以是最终确定答案。观察是检索到的段落的串联。

**Self-Ask(Press等人,2022)**交错(i)后续问题生成,(ii)使用后续进行检索,以及(iii)以检索到的知识为条件回答后续,直到不再生成后续问题,LLM给出原始问题的答案。我们遵循(Yoran等人,2023),在原始问题的前面加上新检索到的段落。在我们评估的任务中,Self-Ask在概念上与ReAct相似,主要区别在于Self-Asc在提示中的原始问题之前积累检索到的知识,而ReAct则将检索到的信息放在其查询之后。Self-Ask和IRCoT(Trivedi等人,2022a)也共享协同推理和检索的精神。

**DSP(Khattab等人,2022)**包括多跳检索阶段和答案预测阶段。对于检索阶段中的每一跳,都会提示模型生成搜索查询并总结检索知识以供后续使用。在预测阶段,DSP根据总结的知识和检索到的文档使用CoT生成答案。

4.4 实现细节

我们使用了InstructGPT的text-davinci-003版本(欧阳等人,2022)作为后端LLM。

我们还在附录A中介绍了使用开源Llama-2模型(Touvron等人,2023)的实验。所有实验都使用了贪婪解码。

对照MSMARCO(Izacard等人,2022a)用于检索。我们检索了每个查询的前5个段落。对于ReAct和Self Ask,我们最多允许5次与检索交互。我们对DSP1的实现进行了调整,使其使用与其他方法相同的生成模型和检索系统。

请注意,ITER-RETGEN的第一次迭代是CoT提示和检索增强。因此,ITER-RETGEN和CoT提示共享相同的注释上下文演示。所有提示均显示在附录中。

4.5 主要结果

如表2所示,ITER-RETGEN(T≥2)的Acc†显著高于HotPotQA、2WikiMultiHopQA、Bamboogle和StrategyQA上的检索改进基线,同时与MuSiQue和Feverous上的最佳方法(即Self -Ask)具有竞争力。

当增加ITER-RETGEN的迭代次数时,性能通常会提高,第二次迭代会带来最大的提升。

表2:多跳问答、事实验证和常识推理数据集的评估结果。

Acc†是用text-davinci-003评估的模型输出的准确性。对于ITER-RETGEN,我们评估了不同迭代(最多7次迭代)中的LLM输出。带下划线的度量值高于Self-Ask的度量值。

值得注意的是,如表3所示,ITERRETGEN(T=2)优于ReAct和Self-Ask,或者与ReAct和Self-Mask竞争,使用更少的对LLM的API调用(即2)和更少的检索段落(即每次迭代5个,总共10个)。ITER-RETGEN在概念上也很简单,即迭代检索递增的CoT,而不需要复杂的处理。

表3:API调用text-davinci-003的平均次数,以及检索到的ReAct和Self-Ask段落。

请注意,ITER-RETGEN(T=2)通过更少的API调用(即2)和更少的检索段落(每次迭代5个,总共10个)实现了显著更高或具有竞争力的Acc†。

我们还将ITER-RETGEN与DSP进行了比较,后者也基于检索到的知识使用CoT生成答案,但在信息收集和处理方面有所不同。在每次迭代中,ITERRETGEN根据(1)问题和(2)先前的模型输出检索知识,该模型输出显示了回答问题可能需要的内容。随着迭代次数的增加,我们倾向于获得更全面、更相关的知识集。此外,与DSP不同,我们不汇总检索到的文档以生成答案,因此不会引入汇总错误。

如表2所示,ITER-RETGEN明显优于DSP。我们手动调查了10个随机问题,其中DSP失败,但ITER-RETGEN提供了正确的答案。在其中40%的案例中,DSP未能检索到包含正确答案的文件,而在其中50%的案例中所总结的知识具有误导性,例如,对于"Chris Menges和Aram Avakian共享什么职业?"的问题,DSP生成了一个错误的摘要"Chris Mengs和Aram Avakian都是美国和英国电影摄影师协会的成员。"。

Acc†是一个可靠的度量 为了研究**Acc†**的可靠性,我们重点关注EM和Acc†不一致的模型输出,并手动检查哪个度量给出了更正确的标签。在四个多跳问答数据集中的每一个数据集上,我们从ITER-RETGEN的第二次迭代中随机采样了20个模型输出,总共产生了80个样本。对于98.75%的样本,EM为0,Acc†为1,而Acc†在97.5%的时间内给出了正确的标签,这表明EM严重低估了模型性能。我们还对Self-Ask进行了同样的评估,当Acc†与EM不一致时,98.75%的时间给出了正确的标签。

Acc†提供了识别语义正确的模型输出的优势,即使它们的表面形式与注释的答案不同。例如,对于"Jan Baptist Van Rensselaer的父亲来自哪个国家?"这个问题,注释的答案是荷兰语,而模型预测是荷兰,这在Acc†方面是正确的,但受到EM的惩罚。

值得注意的是,ITER-RETGEN(T≥2)在2WikiMultiHopQA上始终表现出比Self-Ask更低的EM,但更高的Acc†,这表明EM的增强并不一定反映生成答案质量的提高。

生成效益检索自适应为了研究LLM输出如何用于检索自适应,我们在HotPotQA和Feverous上进行了实验。具体来说,在每个数据集上,我们从训练集中随机抽取9000个问题进行训练,并抽取1000个问题进行验证。我们将ITER-RETGEN应用于一次迭代,并使用模型输出y1进行检索自适应,如第3.4节所示。我们使用TART(Asai等人,2022)作为重新排序器,并在不超过1000步的时间内将知识从TART提取到密集检索器。

批量大小为32,学习率为1e-5。我们使用了蒸馏损失最低的检索器检查点。

如表4所示,检索自适应使ITER-RETGEN能够用更少的迭代实现显著更高的Acc†。我们还展示了使用进行适应的好处,展示了它对变体的改进,变体的不同之处在于重新排序者无法访问;该变体的训练目标可以通过去除等式3中的所有符号来获得。

表4:使用LLM生成y1对优化密集检索器的影响。我们根据Acc†在HotPotQA和Feverous上评估了ITER-RETGEN

4.6 消融实验

4.6.1 生成增强检索

表6显示了不同迭代中检索的答案回忆。第一次迭代只使用问题进行检索,并且存在低回答回忆的问题。在第二次迭代中,用第一次迭代的LLM输出扩充的检索,实现了显著更高的回忆,表明LLM生成可以帮助弥合复杂问题与其支持知识之间的语义差距。然而,之后的表现很快就达到了平稳期。

表6:ITER-RETGEN在不同迭代中检索到的段落的答案回忆

4.6.2 ITER-RETGEN更好地利用参数和非参数知识

理想情况下,LLM应该灵活地利用非参数知识或参数知识,这取决于非参数知识在上下文中是否相关。表5列出了供调查的不同问题子集的绩效细分。我们考虑了CoT在不进行检索的情况下正确回答问题的能力,作为评估LLM使用其参数知识回答问题能力的代理。与Self-Ask相比,ITER-RETGEN往往在保留LLM在LLM可以使用CoT解决的问题上的性能方面明显更好,而无需检索,同时在互补子集上具有竞争力。这可能是因为Self-Ask的结构约束使LLM对后续问题生成和回答的准确性和全面性过于敏感,而且Self-Ask也无法整体处理所有检索到的知识,从而降低了LLM解决问题的灵活性。此外,无论上下文中的非参数知识是否提到了答案,ITER-RETGEN都在很大程度上始终优于Self-Ask。这表明,当上下文中的非参数知识不相关或不完整时,ITER-RETGEN比Self-Ask更好地利用参数知识。

表5:Self-Ask和ITER-RETGEN(T=2)在不同子集上的比较,以Acc†为单位。CoT✓是CoT×在没有检索的情况下正确回答的问题的子集;CoT%是补码。w/Answer Retrieved是一种方法(Self-Ask或ITER-RETGEN)成功检索提及答案的段落的问题子集;w/o Answer Retrieved是补码。ITER-RETGEN往往更善于保持LLM在使用CoT无需检索即可解决的问题上的性能,并且无论检索到的知识是否提到了答案,都始终更准确

4.7 误差分析

在HotPotQA上,我们手动分析了ITER-RETGEN(T=2)失败的20个随机案例。25%的预测是假阴性。在10%的情况下,ITER-RETGEN检索所有必要的信息,但未能执行正确的推理。其余65%的错误案例与检索有关,其中76.9%的案例中,检索被第一次迭代的完全错误推理误导,而在其他案例中,第一次迭代中的推理是部分正确的,但检索器未能在第二次迭代中检索到缺失的部分。我们还观察到,在第一次迭代中,推理可能会受到仅使用问题作为查询检索到的嘈杂且可能分散注意力的知识的负面影响。

5 案例研究

表7分别用HotPotQA和StrategyQA的两个例子展示了检索生成的协同作用。在第一次迭代中,由于两个问题都需要多跳推理,检索器无法仅使用问题检索所有支持知识。尽管在第一次迭代中受到分心的检索知识(HotPotQA示例中不同领域的能力)的影响,并显示出不完美的参数知识(StrategyQA示例中生成的Raclette不太可能在巴黎找到的语句),LLM在第二次迭代中生成有助于检索相关知识的短语,并成功纠正其输出。

表7:展示检索-生成协同作用的两个例子。我们在生成的短语下划线,这些短语有助于检索相关知识,并在第二次迭代中成功纠正事实错误(红色)。为简洁起见,表中未显示检索到的无关段落。

6 结论

我们展示了ITER-RETGEN在回答具有复杂信息需求的问题方面的有效性。尽管简单,ITER-RETGEN的性能优于具有更复杂工作流程的检索增强方法,我们认为这可以作为未来检索增强生成研究的有力基线。我们还表明,生成增强检索自适应可以进一步提高ITER-RETGEN的性能,同时减少开销。

局限性

在这项工作中,我们建议使用ITERRETGEN来增强检索增强的大型语言模型,该模型以迭代的方式协同检索和生成,并与更结构化的提示技术(如Self-Ask)相比表现出强大的性能。然而,值得注意的是,我们的实验使用了一个固定的黑匣子大型语言模型,该模型可能没有针对各种形式的提示进行同等优化。研究促进特定(基于梯度的)优化进一步突破极限的潜力将是一件有趣的事情。这可能涉及到使大型语言模型能够更灵活有效地利用参数和非参数知识。通过探索这一途径,我们可能会发现该领域的新见解和进步。此外,我们的实验没有涵盖长格式生成,这可能会比ITERRETGEN在这项工作中受益于更细粒度的检索。我们承认这一领域值得进一步探索,我们将其留给未来的工作。

相关推荐
scan72421 分钟前
LILAC采样算法
人工智能·算法·机器学习
leaf_leaves_leaf24 分钟前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零129 分钟前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
爱喝热水的呀哈喽1 小时前
《机器学习》支持向量机
人工智能·决策树·机器学习
minstbe1 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机
月眠老师1 小时前
AI在生活各处的利与弊
人工智能
四口鲸鱼爱吃盐1 小时前
Pytorch | 从零构建MobileNet对CIFAR10进行分类
人工智能·pytorch·分类
苏言の狗1 小时前
Pytorch中关于Tensor的操作
人工智能·pytorch·python·深度学习·机器学习
bastgia2 小时前
Tokenformer: 下一代Transformer架构
人工智能·机器学习·llm
菜狗woc2 小时前
opencv-python的简单练习
人工智能·python·opencv