复旦大学AI团队:检索增强生成最佳实践搜索

摘要

检索增强生成(RAG)技术已被证明在整合最新信息、减轻幻觉并增强响应质量方面非常有效,特别是在专业领域。尽管许多RAG方法已被提出以通过查询相关的检索增强大型语言模型,但这些方法仍然受到复杂的实施和长时间响应的困扰。通常,RAG工作流涉及多个处理步骤,每个步骤可以以不同方式执行。在这里,我们调查现有的RAG方法及其潜在的组合,以确定最佳的RAG实践。通过大量实验,我们建议几种部署RAG的策略,既能平衡性能又能提高效率。此外,我们展示了多模态检索技术可以显著增强有关视觉输入的问答能力,并通过“检索即生成”策略加快多模态内容的生成。资源可https://github.com/FudanDNN-NLP/RAG找到。

1简介

2相关工作

2.1查询和检索转换

2.2检索增强策略

2.3检索器和生成器的微调

3RAG 工作流程

3.1查询分类

3.2分块

3.3向量数据库

3.4检索方法

3.5重新排序方法

3.6文档重装

3.7总结

3.8生成微调

4寻找最佳的RAG实践

4.1综合评价

4.2结果与分析

5讨论

5.1实施RAG的最佳实践

5.2多模态扩展

6结论

7限制条件

8致谢

9参考文献

A实验细节

A.1查询分类

A.2检索方法的实验细节

A.3重排方法的实验细节

A.4摘要方法的实验细节

A.5生成器微调实验细节

A.6综合评估的实验细节

1 简介

生成式大型语言模型很容易产生过时信息或捏造事实,尽管它们通过强化学习[1]或轻量级替代方案[2-5]与人类偏好保持一致。检索增强生成(RAG)技术通过结合预训练和基于检索的模型的优势来解决这些问题,从而提供了一个强大的框架来增强模型性能[6]。此外,RAG使得能够快速部署特定组织和领域的应用程序,无需更新模型参数,只需提供与查询相关的文档。

许多RAG方法已被提出,通过查询相关的检索来增强大型语言模型(LLMs)[6–8]。典型的RAG工作流通常包含多个介入处理步骤:查询分类(确定是否对给定的输入查询进行检索)、检索(高效获取与查询相关的文档)、重新排序(根据其与查询相关性对检索文档的顺序进行细化)、重装(将检索的文档组织成一个结构化的文档以进行更好的生成)、总结(从重新打包的文档中提取用于生成响应的关键信息并消除冗余)模块。实施RAG还需要决定如何将文档正确地分割成块、用于语义表示这些块的嵌入类型、选择…

预印本。正在审阅中。

图1:检索增强生成工作流程。本研究探讨了每个组件的贡献,并通过广泛实验为最佳RAG实践提供了见解。对每个组件考虑的可选方法以粗体字表示,而下划线表示个别模块的默认选择。以蓝色字体表示的方法经实践确定为表现最佳的选择。

使用向量数据库来高效存储特征表示,并有效地微调LLMs的方法(见图1)。

在实施每个处理步骤时,增加复杂性和挑战的是可变性。例如,在为输入查询检索相关文档时,可以采用各种方法。一种方法涉及首先重写查询,然后使用重写的查询进行检索[9]。另一种选择是首先生成对查询的伪响应,然后比较这些伪响应与后端文档之间的相似性以进行检索[10]。另一个选项是直接使用嵌入模型,通常使用正负查询-响应对进行对比训练[11, 12]。对于每个步骤选择的技术及其组合会显著影响RAG系统的有效性和效率。据我们所知,迄今为止尚未有系统性的努力追求RAG的最佳实现,特别是针对整个RAG工作流程。

本研究旨在通过广泛实验来确定最佳的RAG最佳实践。鉴于测试所有可能的这些方法组合是不可行的,我们采用三步方法来确定最佳的RAG实践。首先,我们比较每个RAG步骤(或模块)的代表性方法,并选择最佳表现的最多三种方法。接下来,我们通过逐个测试各个步骤的一种方法,同时保持其他RAG模块不变,评估每种方法对整体RAG性能的影响。这使我们能够根据在响应生成期间对其他模块的贡献和相互作用来确定每个步骤的最有效方法。一旦为模块选择了最佳方法,我们将在随后的实验中使用它。最后,我们根据这些发现,提出了一些适用于不同应用场景的有前途的组合,其中效率可能优先于性能,反之亦然。基于这些发现,我们建议几种部署RAG的策略,平衡性能和效率。

这项研究的贡献有三个方面:

  • 通过大量的实验,我们彻底调查了现有的 RAG 方法和它们的组合,以确定和推荐最佳的 RAG 实践。

  • 我们引入了一个评估指标和相应数据集的全面框架,以全面评估检索增强生成模型的性能,涵盖通用、专业(或领域特定)以及与RAG相关的能力。

  • 将多模式检索技术的整合展示出来,可以显著提高对视觉输入的问答能力,并通过“检索即生成”策略加快多模式内容的生成速度。

2 相关工作

2.1 查询和检索转换

有效的检索需要查询准确、清晰和详细。即使转换为嵌入式表示,查询与相关文档之间的语义差异仍可能持续存在。先前的研究已经探索了通过查询转换来增强查询信息,从而提高检索性能的方法。例如,Query2Doc [17] 和 HyDE [10] 从原始查询生成伪文档来增强检索,而 TOC [18] 将查询分解为子查询,对检索内容进行聚合以获得最终结果。

其他研究集中在转换检索源文件上。 LlamaIndex [19] 提供一个界面来为检索文档生成伪查询,从而改善与真实查询的匹配。 一些研究采用对比学习将查询和文档嵌入在语义空间中更接近[12, 20, 21]。 后处理检索文档是增强生成器输出的另一种方法,采用分层提示摘要[22]和使用抽象和提取式压缩器[23]等技术来减少上下文长度并去除冗余[24]。

2.2 检索增强策略

文档分块和嵌入方法显著影响检索性能。常见的分块策略将文档分成块,但确定最佳块长度可能具有挑战性。小块可能会破坏句子,而大块可能会包含无关的内容。LlamaIndex [19] 优化了分块方法,类似于Small2Big和滑动窗口。检索到的块可能是无关的,并且数量可能很多,因此需要重新排序以过滤无关的文档。常见的重新排序方法使用深度语言模型,如BERT [25],T5 [26] 或 LLaMA [27],这在重新排序过程中需要较慢的推断步骤,但能够获得更好的性能。TILDE [28, 29] 通过预计算和存储查询词项的可能性来实现效率,并根据它们的总和对文档进行排名。

2.3 检索器和生成器的微调

在RAG框架中进行微调对优化检索器和生成器至关重要。 一些研究侧重于微调生成器以更好地利用检索器的上下文[30-32],确保生成内容忠实且稳健。 其他人则微调检索器,使其学会检索生成器所需的有益段落[33-35]。整体方法将RAG视为一个集成系统,同时微调检索器和生成器,以增强整体性能[36-38],尽管会增加复杂性和整合难题。

几项调查已经广泛讨论了当前的RAG系统,涵盖了文本生成[7, 8]、与LLM集成[6, 39]、多模态[40]和人工智能生成内容[41]等方面。尽管这些调查提供了现有RAG方法论的全面概述,但选择适当的无需检索 需要检索 "生存还是毁灭,这是一个问题。

图2:不同任务的检索需求分类。在信息未提供的情况下,我们根据模型的功能来区分任务。

在实际实施中选择合适的算法仍然具有挑战性。本文着重介绍了应用RAG方法的最佳实践,推进对LLMs中RAG的理解和应用。

3 RAG 工作流程

在本节中,我们详细介绍了RAG工作流程的组成部分。对于每个模块,我们审查了常用的方法,并为我们的最终流程选择了默认和备选方法。第4节将讨论最佳实践。图1展示了每个模块的工作流程和方法。详细的实验设置,包括数据集、超参数和结果在附录A中提供。

3.1 查询分类

不是所有查询都需要通过检索增强来进行,这是因为LLMs具有固有的能力。虽然RAG可以提高信息准确性并减少幻觉,但频繁的检索可能会增加响应时间。因此,我们首先对查询进行分类,以确定是否需要检索。需要检索的查询将通过RAG模块进行处理;其他查询将直接由LLMs处理。

检索通常在需要超出模型参数的知识时进行推荐。然而,检索的必要性因任务而异。例如,一个在2023年培训的LLM可以处理一个关于“Sora是由OpenAI开发的”翻译请求而不需要检索。相反,在同一主题的介绍请求中则需要检索以提供相关信息。

因此,我们提议按类型对任务进行分类,以确定查询是否需要检索。我们对其进行分类。

根据是否提供足够的信息,对基于15个任务进行分类,具体的任务和示例如图2所示。对于完全基于用户提供信息的任务,我们表示为

“充分”,不需要检索;否则,我们将其表示为“不充分”,可能需要检索。我们训练一个分类器来自动化表1:查询分类器的结果。这个决策过程。实验细节见附录A.1。第4节探讨了查询分类对工作流程的影响,比较了有分类和无分类的情景。

表2:不同嵌入模型在namespace-Pt/msmarco上的结果。

3.2 分块

将文档分块成更小的段落对于提高检索精度并避免LLM中的长度问题至关重要。这个过程可以应用在不同的粒度级别,如标记、句子和语义级别。

Token-level Chunking是直观的,但可能会分割句子,影响检索质量。

1.语义级别的分块利用LLMs来确定断点,保持上下文但耗时。

句级分块在保留文本语义的同时平衡简洁和效率。

本研究采用句子级别的分块,平衡简洁性和语义保留。

3.2.1 块大小

分块大小显著影响性能。更大的块提供更多的上下文,增强理解能力,但增加处理时间。更小的块提高检索召回率,减少时间,但可能缺乏足够的上下文。

根据所选语料库生成大约170个查询。不同块大小的影响如表3所示。

3.2.2块技术

高级技术,如小到大和滑动窗口,通过组织块块关系来提高检索质量。使用小尺寸块来匹配查询,并返回包括小块和上下文信息的较大块。

为了展示高级分块技术的有效性,我们使用LLM-Embedder [20]模型作为嵌入模型。较小的分块大小为175个标记,较大的分块大小为512个标记,分块重叠为20个标记。像从小到大和滑动窗口这样的技术通过保持上下文和确保检索到相关信息来提高检索质量。详细结果见表4。

3.2.3嵌入模型选择

选择正确的嵌入模型对于有效地语义匹配查询和分块块至关重要。我们使用FlagEmbedding的评估模块,该模块使用数据集namespace-Pt/msmarco作为查询,以及数据集namespace-Pt/msmarco-corpus作为语料库,来选择适当的开源嵌入模型。如表2所示,LLM-Embedder [20]的结果与BAAI/bge-large-en [12]相当,但前者的尺寸是后者的三倍。因此,我们选择前者。

LLM-Embedder[20]在不同块技能的平衡方面做出了以下表4的比较。

3.2.4元数据添加

增强块块与标题、关键词和假设问题等元数据一起的内容可以改善检索功能,提供更多后续处理检索到的文本的方式,并帮助LLMs更好地理解检索到的信息。将在未来的工作中对元数据的包含进行详细研究。

3.3 向量数据库

向量数据库存储了带有元数据的嵌入向量,通过各种索引和近似最近邻方法实现对与查询相关的文档的高效检索。

Table 5:各种向量数据库的比较

表5展示了五种开源矢量数据库的详细比较:Weaviate,Faiss,Chroma,Qdrant和Milvus。

我们的评估表明,Milvus在所评估的数据库中脱颖而出,满足所有基本标准,并胜过其他开源选项。

表6:TREC DL19/20上不同检索方法的结果。每种方法的最佳结果以粗体显示,第二好的结果以下划线显示。

表7:使用不同连接方式的虚拟文档和查询的HyDE。

3.4 检索方法

  • 查询重写:查询重写用于优化查询以更好地匹配相关文档。受到Rewrite-Retrieve-Read框架的启发[9],我们提示一个LLM重新编写查询以提升性能。查询分解:这种方法涉及根据原始查询中产生的子问题检索文档,这种方法更加复杂,难以理解和处理。

  • 生成伪文件:这种方法是基于用户查询生成一个假设性的文件,并使用假设答案的嵌入来检索类似的文件。一个值得注意的实现是HyDE。

最近的研究,如文献[44]所示,表明将基于词汇的搜索与向量搜索相结合显著提高性能。在这项研究中,我们使用BM25进行稀疏检索,使用Contriever[45],一种无监督对比编码器,进行稠密检索,作为基于Thakur等人的两个强健基准。

3.4.1不同检索方法的结果

考虑到,Hybrid Search结合了稀疏检索(BM25)和密集检索(原始嵌入),在相对较低的延迟下取得了显着的性能。

3.4.2使用不同文档和查询连接的HyDE

表7显示了使用HyDE对假设文档和查询采用不同连接策略的影响。将多个伪文档与原始查询进行连接可以显着。

8_:具有不同_ alpha 值的混合搜索结果。

表9:不同重新排序方法在MS MARCO Passage排名数据集的dev集上的结果。对于每个查询,由BM25检索的前1000个候选段落进行重新排序。延迟以每个查询的秒数计算。

增强检索性能,尽管会增加延迟,表明检索效率和效果之间存在权衡。然而,不加选择地增加假设文档数量并不能带来显著的好处,反而会大幅增加延迟,表明使用单个假设文档就足够了。

3.4.3 使用不同权重进行稀疏检索的混合搜索

表8展示了在混合搜索中不同α值的影响,其中α控制稀疏检索和密集检索组件之间的加权。相关性分数计算如下:

Sh = α · Ss + Sd(1)

Ss,Sd分别为稀疏检索和密集检索的归一化相关性得分,Sh为总体检索得分。

我们评估了五个不同的 α 值,以确定它们对性能的影响。结果显示,α 值为 0.3 时表现最佳,表明适当调整 α 可以在一定程度上增强检索效果。因此,我们选择了 α = 0.3 用于我们的检索和主要实验。附录 A.2 中提供了额外的实现细节。

3.5 重新排序方法

在初始检索后,会使用重新排名阶段来增强检索文档的相关性,确保最相关的信息出现在列表的顶部。这个阶段使用更精确和耗时的方法来有效地重新排列文档,增加查询和排名靠前文档之间的相似性。

我们的重新排名模块考虑了两种方法:DLM重新排名,利用分类;TILDE重新排名,侧重于查询可能性。这些方法分别优先考虑性能和效率。

1.DLM 重排:该方法利用深度语言模型(DLMs)[25–27] 进行重排。 这些模型经过微调,用于对文档与查询的相关性进行分类,标记为“ true”或“ false”。 在微调期间,模型通过连接的查询和文档输入进行训练,并由相关性标记。 在推断期间,文档根据“ true”标记的概率进行排序。

2.TILDE 重新排序:TILDE [28, 29] 通过预测模型词汇表中的标记概率,独立计算每个查询词的可能性。文档通过求和得分。

NQTQAHotPotQA 方法平均值。单词平均值。

表10: 不同摘要方法的比较。

查询标记的预先计算对数概率,允许在推断时进行快速重新排序。 TILDEv2 通过只索引文档中存在的标记,使用 NCE 损失,并扩展文档,从而提高效率,减少索引大小。

我们的实验是在MS MARCO通道排名数据集上进行的,这是一个用于机器阅读理解的大规模数据集。我们遵循并对PyGaggle和TILDE提供的实现进行了修改,使用了模型monoT5,monoBERT,RankLLaMA和TILDEv2。重新排序的结果显示在表9中。我们推荐monoT5作为一个综合方法,平衡了性能和效率。RankLLaMA适用于实现最佳性能,而TILDEv2则适用于在固定收藏中获得最快体验。关于实验设置和结果的详细信息请参见附录A.3。

3.6 文档重装

在重新排序后提供文档的顺序可能会影响接下来的流程,比如LLM响应生成的表现。为了解决这个问题,我们在重新排序后的工作流中加入了一个紧凑的重新打包模块,包括三种重新打包方法:“前向”、“逆向”和“两侧”。“前向”方法按照重新排序阶段的相关性分数降序重新打包文档,而“逆向”方法按照升序排列它们。受刘等人 [48] 的启发,得出最佳表现是在输入的头部或尾部放置相关信息时实现的结论,我们还包括了一个“两侧”选项。

由于重新打包方法主要影响后续模块,我们在第4节通过将其与其他模块结合测试来选择最佳的重新打包方法。在本节中,我们将“边缘”方法选择为默认的重新打包方法。

3.7 总结

检索结果可能包含冗余或不必要的信息,可能会阻止LLMs生成准确的响应。此外,长提示可能会减慢推理过程。因此,在RAG管道中,总结检索文档的有效方法至关重要。

摘要任务可以是抽取式的或生成式的。抽取式方法将文本分段成句子,然后根据重要性对其进行评分和排序。生成式压缩器从多个文档中合成信息,重新表述并生成一个连贯的摘要。这些任务可以是基于查询的或非基于查询的。在这篇论文中,由于RAG检索与查询相关的信息,我们专注于基于查询的方法。

1.Recomp: Recomp [23] 具有抽取和生成压缩器。抽取式压缩器选择有用的句子,而生成式压缩器从多篇文档中合成信息。

2.LongLLMLingua:LongLLMLingua [49]通过专注于与查询相关的关键信息改进了LLMLingua。

选择性背景有助于通过识别和消除输入背景中的冗余信息来增强LLM效率。它使用基于原因的语言模型计算的自信息来评估词汇单位的信息量。这种方法是非查询型的,允许比较基于查询和非查询的方法。

我们在三个基准数据集上评估了这些方法:NQ,TriviaQA和HotpotQA。不同总结方法的比较结果显示在表10中。我们推荐Recomp。

3.8 生成微调

在本节中,我们专注于对生成进行微调,而将检索器的微调留给以后的探索。我们的目标是研究微调的影响,特别是相关或不相关上下文对生成器性能的影响。

形式上,我们将x表示为馈入RAG系统的查询,将D表示为此输入的上下文。生成器的微调损失是地面真实输出y的负对数似然。

探讨微调的影响,尤其是相关和无关上下文,我们将dgold定义为与查询相关的上下文,将drandom定义为随机检索到的上下文。我们通过改变D的组成来训练模型,如下所示:

  • 增强上下文由与查询相关的文档组成,表示为Dg = {dgold}。

  • Dr:上下文包含一个随机抽取的文件,表示为Dr = {drandom}。

  • 增强背景由一个相关文档和一个随机选择的文档组成,表示为Dgr = {dgold,drandom}。

增强上下文由两份与查询相关的文档副本组成,表示为 gg = 黄金黄金。

我们将未经微调的基础LM生成器表示为Mb,将在相应D下进行微调的模型表示为Mg,Mr,Mgr,Mgg。我们在几个问答和阅读理解数据集上对我们的模型进行了微调。由于问答任务的答案相对较短,我们使用基准覆盖率作为评估指标。我们将Llama-27B [50]选择为基础模型。类似于训练,我们在带有Dg,Dr,Dgr和D∅的验证集上评估所有训练过的模型,其中D∅表示没有检索的推断。图3展示了我们的主要结果。在提供金标或混合上下文时,使用一种相关和随机文档混合训练的模型(Mgr)表现最佳。这表明在训练过程中混合相关和随机上下文可以增强生成器对无关信息的鲁棒性,同时确保有效利用相关上下文。因此,我们确定了以下实践:Figure 3: 生成器微调的结果。

在培训过程中增加几篇相关且随机选择的文档是最好的。

方法。更详细的数据集信息,超参数和实验结果可在附录A.5中找到。

4 寻找最佳的RAG实践

在接下来的部分中,我们将研究实施 RAG 的最佳实践。首先,我们使用了第3节中确定的默认实践,用于每个模块。按照图1中描述的工作流程,我们逐个优化各个模块,并从各种选择中选择最有效的选项。这个迭代过程一直持续,直到我们确定了实施最终摘要模块的最佳方法。根据第3.8节,我们使用了 fine-tuned 的 Llama2-7B-Chat 模型,其中每个查询都通过选择几篇随机选择的相关文档进行了增强。CommonsenseFact CheckODQAMultihopMedicalRAGAvg.–> Commonsense事实检查ODQA多跳医学RAG平均。

表11:寻找最佳RAG实践结果。方框模块中的模块正在进行调查,以确定最佳方法。下划线表示所选的实施方法。“Avg”(平均分数)是根据所有任务的Acc,EM和RAG分数计算的,而平均延迟以每次查询的秒数进行测量。最佳分数已用粗体突出显示。

4.1 综合评价

我们进行了广泛的实验,跨越各种自然语言处理任务和数据集,以评估RAG系统的性能。具体包括:(I)常识推理;(II)事实核实;(III)开放领域问答;(IV)多跳问答;(V)医学问答。有关任务及其相应数据集的更多详细信息,请参阅附录A.6。此外,我们根据RAGAs [51] 推荐的指标,评估了从这些数据集中提取的子集上的RAG能力,包括忠实度、上下文相关性、答案相关性和答案正确性。此外,我们通过计算检索文档与黄金文档之间的余弦相似度,来衡量检索相似度。

我们在Commonsense Reasoning(常识推理)、Fact Checking(事实核实)和Medical QA(医学问答)任务中使用准确度作为评估指标。对于Open-Domain QA(开放领域问答)和Multihop QA(多跳问答),我们采用了标记级别的F1分数和精确匹配(Exact Match,EM)分数。最终的RAG得分是通过计算上述五个RAG能力的平均值得出的。我们遵循Trivedi等人的做法,并从每个数据集中抽样高达500个示例。

4.2 结果与分析

根据表11中呈现的实验结果,得出以下关键见解:

1.查询分类模块:该模块被引用并对效果和效率都有贡献,导致整体得分从0.428提高到0.443,每次查询的延迟时间从16.41秒降至11.58秒。

2.检索模块:虽然“混合使用HyDE”方法获得了最高的RAG得分0.58,但每次查询需要11.71秒的计算成本。因此,“混合”或“原始”方法被推荐,因为它们可以降低延迟同时保持可比较的性能。重新排名模块:缺乏重新排名模块导致性能明显下降,凸显其必要性。MonoT5取得了最高的平均分,证实了其在增加检索文档相关性方面的效力。这表明重新排名在提升生成响应质量中起着关键作用。

3.重新打包模块:反向配置表现出优异的性能,实现了0.560的RAG得分。这表明,将更相关的上下文靠近查询会导致最佳结果。

4.摘要模块:Recomp表现出优越的性能,尽管通过移除摘要模块也可以实现具有更低延迟的可比结果。然而,由于Recomp能够处理生成器的最大长度限制,因此仍然是首选。在时间敏感的应用中,移除摘要可能有效地减少响应时间。

实验结果表明,RAG系统的每个模块对系统整体性能的贡献是独特的。 查询分类模块提高了准确性并降低了延迟,而检索和重新排序模块显著提升了系统处理不同查询的能力。重打包和摘要模块进一步完善了系统的输出,确保在不同任务中提供高质量的响应。

5 讨论

5.1 实施RAG的最佳实践

根据我们的实验结果,我们建议为实施RAG系统提供两种不同的配方或实践,每种都定制以满足特定需求:一种侧重于最大化性能,另一种侧重于在效率和功效之间取得平衡。

最佳性能实践:为了达到最高性能,建议加入查询分类模块,使用“Hybrid with HyDE”方法进行检索,使用monoT5进行重新排序,选择Reverse进行重组,利用Recomp进行摘要生成。尽管这种配置需要计算密集型的处理,但可以获得最高的平均得分0.483。

5.2 多模态扩展

1.植根性:检索方法提供来自经过验证的多模态材料的信息,从而确保真实性和特异性。相比之下,即时生成依赖模型生成新内容,这可能偶尔导致事实错误或不准确。

效率:检索方法通常更有效率,尤其是当答案已经存在于存储材料中时。相比之下,生成方法可能需要更多的计算资源来产生新内容,特别是对于图片或长篇文本。

图4:多模态检索的工作流程。上半部分展示了文本到图像的检索过程。首先,使用文本查询在数据中找到与之最相似的图像。如果找到高度相似的图像,则直接返回该图像。如果没有找到,则使用图像生成模型创建并返回合适的图像。下半部分演示了图像到文本的检索过程。在这里,用户提供的图像与数据库中的图像进行匹配,以找到最高相似度。如果找到高度相似的图像,则返回匹配图像的预存标题。否则,图像字幕生成模型会生成并返回新的字幕。

可维护性:生成模型通常需要仔细调整以适应新应用。相比之下,基于检索的方法可以通过简单扩大规模并提高检索来源的质量来改进以满足新需求。

我们计划将这种策略应用拓展到包括视频和语音等其他模态,同时探索高效和有效的跨模检索技术。

6 结论

在这项研究中,我们旨在确定实施检索增强生成的最佳实践,以提高大型语言模型生成的内容质量和可靠性。我们系统地评估了RAG框架中每个模块的一系列潜在解决方案,并为每个模块推荐了最有效的方法。此外,我们引入了一个用于RAG系统的综合评估基准,并进行了大量实验,以确定各种替代方案中的最佳实践。我们的发现不仅有助于更深入地理解检索增强生成系统,还为未来研究奠定了基础。

7 限制条件

我们已经评估了各种微调LLM生成器的方法的影响。先前的研究已经证明了训练检索器和生成器共同的可行性。我们希望在未来探索这种可能性。在这项研究中,我们采纳了模块化设计原则,简化了寻找最佳RAG实现的过程,从而降低了复杂性。由于构建向量数据库和进行实验所涉及的巨大成本,我们的评估仅限于研究代表性分块技术在分块模块中的有效性和影响。进一步探索不同分块技术对整个RAG系统的影响将是一个有趣的挑战。虽然我们已经讨论了RAG在自然语言处理领域的应用,并将其范围扩展到图像生成,但未来探索的一个诱人方向将涉及将这项研究扩展到其他形式,如语音和视频。

A 实验细节

在本节中,我们为每个模块提供了详细的实验设置,涵盖了数据集特定信息、训练参数以及任何额外的实验结果。

A.1 查询分类

**数据集:**我们利用了 Databricks-Dolly-15K [53] 的一个子集并生成了额外的数据

使用 GPT-4。表 14 显示了用于生成问题的提示模板。

实现细节 :我们选择 BERT-base-multilingual-cased 作为我们的分类器,带有一个批处理大小为 16,学习率为 1e-5。表1显示了对结果的评估。

使用TREC DL 2019 [54]和2020 [55]的文本排名数据集来评估不同检索方法的性能。

A.2 检索方法的实验细节

不同检索方法的对比实验实现详情如下:

数据集 我们使用 TREC DL 2019 [54] 和 2020 [55] 段落排序数据集来评估不同检索方法的性能。

计量指标 广泛使用的检索评估指标包括 mAP、nDCG@10、R@50 和 R@1k。

mAP和 nDCG@10 都是顺序感知指标,它们将搜索结果的排名考虑在内。

相比之下,R@k 是一个不感知订单的指标。我们还报告了每种方法每次查询产生的平均延迟。

实现细节 对于稀疏检索,我们使用 BM25 算法,该算法依赖于 TFIDF 算法。对于密集检索,我们使用Contriever 作为我们的无监督对比文本编码器。

基于我们对嵌入模型的评估,我们使用 LLM-Embedder 实现了我们的监督密集检索。我们使用 Pyserini [56] 的BM25 和 Contriever 的默认实现。

BM25索引是在 MS MARCO 集合上使用 Lucene 构建的,而密集向量索引是在同一数据集上使用 Flat 配置使用Faiss 生成的。对于查询重写,我们提示 Zephyr-7b-alpha9(一个经过训练以充当有用助手的模型)重写原始查询。对于查询分解,我们使用 GPT-3.5-turbo-0125 将原始查询分解为多个子查询。我们密切关注 HyDE [10] 的实现,利用更高级的指令跟踪语言模型 GPT-3.5-turbo-instructed 来生成假设的答案。该模型推断的默认温度为0.7,最多可采样 512 个令牌。检索实验和评估使用Pyserini工具包进行。

A.3 重排方法的实验细节

我们的实验利用了MS MARCO Passage排序数据集,一个为机器阅读理解任务设计的大型语料库。该数据集包含超过880万个段落和100万个查询。训练集包含大约3.98亿个查询与对应的正面和负面段落元组,而开发集包含6,980个查询,与它们的BM25检索结果配对,并为每个查询保留了排名前1000名的候选段落。我们在开发集上评估方法的有效性,因为测试集并没有公开提供。

评估指标使用的指标是MRR@1、MRR@10、MRR@1k和Hit Rate@10。MRR@10是由MS MARCO提出的官方指标。

实施细节 我们遵循并对PyGaggle[26]和TILDE[28]提供的实施进行修改。对于基于DLM的再排序,我们使用基于T5-base的monoT5[26],基于BERT-large的monoBERT[25],以及基于Llama-2-7b的RankLLaMA[27]。对于TILDE再排序,我们使用基于BERT-base的TILDEv2[29]。

通常,reranking模块的输入会检索到50个文档。 reranking和repacking阶段后剩余的文档可以通过分配一个top-k值或相关性分数阈值来进一步集中。

结果分析 重排结果显示在表9中。我们将我们的结果与随机洗牌排序和BM25检索基线进行了比较。所有重新排名方法均表现出显着的。

表12:在不同问答数据集上,通过引入不同上下文的模型结果。

所有指标的表现均有所提高。monoT5和monoBERT的表现大致相同,而RankLLaMA表现最佳,每次延迟都在增加。TILDEv2是最快的,在每个查询中大约需要10到20毫秒,但牺牲了性能。此外,TILDEv2要求重新排名的段落必须与先前索引的集合完全相同。预处理必须在推理中为新的未见过的段落重新执行,从而抵消了效率优势。

A.4摘要方法的实验细节

选择性背景有助于通过识别和消除输入背景中的冗余信息来增强LLM效率。它使用基于原因的语言模型计算的自信息来评估词汇单位的信息量。这种方法是非查询型的,允许比较基于查询和非查询的方法。

度量评估指标包括F1分数和总结后更改的标记数,用于衡量简洁性。

实施细节 对于所有方法,我们使用Llama3-8B-Instruct作为生成模型,并设置摘要比例为0.4。对于抽取式方法,重要性分数决定保留的句子。对于生成式方法,我们通过摘要比例控制最大生成长度,以与抽取式方法对齐。实验在NQ测试集、TriviaQA测试集和HotpotQA开发集上进行。

A.5生成器微调实验细节

我们在几个问答(QA)和阅读理解数据集上微调我们的模型,包括ASQA [60],HotpotQA [59],NarrativeQA [61],NQ [57],SQuAD [62],TriviaQA [58],TruthfulQA [63]。我们使用它们的训练集(对于那些包含大量数据的数据集)。

表14:生成任务分类数据模板。

为了评估,我们使用ASQA [60],HotpotQA [59],NQ [57],TriviaQA [58]。我们在它们的验证集上评估我们的模型,或者手动从训练集中拆分出一个子集以避免重叠。每个训练集和测试集中确切的条目数量详见表13。

我们将使用数据集提供的文件作为每个数据条目的dgold。为了获得drandom,我们在同一数据集中对不同条目的上下文进行抽样,以确保drandom和dgold的分布大致相似。

表 13:每个数据集中的样本数量用于微调实验。

QA任务的答案相对较短,而模型生成的长度有时很难限制。

实施细节 我们选择Llama-2-7b [50]作为基础模型。为了提高效率,在训练过程中我们使用LoRA [64]和int8量化。用于微调和评估的提示模板主要遵循Lin等人[37]的方法。我们将生成器训练3个时期,限制序列的最大长度为1600,使用批量大小为4,学习率为5e-5。在测试阶段,我们使用零样本设置。

详细结果表12显示了我们对每个数据集的评估结果。

A.6综合评估的实验细节

任务和数据集 我们在各种自然语言处理任务和数据集上进行了大量实验,以评估RAG系统的性能。具体地:(1) 常识推理:我们在MMLU [65]、ARC-Challenge [66]和OpenbookQA [67]数据集上进行了评估。(2) 事实核查:我们的评估涵盖了FEVER [68]和PubHealth [69]数据集。(3) 开放领域问答:我们在NQ [57]、TriviaQA [58]和WebQuestions [70]数据集上进行了评估。(4) 多跳问答:

我们的评估包括HotPotQA [59]、2WikiMultiHopQA [71]和MuSiQue [52]数据集。对于MuSiQue,我们遵循[72]中概述的方法,仅关注可回答的两跳问题。医学问答:我们还在PubMedQA [73]数据集上进行评估。在每个数据集中,我们从测试集中随机抽样500条条目进行实验。对于没有测试集的数据集,我们使用开发集代替。

评估RAG的能力,我们均匀地从NQ、TriviaQA、HotPotQA、2WikiMultiHopQA和MuSiQue中收集了共计500个条目。每个条目都是一个“问题,黄金文档,黄金答案”三元组。

我们在开放域问答和多跳问答任务中使用标记级别的F1分数和EM得分,而在其他任务中使用准确性。我们使用更宽松的EM得分,该得分根据模型生成结果是否包含黄金答案来评估性能,而不是严格的精确匹配。

针对RAG能力评估,我们采用了来自RAGAs的四个指标,包括忠实度、上下文相关性、答案相关性和答案正确性。忠实度衡量生成答案与检索到的上下文之间的事实一致性。如果所有主张都可以直接推断自所提供的上下文,答案就被认为是忠实的。上下文相关性评估检索到的上下文与原始查询的相关性。答案相关性评估生成答案与原始查询的相关性。答案正确性涉及生成答案与标准答案的准确性。例如,上下文相关性是根据检索到的上下文中所有句子中与回答给定问题相关的比例计算的。

(2) -> (2)

|S|表示相关句子的数量,|Total|表示检索到的总句子数量。所有这些指标都是使用RAGAs框架评估的,其中GPT-4充当评判者。

此外,我们计算检索文档和目标文档之间的余弦相似度作为检索相似度。然后,将检索到的文档和目标文档输入到嵌入模型中,然后使用生成的嵌入来计算余弦相似度。

针对开放领域问答和多跳问答数据集,我们将生成模型的最大新标记数量设置为100个标记。对于其他数据集,我们将其设置为50个标记。为了处理过长的检索文档,在评估RankLLaMA和LongLLMLingua时,我们将文档截断为2048个单词。

对于所有数据集,我们在生成过程中使用贪婪解码。为了更好地比较不同的RAG模块的能力,我们采用了零样本评估设置,即不提供上下文示例。在多项选择和事实核对任务中,模型生成的答案可能采取多种形式(例如,“答案是A”而不是“A”)。因此,我们对模型生成的响应进行预处理,应用正则表达式模板将其与黄标签进行匹配。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值