RAG工作流哪种组合效果最佳?深入探究RAG领域最佳实践 原创
检索增强型生成(RAG)技术已被证明在整合最新信息、减少错误想象以及提升回应质量方面非常有效,特别是在特定领域中。虽然已经提出了许多旨在通过查询依赖的检索来增强大型语言模型的RAG方法,但这些方法仍然受到其复杂实现和延长响应时间的影响。通常,一个RAG工作流涉及多个处理步骤,每个步骤都可以以不同的方式执行。那么哪些处理步骤的组合能起到好的效果呢?今天给大家分享一篇相关的论文:RAG领域的最佳实践[1]。
1. 介绍
一个典型的RAG工作流程通常包含多个介入处理步骤:查询分类(确定给定输入查询是否需要检索)、检索(高效获得查询相关的文档)、重排(基于它们与查询的相关性重新排列检索到的文档的顺序)、重新打包(将检索到的文档组织成结构化的形式以便更好地生成)、摘要(从重新打包的文档中提取关键信息以生成回应并消除冗余)模块。实施RAG还需要决定如何恰当地将文档分割成块、用于语义表示这些块的嵌入类型、用于高效存储特征表示的向量数据库的选择,以及有效微调LLMs的方法。
RAG的每个处理步骤的可变性都很多,例如,在检索输入查询的相关文档时,可以采用多种方法。一种方法涉及首先重写查询,然后使用重写后的查询进行检索。另一种方法是首先生成查询的伪响应,然后比较这些伪响应与后端文档的相似度进行检索。据我们所知,尚未有系统性的努力去追求RAG的最优实现,特别是针对整个RAG工作流程。
在这项研究中,我们旨在通过广泛的实验来识别RAG的最佳实践。鉴于测试所有这些方法的可能组合不可行,我们采用三步方法来识别最优的RAG实践。首先,我们比较每个RAG步骤(或模块)的代表性方法,并选择表现最佳的三种方法。接下来,我们通过一次测试一个步骤的一种方法,同时保持其他RAG模块不变,来评估每种方法对整体RAG性能的影响。这允许我们基于其在响应生成期间与其他模块的贡献和互动,确定每个步骤的最有效方法。一旦为一个模块选择了最佳方法,就在随后的实验中使用它。最后,我们实证探索几种适合不同应用场景的有希望的组合,其中效率可能被优先考虑于性能,反之亦然。基于这些发现,我们建议RAG的几种策略,以平衡性能和效率。
本研究的贡献有三个方面:
- 通过广泛的实验,我们深入调查了现有的检索增强生成(RAG)方法及其组合,以识别和推荐最优的RAG实践。
- 我们引入了一套全面的评估指标框架及相应的数据集,以全面评估检索增强生成模型的性能,涵盖通用的、专业的(或领域特定的)以及与RAG相关的能力。
- 我们展示了整合多模态检索技术可以显著提高对视觉输入的问答能力,并通过“检索即生成”的策略加速多模态内容的生成。
2. 相关工作
确保大型语言模型(LLMs)如ChatGPT和LLaMA生成的回应准确性至关重要。然而,简单地增加模型大小并不能从根本上解决“幻觉”问题,这在知识密集型任务和专业领域尤为明显。检索增强生成(RAG)通过从外部知识库检索相关文档,为LLMs提供准确、实时、领域特定的上下文,以解决这些挑战。先前的工作通过查询和检索转换优化了RAG流程,提高了检索器的性能,并对检索器和生成器进行了微调。这些优化改善了输入查询、检索机制与生成过程之间的互动,确保了回应的准确性和相关性。
2.1 查询和检索转换
有效的检索需要查询准确、清晰且详细。即便将查询转换为嵌入式表示,查询与相关文档之间的语义差异仍可能存在。之前的工作已经探索了通过查询转换来增强查询信息的方法,从而提高检索性能。例如,Query2Doc和HyDE从原始查询生成伪文档以增强检索,而TOC则将查询分解为子查询,聚合检索到的内容以得出最终结果。
其他研究集中于转换检索源文档。LlamaIndex提供了一个界面,为检索文档生成伪查询,以提高与真实查询的匹配度。一些工作采用对比学习,使查询和文档嵌入在语义空间中更接近。对检索到的文档进行后处理是另一种增强生成器输出的方法,采用的技术包括层次化提示摘要和使用抽象及提取式压缩器来减少上下文长度和消除冗余。
2.2 检索增强策略
文档分块和嵌入方法对检索性能影响显著。常见的分块策略将文档划分为多个块,但确定最佳块长可能颇具挑战。小块可能会导致句子碎片化,而大块则可能包含不相关的上下文。LlamaIndex优化了分块方法,如Small2Big和滑动窗口技术。检索到的块可能不相关,数量可能很大,因此需要重新排序来过滤掉不相关的文档。一种常见的重新排序方法是使用深度语言模型,例如BERT、T5或LLaMA,这需要在重新排序期间进行缓慢的推理步骤,但能提供更好的性能。TILDE通过预先计算并存储查询词项的可能性来实现效率,基于它们的总和对文档进行排名。
2.3 Retriever和Generator 的Fine-tuning
在RAG框架内进行检索器和生成器的微调至关重要,以优化两者的性能。一些研究集中于微调生成器,以更好地利用检索器的上下文,确保生成内容的准确性和鲁棒性。其他研究则致力于微调检索器,学习检索对生成器有益的文段。整体性方法将RAG视为一个集成系统,同时对检索器和生成器进行微调,以提高整体性能,尽管这增加了复杂性和集成挑战。
3. RAG 工作流
在本节中,我们将详细介绍RAG工作流程的各个组件。针对每个模块,我们回顾常用的方法,并为我们的最终流程选择了默认和备选方法。
3.1 查询分类
并非所有的查询都需要通过检索增强,因为大型语言模型(LLMs)本身就具备一定的处理能力。尽管检索增强生成(RAG)可以提高信息的准确性并减少虚构内容,但频繁的检索可能会增加响应时间。因此,我们首先通过对查询进行分类来确定是否需要检索。需要检索的查询会经过RAG模块处理;其他则直接由LLMs处理。通常,在需要超出模型参数范围的知识时推荐使用检索。然而,检索的必要性根据任务的不同而有所变化。例如,一个训练至2023年的LLM可以处理“Sora是由OpenAI开发的”这一翻译请求而无需检索。相反,对于同一主题的介绍请求则需要检索来提供相关信息。
因此,我们建议按类型对任务进行分类,以确定查询是否需要检索。对于完全基于用户提供信息的任务,我们标记为“充分”,不需要检索;否则,我们标记为“不足”,可能需要检索。我们训练了一个分类器来自动化这一决策过程。
3.2 Chunking
将文档分块成更小的段落对于提高检索的准确性和避免在大型语言模型(LLMs)中出现长度问题至关重要。这个过程可以在不同的粒度级别上应用,比如令牌(token)、句子和语义级别。
- 令牌级别的分块很直接,但可能会分割句子,影响检索质量。
- 语义级别的分块利用大型语言模型来确定分割点,能保持上下文不变,但是耗时。
- 句子级别的分块在保留文本语义的同时,平衡了简单性和效率。
在这项研究中,我们使用句子级别的分块,平衡了简单性和语义保留。我们从四个维度考察了分块方法。
3.2.1 Chunk Size
块大小显著影响性能。更大的块提供更多上下文,增强了理解能力,但也增加了处理时间。较小的块提高了检索回忆和减少时间,但可能缺乏足够的上下文。找到最优块大小涉及平衡一些指标,如忠实度和相关性。忠实度衡量响应是否是幻想的或与检索到的文本匹配。相关性衡量检索到的文本和响应是否与查询匹配。我们使用LlamaIndex的评估模块来计算上述指标。对于嵌入,我们使用text-embedding-ada-002模型,该模型支持长输入长度。我们分别选择zephyr-7b-alpha3和gpt-3.5-turbo作为生成模型和评估模型。块重叠的大小为20个令牌。文档lyft_2021的前六十页被用作语料库,然后提示LLMs根据选定的语料库生成大约一百七十个查询。不同块大小的影响如下表所示。
3.2.2 分块技术
高级技术,如小到大和滑动窗口通过组织分块块关系,提高了检索质量。使用小尺寸块来匹配查询,返回包括小块及其上下文信息的更大块。为了展示高级分块技术的有效性,我们使用了LLM-Embedder 模型作为嵌入模型。较小的块大小为175个令牌,较大的块大小为512个令牌,块之间的重叠为20个令牌。像小到大和滑动窗口这样的技术通过维持上下文和确保检索到相关信息来提高检索质量。详细结果显示在表中。
3.2.3 embedding 模型选择
选择正确的嵌入模型对于有效地进行查询与块区块的语义匹配至关重要。我们使用了FlagEmbedding6的评估模块,以及数据集namespace-Pt/msmarco-corpus作为语料库,以选择合适的开源嵌入模型。我们发现LLM-Embedder 与 BAAI/bge-large-en的结果相当,然而,前者的模型大小是后者的三分之一。因此,我们选择了 LLM-Embedder,因为它在性能和大小之间取得了平衡。
3.2.4 添加元数据
通过将块状内容增添元数据,如标题、关键词和假设性问题,可以提高检索效率,提供更多后处理检索文本的方法,并帮助大型语言模型(LLMs)更好地理解检索到的信息。
3.3 向量数据库
向量数据库存储着带有元数据的嵌入向量,通过各种索引和近似最近邻(ANN)方法,能够高效地检索与查询相关的文档。为了为我们的研究选择一个合适的向量数据库,我们基于四个关键标准对几个选项进行了评估:多种索引类型、支持十亿级别的向量、混合搜索以及云原生能力。这些标准因其对于灵活性、可扩展性以及在现代云基础设施中部署的便捷性的影响而被选中。多种索引类型提供了基于不同数据特性和用例优化搜索的灵活性。十亿级别的向量支持对于处理LLM应用中的大型数据集至关重要。混合搜索将向量搜索与传统关键词搜索结合起来,提高了检索准确性。最后,云原生能力确保了在云环境中的无缝集成、可扩展性和管理。
下表详细比较了五个开源向量数据库:Weaviate、Faiss、Chroma、Qdrant和Milvus。
我们的评估表明,在所有评估的数据库中,Milvus脱颖而出,成为最全面的解决方案,满足了所有关键标准,并且在性能上超越了其他开源选项。
3.4 Retrieval 方式
针对用户查询,检索模块从预建的语料库中选择与查询和文档的相似度最高的前k个相关文档。然后,生成模型使用这些文档来制定针对查询的适当响应。然而,原始查询由于表达不佳和缺乏语义信息,通常会表现不佳,这对检索过程产生了负面影响。为了解决这些问题,我们评估了三种查询转换方法,使用推荐的LLM-Embedder作为查询和文档编码器:
- 查询改写:查询改写通过改进查询来更好地匹配相关文档。受到Rewrite-Retrieve-Read框架的启发,我们促使一个LLM重写查询以提升性能。
- 查询分解:这种方法涉及到基于从原始查询中派生的子问题来检索文档,这比理解和处理更复杂的查询要困难。
- 伪文档生成:这种方法基于用户查询生成一个假想的文档,并使用假想答案的嵌入来检索相似文档。一个值得注意的实现是HyDE。
最近的研究表明结合基于词汇的搜索与向量搜索可以显著提高性能。在本研究中,我们使用BM25进行稀疏检索和Contriever,一个无监督对比编码器,进行密集检索。
3.4.1 不同retrieval方法的结果
我们在TREC DL的段落排名数据集上评估了不同搜索方法的表现。展示的结果显示,监督方法明显胜过无监督方法。结合HyDE和混合搜索,LLM-Embedder取得了最高分数。然而,查询重写和查询分解并没有如预期那样有效地提升检索性能。考虑到最佳性能和可接受的延迟,我们推荐将HyDE混合搜索作为默认的检索方法。考虑到效率,混合搜索结合了稀疏检索(BM25)和密集检索(原始嵌入),并且在相对较低的延迟下实现了显著的性能。
3.4.2 不同文档和查询连接方式下的HyDE
下表展示了使用HyDE时,不同文档和查询连接策略对检索性能的影响。将多个伪文档与原始查询连接起来可以显著提高检索性能,尽管这会增加延迟,暗示着检索效果与效率之间存在一种权衡。然而,无差别地增加假设文档的数量并不会带来显著的好处,反而会大幅提高延迟,这表明使用单一假设文档就足够了。
3.4.3 不同权重的稀疏检索与密集检索
下表展示了不同α值在混合搜索中的影响,其中α用于控制稀疏检索与密集检索组件之间的权重分配。我们评估了五个不同的α值,以确定它们对性能的影响。结果表明,α值为0.3时性能最佳,这表明适当调整α可以在一定程度上提高检索效果。因此,我们为我们的检索和主要实验选择了α = 0.3。
3.5 Reranking
在最初的检索之后,将采用重排序阶段来提高检索到的文档的相关性,确保最相关的信息出现在列表的顶部。这一阶段采用更精确、耗时更长的方法有效地重新排序文档,增加查询与排名最高的文档之间的相似度。
在我们的重排序模块中,我们考虑了两种方法:DLM重排序和TILDE重排序。DLM重排序采用分类方法,而TILDE重排序则侧重于查询可能性。这些方法分别优先考虑性能和效率。
- DLM重排方法:这种方法利用深度语言模型(DLMs)进行重排。这些模型被微调用以将文档与查询的相关性分类为“真”或“假”。在微调过程中,模型通过将查询和文档输入连接起来,并根据相关性进行标记来进行训练。在推理时,文档根据“真”标记的概率进行排名。
- TILDE重排:TILDE通过预测模型词汇表中的各个词项的概率来独立计算每个查询词项的可能性。通过对查询词项的预计算对数概率求和,为文档打分,从而在推理时快速重排。TILDEv2通过仅索引文档中存在的词项,使用NCE损失,并扩展文档,从而提高效率并减小索引大小。
我们的实验是在MS MARCO Passage排名数据集上进行的,这是一个大规模的机器阅读理解数据集。我们遵循并对PyGaggle和TILDE提供的实现进行了修改,使用了模型monoT5、monoBERT、RankLLaMA和TILDEv2。重排结果显示在表中。我们推荐monoT5作为一种综合性的方法,平衡了性能和效率。RankLLaMA适合于实现最佳性能,而TILDEv2是在固定集合上获得最快体验的理想选择。实验设置和结果的详细信息在附录中呈现。
3.6 文档重组
文档重组 后续过程的表现,比如LLM响应生成,可能会受到提供文档的顺序影响。为了解决这个问题,在重新排名之后的工作流程中,我们加入了一个紧凑的重组模块,包含三种重组方法:“前向”、“反向”和“两侧”。“前向”方法通过降序重新排名阶段的相关性得分来重组文档,而“反向”则按升序排列它们。对于LLM,当相关信息放在输入的头部或尾部时,可以达到最佳性能,我们也加入了“两侧”选项。
4. 探索最佳RAG实践
在接下来的部分中,我们将研究实施RAG的最佳实践。首先,我们使用第3节中确定的每个模块的默认实践。我们依次对各个模块进行了优化,并在替代方案中选择了最有效的选项。这个迭代过程持续进行,直到我们确定了实现最终摘要模块的最佳方法。我们使用了经过微调的Llama2-7B-Chat模型作为生成器,其中每个查询都通过一些随机选择的相关文档进行了增强。我们使用Milvus构建了一个包含1000万英文维基百科文本和400万医学数据文本的向量数据库。我们还研究了移除查询分类、重排和摘要模块对其贡献的影响。
4.1 全面评估
我们在各种自然语言处理(NLP)任务和数据集上进行了广泛的实验,以评估RAG系统的性能。具体来说:
- 常识推理
- 事实核查
- 开放域问答
- 多跳问答
- 医疗问答。
此外,我们还评估了RAG在这些数据集提取的子集上的能力,使用了在RAGAs中推荐的度量标准,包括忠实度、上下文相关性、答案相关性和答案正确性。另外,我们通过计算检索到的文档与黄金文档之间的余弦相似度来衡量检索相似度。
对于常识推理、事实核查和医疗问答任务,我们使用准确率作为评估指标。对于开放域问答和多跳问答,我们采用了基于令牌的F1分数和精确匹配(EM)分数。最终的RAG分数是通过平均上述五个RAG能力得出的。我们遵循了Trivedi等人的方法,从每个数据集中随机抽取了多达500个样本。
4.2 结果与分析
结果表如下:
根据表中呈现的实验结果,以下关键见解浮现:
- Query Classification:这个模块被引用并对效率和效果都有贡献,使得整体得分平均值从0.428提高到0.443,并将每个查询的延迟时间从16.41秒降低到11.58秒。
- Retrieval:虽然“Hybrid with HyDE”方法获得了最高的RAG得分0.58,但它在计算成本上相当高,每个查询需要11.71秒。因此,建议使用“Hybrid”或“Original”方法,因为它们在保持可比性能的同时减少了延迟。
- Reranking:缺少重排模块导致性能明显下降,突显出其必要性。MonoT5获得了最高的平均得分,证明了其在提高检索文档相关性方面的有效性。这表明重排在提高生成响应的质量方面发挥着关键作用。
- Repacking:Reverse配置表现出卓越的性能,实现了0.560的RAG得分。这表明,将更相关的上下文放置得离查询更近可以导致最佳结果。
- 概要化模块:Recomp展现了卓越的性能,尽管移除概要化模块后,以较低的延迟实现可比结果是可能的。然而,由于Recomp能够解决生成器的最大长度限制,它仍然是首选。在对时间敏感的应用中,移除概要化可以有效减少响应时间。
实验结果表明,每个模块对RAG系统的整体性能都有独特的贡献。查询分类模块提高了准确性并降低了延迟,而检索和重排模块显著提高了系统处理各种查询的能力。重新打包和概要化模块进一步完善了系统的输出,确保了不同任务中高质量的响应。
5. 讨论
5.1 实施 RAG 的最佳实践
根据我们的实验发现,我们建议两种不同的实施 RAG 系统的做法或实践,每种都针对特定需求进行定制:一种专注于最大化性能,另一种在效率和效果之间取得平衡。
- 最佳性能实践:为了达到最高性能,建议加入查询分类模块,使用“Hybrid with HyDE”方法进行检索,采用monoT5进行重排,选择Reverse进行repacking,以及利用Recomp进行summarization。这种配置获得了最高的平均得分0.483,尽管过程中计算量很大。
- 平衡效率实践:为了在性能和效率之间取得平衡,建议加入查询分类模块,实现Hybrid方法进行检索,使用TILDEv2进行重排,选择Reverse进行repacking,以及采用Recomp进行summarization。鉴于检索模块占系统处理时间的大部分,转向Hybrid方法同时保持其他模块不变,可以大幅减少延迟,同时保持可比的性能。
5.2 多模态扩展
我们已将RAG扩展到多模态应用。具体而言,我们将文本到图像(text2image)和图像到文本(image2text)的检索能力整合到系统中,使用大量配对的图像和文本描述作为检索源。如下图所示,当用户查询与存储图像的文本描述很好地对齐时(即“检索作为生成”策略),文本到图像的能力可以加速图像生成过程;而当用户提供图像并就输入的图像进行对话时,图像到文本的功能则派上用场。这些多模态RAG能力提供了以下优势:
- 真实性:检索方法从经过验证的多模态材料中提供信息,从而确保了内容的真实性和具体性。相比之下,即时生成依赖模型生成新内容,偶尔可能导致事实错误或不准确。
- 效率:检索方法通常更高效,特别是当答案已经存在于存储材料中时。相反,生成方法可能需要更多的计算资源来产生新内容,特别是对于图像或长篇文本。
- 可维护性:生成模型通常需要仔细的微调,以便为新应用定制。与之相比,检索基方法可以通过简单地扩大检索源的规模和提高其质量来改进,以应对新的需求。我们计划将这种策略的应用范围拓宽到其他模态,如视频和语音,同时也探索高效且有效的跨模态检索技术。
6. 结论
在本研究中,我们旨在识别实施检索增强生成的最佳实践,以提高大型语言模型生成内容的质量和可靠性。我们系统地评估了RAG框架内各个模块的潜在解决方案范围,并为每个模块推荐了最有效的方法。此外,我们引入了一个全面的RAG系统评估基准,并进行了广泛的实验,以确定各种替代方案中的最佳实践。我们的发现不仅有助于加深对检索增强生成系统的理解,而且为未来的研究奠定了基础。
局限性
我们评估了用于微调大型语言模型(LLM)生成器的各种方法的影响。以前的研究已经展示了联合训练检索器和生成器的可行性。我们希望将来能够探索这一可能性。在本研究中,我们采用模块化设计原则以简化对最佳RAG实现的搜索,从而降低复杂性。由于构建向量数据库和进行实验所涉及的成本令人望而却步,我们的评估限于调查块处理模块内代表性块处理技术的有效性和影响。进一步探索不同块处理技术对整个RAG系统的影响将是一个吸引人的方向。虽然我们已经讨论了RAG在自然语言处理领域的应用,并将其范围扩展到图像生成,但将这项研究扩展到其他模态,如语音和视频,将是未来探索的一个诱人领域。
参考资料
[1]RAG领域的最佳实践: https://arxiv.org/html/2407.01219v1
本文转载自公众号AI 博物院 作者:longyunfeigu
原文链接:https://mp.weixin.qq.com/s/fSWyX2qNRupOpCP09_b6Zg