[论文笔记]RankRAG: Unifying Context Ranking with Retrieval-Augmented Generation in LLMs

引言

今天介绍一篇大模型RAG微调的论文笔记——RankRAG: Unifying Context Ranking with Retrieval-Augmented Generation in LLMs

为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。

大语言模型(LLMs)通常在检索增强生成(RAG)中使用来自检索器的前k个上下文。在这项工作中,我们提出了一种新颖的指令微调框架RankRAG,该框架对单一LLM进行指令微调,以实现RAG中上下文排名答案生成的双重目的。

1. 总体介绍

当前的RAG流程存在以下局限性:

  1. 即使使用长上下文窗口,LLM在处理过多的上下文块(例如,前100个)时效果并不好,这不仅因为效率问题,还因为较短的前k列表(例如,5、10)通常能带来更高的生成准确性。
  2. 给定一个较小的k,需要一个机制来确保相关内容的高召回率。仅依赖检索模型可能不够充分,因为在整个嵌入空间中学习有效的局部对齐以支持准确匹配是一个挑战。实际上,一个单独的排名模型通过交叉编码问题和候选上下文,可能比基于密集嵌入的检索器更能有效地从前N个候选(N ≫ k)中获取最相关的前k个上下文。
  3. 然而,专家排名模型的零样本泛化能力相比于多功能的LLM可能相对有限。

基于上述考虑,我们的目标是设计一个RAG指令微调流程,使用单一语言模型实现高召回的上下文提取和高质量的内容生成。在以往的研究中,指令微调的LLM展示了从相关上下文中提取答案的强大能力。这种能力可以被视为确定上下文块是否与问题相关并因此有助于生成答案的“双重能力”。我们假设这些能力会相互增强。受到这一洞察的启发,我们提出了RankRAG,它在RAG框架中对单一LLM进行指令微调,以同时实现上下文排名和答案生成。此外,RankRAG通过整合丰富上下文的QA、检索增强QA和排名数据集,扩展了现有的指令微调数据,增强了LLM在RAG的检索和生成阶段过滤掉无关上下文的能力

贡献可以总结如下:

  • 提出了RankRAG,一个新颖的框架,通过同时对LLM进行上下文排名和答案生成的指令微调,增强了LLM的RAG能力。在训练过程中,我们设计了一个专注于识别给定问题的相关上下文或段落的任务。该任务被结构化为排名任务,并且以指令形式框定的常规问答,与检索增强生成任务更有效地对齐。在推理阶段,LLM首先重新排序检索到的上下文,然后根据精炼的前k(例如,5)生成答案。该框架可以广泛应用于各种知识密集型NLP任务。
  • 将少量排名数据融入LLM的指令微调混合中,在RAG任务的排名评估中表现出色,甚至超越了在10倍更多排名数据上进行微调的LLM。我们将这一成功归因于RankRAG训练的可迁移设计。
  • 将提出的RankRAG方法与几个强基线模型进行了广泛比较,包括开源的ChatQA-1.5。在同等规模下都超越了后者。

2. 相关工作

检索增强生成(RAG)已被确立用于知识密集型自然语言处理任务。在标准过程中,独立的基于密集嵌入的检索器首先从外部语料库中检索相关信息,然后LLM利用这些信息进行生成。为了改进这一流程,近期的研究集中在将检索器与LLM的生成需求对齐、设计多步骤检索过程,或过滤无关上下文。为了改进生成过程,一些研究设计了专门的指令微调方法,以增强LLM的搜索和RAG能力。

尽管已经引入了强大的检索器,一种潜在的改进检索器的方法是与LLM一起以端到端的方式进行优化。然而,这需要替代损失函数来进行优化,并使训练流程复杂化,尤其是当嵌入模型(即检索器)需要频繁重新索引时。

排名作为提升信息检索质量的中间步骤,已被应用于RAG流程以提高生成质量。然而,这些方法仍依赖于额外的中等规模模型进行排名,这往往不足以捕捉查询与上下文之间的相关性,并且可能缺乏零样本泛化能力。尽管近期研究展示了LLM在排名任务中的强大能力,如何将这一能力应用于RAG流程仍未得到充分探索。

image-20240910161510788

3. 预备知识

3.1 问题设置

在检索增强生成中,提供了一组文档或上下文来提供基础知识。给定一个问题 q q q,检索器 R \mathcal R R首先检索出与问题最相关的前 k k k 个上下文 C = { c 1 , ⋯   , c k } \mathcal C = \{c_1, \cdots, c_k\} C={c1,,ck}。随后,语言模型生成最终答案,该答案可以是一个简短的短语或一个长句子,具体取决于目标任务的类型。

3.2 当前RAG流程的局限性

首先指出当前检索-生成流程中的几个局限性。

检索器的能力有限。当前的RAG系统通常使用稀疏检索(例如BM25)或中等规模(例如基于BERT的)嵌入模型作为检索器 R \mathcal R R,主要是出于效率考虑,因为通常需要索引数百万甚至更多的文档。这些模型独立地对问题和文档进行编码,并使用向量相似性度量计算问题与文档之间的相似性。然而,嵌入模型的有限能力和对查询与文档的独立处理限制了对问题 q q q 和文档 d d d 之间文本相关性的估计,降低了其在新任务或新领域中的有效性

选择前 k k k 个上下文的权衡。尽管最先进的长上下文LLM可以将许多检索到的上下文作为生成答案的输入,但在实际应用中,随着 k k k 的增加,性能很快会达到饱和。例如,对于长文档问答任务,最优的上下文块数 k k k 大约为10。如图1所示,我们在ChatQA-1.5上进行了评估,发现当 k = 10 k = 10 k=10 时准确率趋于饱和。一般而言,较小的 k k k 通常无法捕捉所有相关信息,从而降低了召回率,考虑到检索器的表达能力有限。相比之下,较大的 k k k 可以提高召回率,但代价是引入无关内容,这会妨碍LLM生成准确答案的能力。

4. RankRAG

Refer to caption

图2:RankRAG的两阶段指令微调框架

为了应对前面提到的局限性,我们提出了RankRAG方法,以增强LLM在检索增强生成中的能力。具体而言,我们对LLM进行指令微调,使其能够同时捕捉问题与上下文之间的相关性,并利用检索到的上下文生成答案。

4.1 阶段一:监督微调(SFT)

通用的指令微调或监督微调(SFT)通常显著提高LLM遵循指令的能力,从而改善各种下游任务的零样本结果。因此,我们参考现有工作([Chung 等](Scaling Instruction-Finetuned Language Models);Wang 等Liu 等),首先利用SFT对高质量指令跟随数据集进行微调,包括:i)私有的众包对话数据集和公共对话数据集:OpenAssistant、Dolly;ii)需要详细答案的长文本问答数据集ELI5;iii)LLM生成的指令:Self-Instruct和Unnatural Instructions;iv)FLAN和思维链数据集。

共有128K SFT示例。确保SFT数据与评估任务的数据之间没有重叠。对于指令跟随数据集中的每个样本,采用多轮对话格式,使用用户和助手之间的先前对话轮次作为上下文,仅在助手的最后一个回应上计算损失

4.2 阶段二:统一的排名与生成指令微调

阶段一的SFT赋予了LLM基本的指令跟随能力;然而,它们在RAG任务上的表现往往仍然不尽如人意,因为LLM并未针对从检索到的上下文中提取答案进行优化。尽管近期的研究通过在丰富上下文的生成任务上进行指令微调来增强LLM的RAG能力,但这些方法在初始检索结果较差时仍可能效果不佳。RankRAG通过对LLM进行检索增强生成和上下文排名的指令微调,来解决这一问题。特别是,上下文排名能力对于从不完善的检索器中获取更相关的前 k个上下文至关重要。

为实现这一目标,阶段二的指令微调数据包括以下五部分:

  1. 阶段一的SFT数据。这一部分包括在内以保持LLM的指令跟随能力。

  2. 上下文丰富的QA数据。首先参考Liu 等利用多个上下文丰富的QA任务来增强LLM利用上下文进行生成的能力。我们使用的训练数据包括:i)标准的QA和阅读理解数据集:DROP、NarrativeQA、Quoref、ROPES、NewsQA、TAT-QA,这些数据集包含一个问题、一个黄金上下文(golden context)和一个答案;ii)对话QA数据集:HumanAnnotatedConvQA和SyntheticConvQA,包含用户和助手之间的对话以及一个背景文档。模型需要根据对话历史和文档生成答案。

  3. 检索增强QA数据。除了使用QA数据集外,我们还添加了两个数据集,这些数据集不仅包括黄金上下文,还包括使用BM25检索到的top文档。注意,提高LLM对无关上下文的鲁棒性在生成过程中至关重要。为此,我们考虑了两个QA任务,即SQuAD和WebQuestions。对于每个带答案的问题,我们将黄金上下文与使用BM25检索到的top文档结合,确保总共有五个上下文。注意,有些检索到的上下文可能不包含答案,可能是"困难的负样本"上下文。

  4. 上下文排名数据。为了赋予LLM排名能力,使用了流行的MS MARCO段落(上下文)排名数据集。将黄金查询-段落对 ( q , c + ) (q,c^+) (q,c+)视为相关的,同时将通过BM25挖掘的困难负样本段落 ( q , c − ) (q,c^-) (q,c)​视为无关对。LLM需要生成TrueFalse来判断相应的查询-段落对,其中问题以及任务特定的指令是For the question {question}, access whether the passage is relevant to the question.(对于问题{question},判断该段落是否与问题相关。) 我们希望在对话场景中也处理排名问题。虽然MS MARCO覆盖了各种主题,但这些问题仅为单轮短句。然而,对于对话问答来说,排名数据的数量通常很少。为了解决这一限制,我们将对话问答对重新利用,以生成伪相关对。由于每个对话只与一个文档 d d d 关联,我们将每个文档分割成150字的块( c 1 , c 2 , … , c n c_1, c_2, \ldots, c_n c1,c2,,cn)。我们计算每个块 c i c_i ci 与真实答案 a a a 之间的4-gram召回得分,认为召回得分高于0.5的段落为相关的,低于0.1的段落为不相关的。每个样本包含一个问题-上下文对用于这个排名数据集。我们从MS MARCO排名和合成对话中获得了大约50k个排名对用于指令微调。

  5. 检索增强排名数据。我们旨在训练LLM,使其能够同时确定多个上下文的相关性,这与RAG在测试时处理前 k k k 个上下文的行为更为接近。与之前一样,我们利用两个QA数据集:SQuAD和WebQuestions。我们将黄金上下文与使用BM25检索到的前文档结合,确保总共有五个上下文。包含答案的上下文被认为是相关的,LLM被训练以明确识别所有相关的上下文。

通过指令微调统一RAG和排名。值得注意的是,尽管描述了各种数据集和任务,但它们都可以转换为标准化的QA格式( x , c , y x, c, y x,c,y),其中 x x x 是问题, c c c 是相应的上下文, y y y 是目标输出答案。例如,对于检索增强排名数据,问题是For the question , find all the passages from the context that are relevant to the question(对于问题 ,找出所有与问题相关的上下文段落)。表1展示了如何将不同任务转换为统一格式。尽管这种方法很简单,但它具有以下优点:

  • 通过添加相对较少的排名数据,赋予LLM排名能力;
  • 通过将这些任务标准化为统一格式,它们可以相互增强。

之后,我们获得了最终的RankRAG模型,该模型可以应用于各种知识密集型NLP任务。

image-20240910164556908

4.3 RankRAG推理:检索-重排序-生成流水线

由于RankRAG包含了额外的重排序步骤,因此每个问题的推理流程被修改为检索-重排序-生成流水线:

  1. 检索器 R \mathcal R R 首先从语料库中检索出前 N N N 个上下文。
  2. RankRAG模型计算问题与检索到的 N N N 个上下文之间的相关性得分,将其作为使用表1中的提示生成答案为True的概率,然后对上下文进行重排序,仅保留前 k k k ( k ≪ N k \ll N kN)个上下文,这些上下文将作为生成步骤的输入。
  3. 将前 k k k 个上下文与问题连接,并反馈到RankRAG模型中,以生成最终答案。

效率讨论。我们知道,增加重排序步骤会引入额外的处理时间。在实际应用中,对于每个问题,假设索引和检索的时间为 t 1 t_1 t1,使用LLM计算相关性得分的时间为 t 2 t_2 t2,生成的时间为 t 3 t_3 t3,则增加的时间开销比率为 N ⋅ t 2 t 1 + t 3 \frac{N \cdot t_2}{t_1 + t_3} t1+t3Nt2。在实际操作中,计算相关性通常只需要生成一个token,涉及的输入比处理前 k k k 个上下文的生成步骤要短得多。

5. 实验

5.1 实验设置

任务和数据集。我们在实验中考虑了三种类型的任务:

  1. 开放域问答(OpenQA),包括NQ、TriviaQA、PopQA、HotpotQA和2WikimQA。前三个是单跳问答任务,而最后两个是多跳问答数据集。
  2. 事实验证,使用来自KILT基准的FEVER。
  3. 对话问答(ConvQA),考虑了三个数据集,包括Doc2Dial、TopiOCQA和INSCIT,这些数据集包含无法直接适配到LLM中的长文档,因此需要检索和排名。

基线。考虑以下基线:

  1. 无RAG的基线LLMs,考虑了使用专有数据训练的LLM,包括InstructGPT、PaLM 2、FLAN-LaMDA(、GLaM、Claude 2、Mixtral-8x22B-Instruct、DeepSeek-V2 Chat。还考虑了两个ChatGPT系列模型,即GPT-3.5-turbo(gpt-3.5-turbo-0613)和GPT-4(gpt-4-0613)。

  2. 带有检索的基线,评估了增强了检索的模型。具体而言,包括了基于编码器-解码器LM的RAG模型,如Atlas和Raven。对于仅解码器模型,考虑了Self-RAG、RECOMP、InstructRetro、RePlug、RA-DIT、Llama-3-instruct和ChatQA-1.5。还列出了使用InstructGPT(175B参数)作为主干的RAG流水线的结果,包括GenRead、Retrieve-read和ReFeed,主要用于参考。

评价指标。对于OpenQA数据集,主要使用准确匹配(EM)作为指标,但也报告TriviaQA和PopQA的准确率以及HotpotQA和2WikimQA的F1分数,因为这些数据集在一些研究中也使用了这些指标。对于FEVER,使用准确率作为指标。对于ConvQA数据集,使用F1分数作为指标。

实现细节。在主要实验中使用Llama3 8B和70B作为主干(backbone)。对于两阶段的指令微调,将批量大小设置为128,并在阶段I中训练模型1000步,学习率为5e-6。然后,我们将学习率降低到8B模型的3e-7和70B模型的2e-7,将批量大小设置为64,并训练模型3300步(约1个epoch)。使用Adam优化器,其中 β 1 = 0.9 β_1 = 0.9 β1=0.9 β 2 = 0.98 β_2 = 0.98 β2=0.98

在推理阶段,使用2018年12月的Wikidump作为NQ、TQA、HotpotQA、2WikimQA的语料库索引,对于PopQA使用2020年12月的Wikidump。默认情况下,使用Dragon检索器作为默认设置,并检索前N(8B模型为100,70B模型为30)个文档进行排名,但RankRAG可以适配各种检索器和不同的N。为确保公平比较,测试了 k ∈ { 5 , 10 , 20 } k \in \{5, 10, 20\} k{5,10,20}的性能,并报告基线的最佳性能。对于生成,我们保持温度 T = 0 T = 0 T=0​ 并将最大生成token数量设置为OpenQA的32,ConvQA的128以及其他任务的8。训练RankRAG-8B使用32个NVIDIA A100 GPU进行10小时(阶段I为4小时,阶段II微调为6小时),而训练RankRAG-70B使用128个NVIDIA A100 GPU进行16小时(阶段I为4小时,阶段II微调为12小时)。

数据污染问题。0-shot评估中的一个可能问题是测试集污染,即某些任务特定的示例与指令微调数据重叠。为解决这一问题,我们进行了基于字符串匹配的分析,未发现训练数据与目标任务数据之间的重叠。

5.2 主要实验

image-20240910165612595

表2:RankRAG及基线模型在9个数据集上的结果。除非另有说明,否则所有结果均在零-shot评估下进行,没有额外演示。未在公开报告中提供的结果标记为“–”。使用KILT基准中的NQ、TriviaQA和HotpotQA数据集进行Llama3-Instruct、Llama3-ChatQA-1.5和Llama3-RankRAG的测试。注意†:GPT-4和GPT-4-turbo可能会在检索到的段落不包含相关信息时拒绝回答问题,因此在TriviaQA、HotpotQA和2WikimQA中加入RAG后,EM / 准确率有所下降。

表2展示了RankRAG和基线模型的结果。结果总结如下:

  • RankRAG优于现有的RAG方法。在8B规模下,RankRAG始终超越了ChatQA-1.5 8B。RankRAG 8B与参数更多的基线模型相比也表现竞争力。例如,它显著优于InstructRetro(参数数量为5倍)、RA-DIT 65B(参数数量为8倍),甚至在NQ和TriviaQA任务上超越了Llama3-instruct 70B(参数数量为8倍)。在更多参数的情况下,RankRAG 70B超越了强大的ChatQA-1.5 70B模型,并大幅度超越了之前以InstructGPT作为基础LLM的RAG基线模型。

  • RankRAG在更具挑战性的数据集上表现出更大的改进。RankRAG在基线模型上的性能提升在更具挑战性的QA数据集上更为显著。例如,在长尾QA(PopQA)和多跳QA(2WikimQA)任务中,我们相比于ChatQA-1.5取得了超过10%的改进。这些发现表明,在那些检索器提供的顶部文档与答案相关性较低的挑战性OpenQA数据集中,上下文排名显著提升了性能。在这项工作中,我们专注于提高单轮检索在QA任务中的效果。

5.3 消融研究

image-20240910165813862

设计组件的效果。表3展示了以Llama3 8B为主干的RankRAG在九个通用领域数据集上的消融实验。总体而言,所有提出的组件都对最终性能做出了贡献。去除上下文排名会降低所有任务的性能,证明了它在选择最相关上下文方面的有效性。此外,为指令微调设计的检索增强QA(RQA)和检索增强排名(RAR)在大多数任务上提升了结果,帮助模型明确找到相关上下文。相反,RAFT方法在指令微调过程中将每个检索到的上下文分开处理,与RankRAG相比,即使使用相同的训练数据,其效果较差。

image-20240910170032988

不同LLM的性能。表4报告了使用Llama2作为基础的RankRAG和最新基线模型ChatQA在不同参数量的变体上的性能。值得注意的是,RankRAG在不同LLM类型和规模上表现出一致的性能提升,这证明了RankRAG的优势。

image-20240910170057284

不同检索器的性能。图3展示了RankRAG和ChatQA-1.5在三个代表性任务上使用不同密集检索器的性能。尽管初始检索结果不够理想,RankRAG仍然在两个检索器上平均超越了ChatQA-1.5超过10%。总结来说,RankRAG对检索器的选择具有鲁棒性。

5.4 领域特定RAG基准实验

image-20240910170157852

为了展示RankRAG如何适应专业领域,在Mirage上进行实验,这是一个新近引入的生物医学领域RAG基准。使用MedCPT作为检索器 R \mathcal R R,并以MedCorp3作为语料库 D \mathcal D D​。RankRAG和基线模型的实验结果见表5。从表中可以观察到,即使在未针对生物医学领域进行微调的情况下,RankRAG在医学QA任务中表现出色。这些结果证明了RankRAG可以在不进行额外后续训练的情况下,快速应用于新领域。

5.5 更详细地分析排名模块

由于上下文排名是RankRAG中的核心步骤,对这一组件进行更深入的分析。所有研究均使用Llama3-8B作为基础模型。

image-20240910170417537

RankRAG是数据高效的。以往将上下文排名融入RAG管道的方法通常涉及一个单独的重排序模型。为了将我们的模型与这些基线进行比较,我们评估了四种模型,BERT / T5 / Llama3 ,对全MS MARCO段落排名数据集进行微调,以及一个强大的现成重排序模型BGE-ranker和两个OpenAI GPT系列模型。对于GPT系列模型,我们使用True的令牌概率作为相关性得分的代理。这些模型随后被用来对Dragon检索出的顶部段落进行重新排序,类似于我们的方法。令人惊讶的是,如表6所示,RankRAG在大多数情况下比在10倍更多排名数据上训练的专用排名模型具有更好的召回率。此外,RankRAG仍然可以在大多数任务中超越BGE-ranker,尽管BGE-ranker已经在超过100万个排名对上进行了广泛的训练,其中一些数据与我们的评估任务重叠。这一优势可能归因于我们模型训练的适应性,其中排名数据与一般RAG微调数据非常相似。直接使用ChatQA-1.5对段落进行排名会降低性能,表明将排名数据融入指令微调中的必要性。

image-20240910170457028

我们进一步研究了上下文排名数据数量与最终性能之间的关系。如图4所示,仅使用5000个排名数据(约为MS MARCO数据集的1%),RankRAG已能获得非常有说服力的结果,而将排名数据增加到50000个则带来了非微小的(显著的)收益。这一发现证实了RankRAG的数据效率——通过适量的排名数据实现有效性能,并在各种任务中保持适应性。

image-20240910170705098

RankRAG的 性能 v.s. 时间效率。模型规模扩大带来的一个特定问题是延迟开销的增加——这需要逐样本排名,从而产生额外的时间开销。为了研究时间效率与性能之间的关系,我们改变了重新排序中使用的N,并在图5中绘制了N与最终准确率的关系图。我们观察到,即使N = 20,RankRAG仍能提高没有重排序的基线模型的性能。虽然在N = 20到100的范围内进行重排序将精确匹配得分提高了5.9%到9.1%,但时间增加仅为0.9倍到6.0倍——显著低于可能预期的20倍到100倍的增加。

5.6 案例研究

image-20240910170823289

表 7 展示了在 NQ 数据集上的案例研究。我们观察到,仅使用检索器会产生噪声较大的上下文,因为存在多个干扰项,并且一些上下文(例如 ChatQA-1.5 的 Passage 4/5)并无帮助。然而,利用重新排序可以发现两个额外的相关段落,帮助模型提供正确的答案。

6 结论

在这项工作中,我们介绍了一种新的 RAG 框架——RankRAG,该框架通过指令微调单一 LLM 来实现排名和答案生成。通过仅将少量的排名数据添加到训练数据中,经过指令调整的 LLM 可以超越现有的专业排名模型。

A 数据集描述

B 数据混合细节用于排名增强的指令微调

Stage-II 的数据集混合比例如下:

  • narrativeqa: 0.09
  • quoref: 0.026
  • ropes: 0.026
  • Squad(检索增强的 QA):0.09
  • Squad(检索增强的排名):0.02
  • WebQuestions(检索增强的 QA):0.09
  • WebQuestions(检索增强的排名):0.02
  • newsqa: 0.09
  • tatqa-arithmetic: 0.15
  • tatqa-others: 0.08
  • ConvQA: 0.2
  • MS MARCO 排名: 0.15
  • ConvQA 排名: 0.03
  • SFT: 0.2

每个数据集的比例经过进一步归一化,以确保总比例等于 1。

C 指令微调的提示词格式

C.1 阶段 I:监督微调

在阶段I中LLM输入的格式模板如下:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
User: {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

C.2 阶段II:排名和生成的统一指令微调

在阶段II中LLM输入的格式模板如下:

1)上下文丰富的QA数据

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage: {(Gold) Passage containing relevant context for QA}
User: {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

为不同的数据集类型定制了特定的用户指令。例如:

对于需要简短回答的数据集(如 DROP、NarrativeQA、Quoref、ROPES、SQuAD1.1、SQuAD2.0、NewsQA),使用的指令是:Answer the following question with a short span.

对于需要长回答的数据集(如 Synthetic_ConvQA),我们指示:Please give a full and complete answer for the question.

对于涉及从上下文中提取数字或进行算术计算的数据集(如 TATQA),我们指定:Answer the following question with a number from the context or through math arithmetic.

对于可能需要短回答或长回答的数据集(如 TAT-QA-Others),我们指示:Answer the following question with a short span, or a full and complete answer.

2)检索增强QA数据

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage 1: {(Shuffled) Passage 1}
Passage 2: {(Shuffled) Passage 2}
Passage 3: {(Shuffled) Passage 3}
Passage 4: {(Shuffled) Passage 4}
Passage 5: {(Shuffled) Passage 5}
...
User: {Question}
Assistant:

3)上下文排名数据

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage: {Passage 1}
User: {For the question <question>, access whether the passage is relevant to the
question. Return True if relevant, otherwise False. }
Assistant:

4)减少增强排名数据

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be 
found in the context.
Passage 1: {(Shuffled) Passage 1}
Passage 2: {(Shuffled) Passage 2}
Passage 3: {(Shuffled) Passage 3}
Passage 4: {(Shuffled) Passage 4}
Passage 5: {(Shuffled) Passage 5}
User: {For the question <question>, access whether the above passages are relevant
to the question. Return all the relevant passage id. }
Assistant:

D 目标任务的提示模板

D.1 上下文排名

NQ/TriviaQA/HotpotQA/PopQA:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage: {Passage}
User: {For the question <question>, access whether the passage is relevant to the
question. Return True if relevant, otherwise False. }
Assistant:

FEVER:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage: {Passage}
User: {For the claim <claim>, access whether the passage is relevant to the
claim. Return True if relevant, otherwise False. }
Assistant:

Doc2dial, Inscit, TopiocQA:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage: {Passage}
User: {Question 1}
Assistant: {Answer 1}
...
User: {For the question <latest question>, access whether the passage is relevant
to the question. Return True if relevant, otherwise False. }
Assistant:

D.2 RAG

NQ/TriviaQA/HotpotQA/PopQA:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage 1: {Rerank Top Passage 1}
Passage 2: {Rerank Top Passage 2}
Passage 3: {Rerank Top Passage 3}
Passage 4: {Rerank Top Passage 4}
Passage 5: {Rerank Top Passage 5}
...
User: {Question}. Answer the above question with a short phrase.
Assistant:

Fever:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage 1: {Rerank Top Passage 1}
Passage 2: {Rerank Top Passage 2}
Passage 3: {Rerank Top Passage 3}
Passage 4: {Rerank Top Passage 4}
Passage 5: {Rerank Top Passage 5}
...
User: Answer the following question with True or False. Is the claim ’<claim>’ correct?
Assistant:

Doc2dial, Inscit, TopiOCQA:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
Passage 1: {Rerank Top Passage 1}
Passage 2: {Rerank Top Passage 2}
Passage 3: {Rerank Top Passage 3}
Passage 4: {Rerank Top Passage 4}
Passage 5: {Rerank Top Passage 5}
User: {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

E 额外的实验结果

E.1 使用 DPR 和 Contriever 作为检索器的排名性能

image-20240910172351246

表8展示了 RankRAG-8B 在三个数据集上使用 DPR和 Contriever的排名性能。所有任务的性能都表现出一致的提升,这表明 RankRAG 可以应用于许多流行的检索模型,以提高检索内容的质量。

E.2 不同 k 值下的 RAG 性能

image-20240910172425041

还展示了 RankRAG 在不同上下文大小 k 下的性能,见图6。从结果中我们观察到,与传统的 RAG 方法(无排名)趋势不同,k = 5 对大多数数据集已表现良好。这种效果源于重排序步骤,该步骤将最相关的上下文优先排在前面,从而减少了包括额外上下文的必要性。

F NQ 和 TriviaQA 在 DPR 数据集划分上的性能

image-20240910172600162

G 额外的案例研究

image-20240910172649568

表10和表11提供了来自 PopQA 和 HotpotQA 数据集的额外示例,这些数据集关注于长尾问题和多跳 QA。这些任务对于检索器尤其具有挑战性,使得从语料库中获取相关上下文变得困难。因此,ChatQA-1.5 经常难以生成正确的答案。然而,RankRAG 中的重排序步骤有助于通过找到更相关的证据来抵消初始检索的不足。结合 RAG 导向的微调,RankRAG 能有效地过滤掉干扰信息,并精准地确定正确答案。

image-20240910172713931

总结

⭐ 作者提出了一种新的两阶段指令微调框架RankRAG,该框架对LLM进行指令微调,以实现RAG中上下文排名和答案生成的双重目的。阶段一利用SFT对高质量指令跟随数据集进行微调,阶段二对LLM进行检索增强生成和上下文排名的指令微调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愤怒的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值