RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation

https://arxiv.org/abs/2404.00610



亮点:

模型够动态地优化搜索查询,包括重写、分解和消除歧义。

思路方法:

利用ChatGPT,根据不同情境(重写、分解、消除歧义)使用专门的提示模板来定制搜索查询,而不是简单地依赖原始查询。

当发现数据集的初始输出与检索系统返回的上下文不一致时,利用ChatGPT生成与上下文相匹配的新答案,以增强检索的相关性和准确性。

使用控制标记来引导生成过程,使模型能够灵活地应对用户查询的各种可能路径,无论是重写、分解、消除歧义查询,还是直接终止搜索并生成回应。

简介

本文提出了学习精化查询以用于检索增强生成(RQ-RAG)。以端到端的方式训练7B Llama2模型,使其能够通过重写、分解和澄清歧义来动态细化搜索查询。利用ChatGPT3使用不同的提示模板来定制跨各种场景(重写、分解、消除歧义)的搜索查询,而不是依赖于原始查询。此外,针对数据集的初始输出与信息检索系统返回的上下文不匹配的情况,使用ChatGPT来生成新的、上下文一致的答案,从而提高信息检索过程的相关性和准确性。与先前研究的方法(Lu等人,2022;Keskar等人,2019年;Asai等人,2024)相呼应,使用控制令牌-也称为特殊令牌-来指导模型的生成过程。通过应用多个控制令牌,模型可以在不同的轨迹中导航,以响应用户的查询。在任何给定的步骤中,它都可以灵活地重写、分解、消除查询歧义,或者终止搜索过程并继续生成响应。并提出了三种基于困惑的选择(PPL)、置信度和集合方法来确定最优轨迹作为最终答案。

主要贡献

1、证明了在经过训练的7B Llama2模型在三个单跳QA任务上的表现优于以前的最先进方法(Asai等人,2024),并且在三个多跳QA任务上也表现出了优越的性能。

2、强调了在数据构建过程中基于搜索结果重新生成响应的有效性,超越了简单地使用原始数据集输出。事实证明,这种方法比以前的工作(Luo等人,2023;Asai等人,2024)更有效,强调了基于上下文的答案生成的价值。

3、展示了我们的框架的巨大潜力,说明了它相当高的上界,以及与以前的方法相比,它对不同数据源的弹性。



七种query

  • 单跳问答(Single-Hop QA):

    • 这类问题通常只需要从单个信息源获取信息即可回答。

    • 例如:"Where was Rey Ramsey educated at? Rutgers University"(Rey Ramsey在哪里接受教育?罗格斯大学)

  • 多跳问答(Multi-Hop QA):

    • 多跳问题需要从多个信息源或多个步骤获取信息才能回答。

    • 例如:"What kind of university is the school where Rey Ramsey was educated an instance of?"(Rey Ramsey所受教育的学校是哪种类型的大学的实例?)这个问题需要先知道Rey Ramsey在哪个大学接受教育,然后确定该大学属于哪种类型。

  • 需要分解的查询(Query Needed Decomposed):

    • 复杂的问题需要分解成更简单、可管理的子问题来分别回答。

    • 例如:一个多跳问题可能需要先找到某个事件的时间,然后再找到与该事件相关的另一个事实。

  • 需要消歧的查询(Query Needed Disambiguated):

    • 当问题有多种可能的解释时,需要澄清以确保只有一个清晰的含义。

    • 例如:"Most total goals in a premier league season?"(英超赛季总进球数最多是多少?)这个问题可能指球队或球员的进球数,需要明确是询问球队还是球员的记录。

  • 模糊或不清晰的查询(Ambiguous or Unclear Queries):

    • 用户的查询可能不清晰或缺乏具体细节,需要识别用户的意图并重写查询,使其更清晰、更精确。

  • 非信息性回复(Non-Informational Replies):

    • 有些用户的回复或表达不需要信息检索,如"thank you"或"okay",在这种情况下,不需要进行搜索查询。

  • 先前已回答的查询(Previously Answered Queries):

    • 如果当前查询或类似的问题已经在对话历史中被问过并回答了,就不需要重复搜索。



数据构建

给定原始数据集的一个输入-输出对(XOrigin,YOrigin),主要目标是构造一个包含特殊标记的操作序列。这些特殊令牌指定精化SPECIALtype的类型,后面接着“精化查询”,其中特殊令牌被表示为Qi,type,其中‘type’指的是精化操作(重写、分解或消除歧义),而‘i’指的是迭代的轮次。随后,检索前k个文档,表示为[Di1,Di2,.。。,Dik].在最后的迭代步骤中,根据上面表示为Ynew的上下文生成一个新的答案。

收集一个涵盖广泛情景的语料库是至关重要的。因此,在该工作中数据收集侧重于包括多轮对话、需要分解的查询和需要消除歧义的查询的场景。

在组装了这些代表性任务之后,建立了一个任务池,并继续进行上述的转换过程。理想情况下,执行此转换需要人工努力来改进查询、搜索相关信息和注释改进的响应。虽然这种手动方法确保了质量,但它显然是资源密集型的、耗时的和具有挑战性的复制。为了缓解这些限制,我们使用了ChatGPT的高级功能来自动化注释过程。

1.首先将收集的池中的任务分类到前面提到的三个类别中。这一步很简单,因为每个数据集对应一个特定的数据类型。

2.对于每种数据集类型,首先使用ChatGPT和预定义的提示模板来生成精化查询。然后,使用该查询从外部数据源搜索信息。在大多数情况下,主要使用DuckDuckGo,并将检索过程视为一个黑盒。

3.之后,提示ChatGPT根据精化的查询及其对应的上下文生成续订响应。通过重复这个过程,总共积累了大约40K个实例。



生成器训练

在对训练语料库进行标注后,可以使用它以标准的自回归方式训练LLM,目标如:

其中L代表的是试图最大化的可能性。M表示模型参数。期望E(x,y)∼D在我们的数据集D上取平均值。pM(y|q1, d1, . . . , qi, di, x)是模型M在给定输入x和在步骤i利用检索到的文档di精化查询qi而生成响应y的概率。



抽样策略

在每个时间步,模型可以选择重写、分解或消除给定查询的歧义,也可以选择直接生成响应。鉴于这一内在本质,针对不同的查询求精方法,设计了一种树解码策略。然而,使用不同的查询进行搜索会产生不同的检索上下文,从而导致不同的最终答案。也就是说,如何在这些轨迹中采样最合适的路径是关键部分。因此,提出了三种不同的抽样策略。

使用PM来表示带有参数M的语言模型,并且[R1,R2,... ,Rn]表示n个轨迹,其中每个轨迹包含表示为[X,Y]的序列列表。这里,X是输入提示,Y是Z1,... , Zi(每个Zi是查询和检索的上下文的组合)和最终答案Y最终。

  • PPL Based Selection: 选择在总生成输出上具有最低困惑(PPL)的轨迹Rfinal,即

其中,PPL(R) =

这里L是模型输出的总长度

  • Confidence Based Selection:选择对最终答案Y最终具有最高置信度的轨迹R最终(将其与评估总生成输出的基于PPL的选择区分开来),即

其中t从l开始,这是最终答案Yfinal 的起点位置

  • Ensemble Based Selection:通过选择具有最高累积置信度分数的最终结果来整合最终结果,即

如果任何一个轨迹通向正确的答案,那么认为它是正确的。

该策略通过特殊令牌控制扩展路径,迭代地生成和检索查询:一个生成→检索→生成→检索→...→应答。在每次迭代中,该模型都会根据特定需求对不同的搜索查询进行解码--无论是重写、分解还是消除歧义。这些查询反过来获取不同的上下文,从而导致不同的扩展路径。因此,在预定的探测宽度和深度内,RQ-rag方法有助于产生多个轨迹。鉴于这种多样性,采用一种准确采样最佳轨迹的方法变得势在必行。



Evaluation Tasks

  • Single-Hop QA 包括 Arc-Challenge (Clark et al., 2018), PopQA (Mallen et al., 2022) and OpenbookQA (Mihaylov et al., 2018).

  • Multi-Hop QA 包括 HotpotQA (Yang et al., 2018), 2WikiMultiHopQA (Ho et al., 2020) and Musique (Trivedi et al., 2022).



Baselines

两种设置:

  • 无检索基线,在不使用从外部数据库检索的上下文的情况下回答问题;

  • 检索基线,它首先从外部来源检索相关上下文,然后根据这些上下文进行回答。

在这两种设置中,比较包括zero-shot的Llama2-7B和Llama2-7B-Chat(Touvron等人,2023),以及这些模型在特定于任务的数据集上的训练,此外,针对SAIL-7B(Luo等人,2023年)和先前建立的最先进的SELF-RAG-7B(Asai等人,2024年)进行了评估,涉及三个单跳QA数据集。对于多跳QA任务,我们的比较扩展到思想链chain of thought(魏等人,2022)和注释链chain of note(Yu等人,2023),使用ChatGPT和GPT-4作为底层语言模型。



实验结果

single-hop

RQ-RAG(在检索和非检索设置中的性能都显著优于各种基线模型。

具体地说,在检索设置下,RQ-RAG平均超过LLama2-7B(零点)33.5%,突显了LLMS在没有搜索增强指令调优的情况下处理检索到的上下文所面临的挑战。

此外,将RQ-RAG与两个稳健的基线进行了比较:1)在特定任务(ARC_C,OBQA)上监督的模型;2)在精选的数据集上监督的模型,但没有搜索增强的中间步骤。

我们的研究结果表明,与zero-shot方法相比,监督方法的性能显著提高,突显了它们的竞争优势。至关重要的是,RQ-RAG进一步超过了这些基线,证明了在培训期间整合搜索增强步骤的附加值。

此外,将RQ-RAG与之前建立的监督、搜索增强的方法,即SELF-RAG和SAIL进行了比较。值得注意的是,在三个QA任务中,RQ-rag方法平均比SAIL-7B高20.3%。

此外,即使只有大约4万个训练数据,RQ-rag方法在三个QA任务上也平均超过了以前最先进的方法(利用15万个监督训练数据的SELF-RAG)1.9%。

总体而言,RQ-RAG在所有评估的任务中表现出强劲的表现,牢固地确立了其相对于上述基线的优势。

multi-hop

与单跳QA场景中观察到的趋势类似的趋势。当RQ-RAG在特定数据集或精选数据集(没有搜索增强步骤)上进行训练时,其性能显著超过了zero-shot对应的RQ-RAG。

然而,这些基线并不赋予模型分解查询的能力,这在直接使用原始查询进行信息检索的多跳场景中是一项关键技能。相比之下,我们的管道使模型能够自动优化查询,在三个多跳QA数据集中产生了22.6%的平均改进。

此外,与使用ChatGPT作为回答问题的骨干模型的更健壮的基线相比,RQ-RAG的性能明显优于思想链和注释链方法。考虑到RQ-rag主干模型(7B Llama2)比ChatGPT小得多,这一成就尤其值得注意,这突显了RQ-RAG的非凡有效性。