检索增强生成的最佳实践探索

检索增强生成的最佳实践探索

原创 无影寺 AI帝国 2024年07月08日 08:33 广东

图片

一、结论写前面

论文来自:复旦大学、智能信息处理上海市重点实验室

论文标题:Searching for Best Practices in Retrieval-Augmented

论文链接:https://arxiv.org/pdf/2407.01219

检索增强生成(RAG)技术已被证明在整合最新信息、减少幻觉现象和提高响应质量方面非常有效,特别是在专业领域。尽管提出了许多RAG方法通过依赖查询的检索来增强大型语言模型,但这些方法仍然面临复杂的实现和较长的响应时间问题。典型的RAG工作流程涉及多个处理步骤,每个步骤都可以以多种方式执行。

在此,论文旨在确定实现检索增强生成(RAG)的最佳实践,以提高大型语言模型生成内容的质量和可靠性。论文系统地评估了 RAG 框架中各模块的一系列潜在解决方案,并推荐了每个模块的最有效方法。

此外,论文引入了一个综合评估基准,用于评估 RAG 系统,并进行了广泛的实验,以确定在各种替代方案中最佳的实践。论文的研究成果不仅有助于更深入地理解检索增强生成系统,还为未来的研究奠定了基础。

                

二、论文的简单介绍

2.1 论文的背景

许多RAG方法已被提出,旨在通过依赖查询的检索来增强大型语言模型(LLMs)。典型的RAG工作流程通常包含多个中间处理步骤:查询分类(确定是否需要对给定输入查询进行检索)、检索(高效获取与查询相关的文档)、重排序(根据文档与查询的相关性对其进行排序)、重组(将检索到的文档组织成结构化形式以更好地进行生成)、摘要(从重组文档中提取用于响应生成的关键信息并消除冗余)模块。实施RAG还需要决定如何适当地将文档分割成块、选择用于语义表示这些块的嵌入类型,以及向量数据库用于高效存储特征表示,以及有效微调大型语言模型(LLM)的方法(见图1)。

图片

图1:检索增强生成工作流程。本研究通过广泛的实验探讨了每个组件的贡献,并提供了关于优化RAG实践的见解。每个组件的可选方法以粗体字体表示,而带下划线的方法表示各模块的默认选择。用蓝色字体表示的方法是根据经验确定的性能最佳的选择    

增加复杂性和挑战的是每个处理步骤的实现变异性。例如,在为输入查询检索相关文档时,可以使用多种方法。一种方法涉及首先重写查询,然后使用重写的查询进行检索。或者,可以首先生成查询的伪响应,然后比较这些伪响应与后端文档之间的相似性以进行检索。另一种选择是直接使用嵌入模型,这些模型通常使用正负查询-响应对以对比方式进行训练。每个步骤所选择的技术及其组合显著影响RAG系统的有效性和效率。据论文所知,目前还没有系统性的努力去追求RAG的最佳实现,特别是针对整个RAG工作流程。

论文的目标是通过广泛的实验来识别RAG的最佳实践。鉴于测试所有可能的方法组合的不切实际性,论文采用了一个三步法来确定最佳的RAG实践。首先,论文比较每个RAG步骤(或模块)的代表性方法,并选择最多三种表现最佳的方法。接下来,论文通过一次测试一个步骤的方法,同时保持其他RAG模块不变,来评估每种方法对整体RAG性能的影响。这使论文能够根据其在响应生成过程中对其他模块的贡献和交互来确定每个步骤最有效的方法。一旦为某个模块选择了最佳方法,它将在后续实验中使用。

最后,论文实证探索了几种适用于不同应用场景的有前景的组合,其中效率可能优先于性能,反之亦然。基于这些发现,论文提出了几种平衡性能和效率的RAG部署策略。

图片

                  

2.2 RAG工作流程

论文详细介绍RAG工作流程的组成部分。对于每个模块,论文回顾常用方法并为最终流程选择默认和替代方法。

图片

2.2.1 查询分类

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

通常在需要超出模型参数知识的情况下建议进行检索。然而,检索的必要性因任务而异。例如,对于"Sora由OpenAI开发"这样的翻译请求,训练到2023年的大语言模型无需检索即可处理。相反,同一主题的介绍请求则需要检索以提供相关信息。

因此,论文建议按类型对任务进行分类,以确定查询是否需要检索。论文根据是否提供足够信息将任务分为15类,具体任务和示例如图2所示。对于完全基于用户给定信息的任务,论文token为"充分",不需要检索;否则,论文token为"不充分",可能需要检索。

论文训练了一个分类器来自动化这个决策过程。实验细节在附录A.1中呈现。第4节探讨了查询分类对工作流程的影响,比较了有和无分类的情况。    

图片

2.2.2 分块

将文档分割成更小的段落对于提高检索精度和避免大语言模型的长度问题至关重要。这个过程可以在不同粒度级别上应用,如token级、句子级和语义级。

•token级分块直接但可能会分割句子,影响检索质量。

•语义级分块使用大语言模型确定断点,保留上下文但耗时较多。

•句子级分块在保留文本语义和简单高效之间取得平衡。

在本研究中,论文使用句子级分块,平衡了简单性语义保留。论文从四个维度考察分块。

2.2.2.1 块大小

块大小显著影响性能。较大的块提供更多上下文,增强理解但增加处理时间较小的块改善检索召回率并减少时间,但可能缺乏足够上下文。找到最佳块大小涉及一些指标之间的平衡,如忠实度和相关性。

忠实度衡量响应是否是幻觉或与检索的文本匹配。相关性衡量检索的文本和响应是否与查询匹配。论文使用LlamaInde的评估模块计算上述指标。对于嵌入,论文使用支持长输入长度的text-embedding-ada-002模型。论文选择zephyr-7b-alpha和gpt-3.5-turbo分别作为生成模型和评估模型。块重叠的大小为20个token。    

论文使用lyft_2021文档的前60页作为语料库,然后提示大语言模型根据所选语料库生成约170个查询。不同块大小的影响如表3所示。

图片

2.2.2.2 分块技术

诸如小到大和滑动窗口等高级技术通过组织块之间的关系来提高检索质量小尺寸块用于匹配查询,而包含这些小块及其上下文信息的较大块则被返回。

为了展示高级分块技术的有效性,论文使用LLM-Embedder模型作为嵌入模型。较小的块大小为175个token,较大的块大小为512个token,块重叠为20个token。

小到大和滑动窗口等技术通过保持上下文并确保检索到相关信息来提高检索质量。详细结果如表4所示。

2.2.2.3 嵌入模型选择

选择合适的嵌入模型对于查询和块之间的有效语义匹配至关重要。论文使用FlagEmbedding的评估模块,该模块使用数据集namespace-Pt/msmarco作为查询,使用数据集namespace-Pt/msmarco-corpus作为语料库,以选择适当的开源嵌入模型。    

图片

如表2所示,LLM-Embedder [20]达到了与BAAI/bge-large-en相当的结果,然而,前者的大小仅为后者的三分之一。因此,论文选择LLM-Embedder,因为它在性能和大小之间取得了平衡。

2.2.2.4 元数据添加

用标题、关键词和假设性问题等元数据增强块可以改善检索,提供更多方式来后处理检索到的文本,并帮助大语言模型更好地理解检索到的信息。关于元数据包含的详细研究将在未来的工作中解决。

2.2.3 向量数据库

向量数据库存储嵌入向量及其元数据,通过各种索引和近似最近邻(ANN)方法,能够高效检索与查询相关的文档。为了选择适合论文研究的向量数据库,论文基于四个关键标准评估了几个选项:多种索引类型、十亿级向量支持、混合搜索和云原生能力。选择这些标准是因为它们对灵活性、可扩展性和在现代云基础设施中的部署便利性有影响。

多种索引类型提供了基于不同数据特征和使用场景优化搜索的灵活性。十亿级向量支持对于处理大语言模型应用中的大型数据集至关重要。混合搜索结合了向量搜索和传统关键词搜索,提高了检索准确性。最后,云原生能力确保在云环境中无缝集成、可扩展性和管理。    

图片

表5详细比较了五个开源向量数据库:Weaviate、Faiss、Chroma、Qdrant和Milvus。论文的评估表明,Milvus在评估的数据库中脱颖而出,成为最全面的解决方案,满足了所有基本标准,并优于其他开源选项

图片

图片

2.2.4 检索方法

给定用户查询,检索模块基于查询与文档之间的相似度从预构建的语料库中选择前k个相关文档。然后生成模型使用这些文档来制定对查询的适当响应。然而,由于表达不佳和缺乏语义信息[6],原始查询通常表现不佳,对检索过程产生负面影响。为解决这些问题,论文使用第3.2节推荐的LLM-Embedder作为查询和文档编码器,评估了三种查询转换方法:  

•查询重写:查询重写优化查询以更好地匹配相关文档。受Rewrite-Retrieve-Read框架[9]启发,论文提示大语言模型重写查询以提高性能。

•查询分解:这种方法涉及基于原始查询衍生的子问题检索文档,这更复杂且难以理解和处理。

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

最近的研究,如[44],表明将基于词法的搜索与向量搜索结合可显著提高性能。在本研究中,论文使用BM25进行稀疏检索,使用Contriever (一种无监督对比编码器)进行密集检索,基于Thakur等人的研究作为两个稳健的基准。

2.2.4.1 不同检索方法的结果

论文在TREC DL 2019和2020段落排序数据集上评估了不同搜索方法的性能。表6中的结果显示,监督方法显著优于无监督方法。结合HyDE和混合搜索,LLM-Embedder取得了最高分数。然而,查询重写和查询分解并未有效提高检索性能。考虑到最佳性能和可容忍的延迟,论文推荐将HyDE与混合搜索作为默认检索方法。考虑效率,混合搜索结合稀疏检索(BM25)和密集检索(原始嵌入),在相对较低的延迟下取得了显著的性能。

2.2.4.2 HyDE与文档和查询的不同连接

表7显示了使用HyDE时假设文档和查询的不同连接策略的影响。将多个伪文档与原始查询连接可以显著提高检索性能,但代价是增加延迟,这表明检索效果和效率之间存在权衡。然而,不加选择地增加假设性文档的数量并不会带来显著收益,并且会大幅提高延迟,表明使用单个假设性文档就足够了。

图片

    

图片

2.2.4.3 混合搜索中稀疏检索的不同权重

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

图片

其中Ss、Sd分别是稀疏检索和密集检索的归一化相关性分数,Sh是总检索分数。论文评估了五个不同的α值来确定它们对性能的影响。结果表明,α值为0.3时性能最佳,这表明适当调整α可以在一定程度上提高检索效果。因此,论文为论文的检索和主要实验选择了α = 0.3。

2.2.5 重排

初步检索后,采用重排序阶段来提高检索文档的相关性,确保最相关的信息出现在列表顶部。这个阶段使用更精确和耗时的方法来有效重新排序文档,增加查询和排名靠前文档之间的相似性。论文在重排序模块中考虑两种方法:使用分类的DLM重排序和专注于查询似然的TILDE重排序。这些方法分别优先考虑性能和效率。

•DLM重排序:此方法利用深度语言模型(DLMs)进行重排序。这些模型经过微调,可将文档与查询的相关性分类为"真"或"假"。在微调过程中,模型使用连接的查询和文档输入进行训练,并按相关性token。在推理时,根据"真"token的概率对文档进行排序。

•TILDE重排序:TILDE通过预测模型词汇表中的token概率,独立计算每个查询词的似然。文档的得分通过求和计算。    

论文的实验在MS MARCO段落排序数据集上进行,这是一个大规模的机器阅读理解数据集。论文遵循并修改了PyGaggle和TILDE提供的实现,使用monoT5、monoBERT、RankLLaMA和TILDEv2模型。重排序结果如表9所示。论文推荐monoT5作为平衡性能和效率的综合方法。RankLLaMA适合追求最佳性能,而TILDEv2适合在固定集合上获得最快体验。实验设置和结果详情见附录A.3。

图片

2.2.6 文档重组

后续过程(如LLM响应生成)的性能可能受到文档提供顺序的影响。为解决这个问题,论文在重排序后的工作流程中加入了一个紧凑的重组模块,包括三种重组方法:"正向"、"反向"和"两侧"。"正向"方法根据重排序阶段的相关性得分降序重组文档,而"反向"则按升序排列。受Liu等人[48]的启发,他们发现将相关信息放在输入的头部或尾部时性能最佳,论文还包括了"两侧"选项。

2.2.7 摘要

检索结果可能包含冗余或不必要的信息,可能阻止LLMs生成准确的响应。此外,长提示可能会减慢推理过程。因此,在RAG流程中,有效总结检索文档的方法至关重要。摘要任务可以是抽取式或生成式的。抽取式方法将文本分割成句子,然后根据重要性对其评分和排序。生成式压缩器从多个文档中综合信息,重新表述并生成连贯的摘要。这些任务可以是基于查询或非基于查询的。在本文中,由于RAG检索与查询相关的信息,论文专注于基于查询的方法。

•Recomp:Recomp有抽取式和生成式压缩器。抽取式压缩器选择有用的句子,而生成式压缩器从多个文档中综合信息。    

•LongLLMLingua:LongLLMLingua通过关注与查询相关的关键信息来改进LLMLingua。

•选择性上下文:选择性上下文通过识别和删除输入上下文中的冗余信息来提高LLM效率。它使用基础因果语言模型计算的自信息来评估词汇单元的信息量。这种方法是非基于查询的,允许比较基于查询和非基于查询的方法。

论文在三个基准数据集上评估这些方法:NQ、TriviaQA和HotpotQA。不同摘要方法的比较结果如表10所示。论文推荐Recomp,因为它表现出色。LongLLMLingua表现不佳,但显示出更好的泛化能力,因为它没有在这些实验数据集上训练。因此,论文将其视为替代方法。附录A.4提供了额外的实现细节和关于非基于查询方法的讨论。

2.2.8 生成器微调

在本节中,论文专注于生成器的微调,而将检索器的微调留待未来探索。论文旨在研究微调的影响,特别是相关或无关上下文对生成器性能的影响。

形式上,论文用x表示输入RAG系统的查询,用D表示这个输入的上下文。生成器的微调损失是真实输出y的负对数似然。

为了探索微调的影响,特别是相关和无关上下文的影响,论文定义dgold为与查询相关的上下文,drandom为随机检索的上下文。

                

2.3 搜索最佳 RAG 实践

论文将探讨实现 RAG 的最佳实践。首先,论文使用了第 3 节中为每个模块确定的默认实践。按照图 1 所示的工作流程,论文依次优化各个模块,并从替代方案中选择最有效的选项。这个迭代过程一直持续到论文确定了实现最终摘要模块的最佳方法。论文使用了 Llama2-7B-Chat 模型,该模型经过微调,每个查询都通过随机选择的相关文档进行增强。论文使用 Milvus 构建了一个包含 1000 万条英文维基百科文本和 400 万条医学数据文本的向量数据库。论文还研究了移除查询分类、重新排序和摘要模块的影响,以评估它们的贡献。    

图片

2.3.1 综合评估

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

论文使用准确性作为常识推理、事实核查和医学问答任务的评估指标。对于开放域问答和多跳问答,论文采用了词级别 F1 分数和精确匹配(EM)分数。最终的 RAG 分数是通过平均上述五个 RAG 能力来计算的。论文遵循 Trivedi 等人 [52] 的方法,并从每个数据集中最多抽样 500 个示例。

2.3.2 结果与分析

根据表 11 所示的实验结果,论文得出以下关键见解:    

•查询分类模块:该模块在提升效果和效率方面发挥了作用,使总体评分平均从 0.428 提高到 0.443,查询延迟时间从 16.41 秒减少到 11.58 秒。

•检索模块:尽管“与 HyDE 混合”的方法获得了最高的 RAG 评分 0.58,但其计算成本相当高,每次查询耗时 11.71 秒。因此,建议使用“混合”或“原始”方法,因为它们在降低延迟的同时保持了相近的性能。

•重排序模块:没有重排序模块会导致性能显著下降,突显了其必要性。MonoT5 获得了最高的平均评分,证明其在提升检索文档相关性方面的有效性。这表明重排序在提高生成响应质量方面起着至关重要的作用。

•重打包模块:反向配置表现出卓越的性能,获得了 0.560 的 RAG 评分。这表明将更相关的上下文放置在更接近查询的位置可以产生最佳结果。

•摘要模块:Recomp 展示了卓越的性能,尽管通过移除摘要模块可以在较低延迟下实现相近结果。然而,由于 Recomp 能够解决生成器最大长度的限制,仍然是首选。在时间敏感的应用中,移除摘要模块可以有效地减少响应时间。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值