RAG(检索增强生成) 的最佳实践

RAG 的过程很复杂,包含许多组成部分。我们如何确定现有的 RAG 方法及其最佳组合,以确定最佳 RAG 实践?

https://www.aisolink.com/the-best-practices-of-rag

本文介绍了一项名为“Searching for Best Practices in Retrieval-Augmented Generation”的新研究。本研究旨在解决这个问题。文章分为四个部分:典型RAG工作流程介绍、每个RAG模块的最佳实践、全面评估和作者的思考与见解。研究通过实验确定了查询分类、文档分块、嵌入模型选择、元数据添加、向量数据库、检索、重新排名、重新打包、摘要和生成器微调的最佳实践。文章强调了系统组件的重要性、模块化设计的重要性和系统实验方法的可靠性,并提出了两种RAG系统实施策略:最佳性能实践和平衡效率实践。

关键段落

  • 典型RAG工作流程:介绍了RAG的中间处理步骤,包括查询分类、检索、重新排名、重新打包和摘要。
  • 查询分类:通过训练分类器自动执行,以确定是否需要检索。
  • 分块:句子级分块在保留文本语义与简洁高效之间取得平衡。
  • 嵌入模型选择:LLM-Embedder因其性能和大小平衡而被选择。
  • 元数据添加:使用标题、关键字和假设问题等元数据增强块可以提高检索率。
  • 向量数据库:Milvus在性能上优于其他开源选项。
  • 检索:推荐使用HyDE + 混合搜索作为默认检索方法。
  • 重新排名:推荐使用monoT5作为平衡性能和效率的综合方法。
  • 重新打包:反向配置表现出卓越的性能。
  • 摘要:Recomp因其出色的性能而被推荐使用。
  • 生成器微调:混合相关和随机上下文在训练中可以提高生成器的鲁棒性。
  • 综合评价:通过集成各个模块进行全面评估,得出了关键见解。
  • 作者的思考与见解:强调了系统组件、模块化设计和系统实验方法的重要性,并指出了RAG在实际 应用中的挑战。

典型的 RAG 工作流程

RAG(检索增强生成) 的最佳实践

图 1:检索增强生成工作流程。每个组件考虑的可选方法以粗体表示,而带下划线的方法表示各个模块的默认选择。以蓝色字体表示的方法表示根据经验确定的性能最佳的选择。来源:搜索检索增强生成的最佳实践 .

典型的 RAG 工作流程包括几个中间处理步骤:

  1. 查询分类(确定输入查询是否需要检索)
  2. 检索(高效获取相关文件)
  3. 重新排名(根据相关性优化检索到的文档的顺序)
  4. 重新打包(将检索到的文档组织成结构化格式)
  5. 摘要(提取关键信息以生成响应并消除冗余)

实现 RAG 还涉及决定如何将文档拆分为块,选择用于语义表示的嵌入,选择合适的向量数据库以进行高效的特征存储,以及寻找微调 LLM 的有效方法,如图 1 所示。

每个步骤的最佳实践

查询分类

为什么需要查询分类?并非所有查询都需要检索增强,因为 LLM 具有某些功能。虽然 RAG 可以提高准确性并减少幻觉,但频繁检索会增加响应时间。因此,我们首先对查询进行分类,以确定是否需要检索。通常,当需要超出模型参数的知识时,建议使用检索。

我们可以根据任务是否提供足够的信息将任务分为 15 种类型,并显示具体的任务和示例。完全基于用户提供信息的任务被标记为“充分”,不需要检索;否则,它们将被标记为 “不足” ,可能需要检索。

RAG(检索增强生成) 的最佳实践


图 2:不同任务的检索要求分类。在未提供信息的情况下,我们会根据模型的功能对任务进行区分。此分类过程是通过训练分类器自动执行的。

RAG(检索增强生成) 的最佳实践


图 3:查询分类器的结果。

分块

将文档划分为较小的块对于提高检索准确性和避免 LLM 中的长度问题至关重要。通常有三个级别:

  • 令牌级分块很简单,但可能会拆分句子,从而影响检索质量。
  • 语义级分块使用 LLM 来确定断点,保留上下文但需要更多时间。
  • 句子级分块在保留文本语义与简洁高效之间取得平衡。

在这里,句子级分块用于平衡简单性和语义保留。分块过程从以下四个维度进行评估。

块大小

块大小会显著影响性能。较大的块提供更多的上下文,增强理解,但会增加处理时间。较小的块可以提高召回率并缩短时间,但可能缺乏足够的上下文。

RAG(检索增强生成) 的最佳实践


图 4 :不同数据块大小的比较。
如图 4 所示,使用了两个主要指标:忠实度和相关性。忠实度衡量反应是幻觉还是与检索到的文本相匹配。Relevancy 衡量检索到的文本和响应是否与查询匹配。

块的组织

RAG(检索增强生成) 的最佳实践


结果如图 5 所示。较小的区块大小为 175 个代币,较大的区块大小为 512 个代币,区块重叠为 20 个代币。

嵌入模型选择

RAG(检索增强生成) 的最佳实践


如图 6 所示,LLM-Embedder 获得了与 BA AI/bge-large-en 相当的结果,但大小只有它的三分之一。因此,选择 LLM-Embedder 来平衡性能和大小。

元数据添加

使用标题、关键字和假设问题等元数据增强块可以提高检索率。该论文不包括具体的实验,但将它们留给未来的工作。

矢量数据库

RAG(检索增强生成) 的最佳实践


图 7 提供了五个开源向量数据库的详细比较:Weaviate、F aiss、Chroma、Qdrant 和 Milvus。Milvus 在评估的数据库中脱颖而出,满足所有基本标准,并且在性能上优于其他开源选项。

检索

对于用户查询,检索模块会根据其相似性从预先构建的语料库中选择与查询最相关的前 k 个文档。下面评估了三种与检索相关的技术及其组合:

  • Query Rewriting :此技术改进了查询以更好地匹配相关文档。受 Rewrite-Retrieve-Read 框架的启发,我们提示 LLM 重写查询以提高性能。
  • 查询分解:此方法根据从原始查询中提取的子问题检索文档。这些子问题通常更复杂,更难理解和处理
  • 伪文档生成 :此方法根据用户的查询生成假设文档,并使用假设答案的嵌入来检索类似的文档。一个值得注意的实现是 HyDE 。

RAG(检索增强生成) 的最佳实践


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

图 8 显示,监督方法的性能明显优于无监督方法。通过结合 HyDE 和混合搜索,LLM-Embedder 获得了最高分。因此,建议使用 HyDE + 混合搜索作为默认检索方法。混合搜索结合了稀疏检索 (BM25) 和密集检索 (原始嵌入),实现了高性能和相对较低的延迟。

重新排名

初始搜索后,重新排名阶段会增强检索到的文档的相关性,确保最相关的信息显示在列表顶部。考虑了两种主要方法:

  • DLM 重新排名:此方法使用深度语言模型 (DLM) 进行重新排名。这些模型经过微调,可将文档与查询的相关性分类为“true”或“false”。在微调期间,使用带有相关性注释的查询和文档对模型进行训练。在推理过程中,根据 “true” 标签的概率对文档进行排序。
  • TILDE 重新排名:TILDE 通过预测模型词汇中每个词的概率来独立计算每个查询词的可能性。通过将查询词的预计算对数概率相加来对文档进行评分,从而在推理过程中实现快速重新排名。TILDEv2 通过仅对文档中存在的术语进行索引、使用 NCE 损失和扩展文档来改进这一点,从而提高效率并减小索引大小。

RAG(检索增强生成) 的最佳实践


图 9:MS MARCO Passage 排名数据集的开发集上不同重新排名方法的结果。对于每个查询,将对 BM25 检索到的前 1000 个候选段落进行重新排序。延迟以每个查询的秒为单位。来源:搜索检索增强生成的最佳实践 .

如图 9 所示,建议使用 monoT5 作为平衡性能和效率的综合方法。 RankLLaMA 非常适合那些寻求最佳性能的人,而 TILDEv2 适合在固定集上快速实验。

重新包装

后续流程(如 LLM 响应生成)的性能可能会受到文档提供顺序的影响。为了解决这个问题,我们在重新排名后的工作流程中加入了一个紧凑的重新打包模块,有三种方法:

  1. “forward” 方法根据重新排序阶段的相关性分数按降序重新打包文档。
  2. “反向”方法将它们按升序排列。
  3. 当相关信息位于输入的开头或结尾时,受 Lost in the Middle 启发的 “sides” 选项性能最佳。

由于这些重新打包的方法主要影响后续模块,因此在下面的综合回顾部分介绍它们的评估。

综述

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

提取式压缩器将文本分割成句子,根据重要性对它们进行评分和排名。Generative Compressor 综合来自多个文档的信息,以重新措辞并生成连贯的摘要。这些任务可以是基于查询的,也可以是非基于查询的

主要评估三种方法:

  1. Recomp : 它具有抽取式和生成式压缩机。提取式压缩器选择有用的句子,而生成式压缩器则综合来自多个文档的信息。
  2. LongLLMLingua :它通过关注与查询相关的关键信息来改进 LLMLingua。
  3. 选择性上下文 :它通过识别和删除输入上下文中的冗余信息来提高 LLM 效率。

RAG(检索增强生成) 的最佳实践


图 10:不同摘要方法之间的比较。
如图 10 所示,建议使用 Recomp,因为它的性能非常出色。虽然 LongLLMLingua 表现不佳,但它在没有经过这些实验数据集训练的情况下表现出更好的泛化能力。因此,我们可以将其视为一种替代方法。

Generator Fine-tuning

RAG(检索增强生成) 的最佳实践


图 11 显示,使用混合相关和随机文档 (Mgr) 训练的模型在提供黄金文档或混合上下文时表现最佳。

因此,在训练过程中混合相关和随机上下文可以提高生成器对不相关信息的鲁棒性,同时确保有效使用相关上下文。

综合评价

  吴恩达AI教学笔记之转换类应用教程

以前的评估是针对每个模块单独进行的,但现在这些模块被整合在一起以进行全面评估。

RAG(检索增强生成) 的最佳实践


图 12:寻找最佳 RAG 实践的结果。正在调查包含在盒装模块中的模块,以确定最佳方法。带下划线的方法表示所选的实现。“Avg”(平均分数)是根据所有任务的 Acc、EM 和 RAG 分数计算的,而平均延迟是每个查询的秒数。最佳分数以粗体突出显示。
如图 12 所示,得出了以下关键见解:

  • 查询分类模块:该模块不仅提高了效果和效率,而且将总分从 0.428 分提高到平均分 0.443,并将查询延迟从 16.41 秒降低到 11.58 秒。
  • 检索模块:虽然 “Hybrid with HyDE” 方法取得了最高的 RAG 分数 0.58,但其计算成本很高,每次查询需要 11.71 秒。 因此,建议使用 “Hybrid” 或 “Original” 方法,因为它们可以减少延迟,同时保持可比的性能。
  • 重新排名模块:缺少重新排名模块会导致性能显著下降。MonoT5 获得了最高的平均分,证明了它在提高检索文档的相关性方面的有效性。这表明重新排名在提高生成响应的质量方面发挥着关键作用。
  • 重新包装模块:反向配置表现出卓越的性能,RAG 得分为 0.560。这表明,将更相关的上下文放在更靠近查询位置的位置会产生最佳结果。
  • 摘要模块:Recomp 展示了卓越的性能,尽管删除摘要模块可以以更低的延迟获得类似的结果。尽管如此,Recomp 仍然是首选,因为它解决了生成器的最大长度限制。

想法和见解

从这篇论文中,我收集了几个见解:

  • 系统组件的重要性:本文强调了 RAG 系统中每个组件的重要性,例如查询分类、检索、重新排序、文档重新打包、摘要和生成。它表明,在设计复杂系统时,优化单个组件的性能至关重要。
  • 模块化设计的重要性 : 分别优化和测试组件显示了模块化设计在复杂系统中的好处。它允许独立进行更新和优化,从而促进跨各种 应用程序的重用和调整,从而提高了可维护性。
  • 系统实验方法:通过在公认的数据集中进行广泛的测试,该论文确保了其结果的可靠性和可推广性。这种系统的实验设计方法为其他研究人员提供了一个很好的例子。

RAG 在实际 应用中也存在一些挑战

  • 泛化:需要注意的是,上述评估主要基于公共主流数据集,其在其他数据集(如企业私有数据集)上的性能需要进一步评估。
  • 覆盖率 :例如,它没有涵盖像 ColBERT 这样的后期交互模型进行重新排名,也没有评估像 Graph RAG 或 RAPTOR 这样增强全球理解的技术。期待未来的更新。
  • 实时性能 :尽管本文考虑了检索和响应的速度,但在实时应用程序中平衡速度与准确性仍然是一个挑战。
  • 多模态数据的集成和处理 : 有效处理和集成来自不同模态的数据以确保系统的稳定性和有效性是另一个需要解决的技术障碍。

结论

总体而言,推荐了两种不同的 RAG 系统实施策略:

  • 最佳性能实践:为了获得最佳性能,包括查询分类模块,使用 “Hybrid with HyDE” 方法进行检索,采用 monoT5 进行重新排序,选择 “Reverse” 进行重新打包,并使用 Recomp 进行汇总。
  • 平衡效率实践:为了平衡性能和效率,包括一个查询分类模块,实施 Hybrid 方法进行检索,使用 TILDEv2 进行重新排序,选择 “Reverse” 进行重新打包,并使用 Recomp 进行汇总。

本文的主要价值在于它为研究 RAG 最佳实践提供了有价值的想法和方法。如果您对 RAG 技术感兴趣,请随时查看我的其他文章。最后,如果本文有任何错误或遗漏,或者您有任何疑问,请在评论部分指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值