AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAG的12种调优策略
发布日期:2024-06-06 13:00:20 浏览次数: 1946


数据科学是一门实验性科学。它始于“无免费午餐定理”,即不存在适用于每个问题的通用算法。


因此,数据科学家们使用实验跟踪系统来帮助调整他们机器学习项目的超参数,以实现最佳性能。

 

01

整体优化方案说明


检索增强生成(Retrieval-Augmented Generation,以下简称RAG)是一种比较有效的大模型使用场景中的补充模型能力的机制,在实践中可以通过调整其各种参数提高RAG流程的性能。类似于深度学习中的实验,数据增强技术不是超参数,而是可以调整和实验的旋钮。

 

本文从数据索引阶段推理阶段分别阐述RAG流程的“超参数”和调优建议。

数据索引阶段可优化点

  1. 数据清洗

  1. 分块

  1. 嵌入模型

  1. 元数据

  1. 多索引

  1. 索引算法

推理阶段可优化点

  1. 查询转换

  1. 检索参数

  1. 高级检索策略

  1. 重新排序模型

  2. 语言模型微调

  3. 提示工程

    请注意,本文的用例是基于文本类的RAG应用。对于多模态的RAG应用,可能需要考虑其他不同的因素。


    02

    索引阶段-优化方案


    数据索引阶段是构建RAG的准备步骤,类似于机器学习中的数据清洗和预处理。数据索引阶段通常包括以下步骤:

    1. 数据收集

    1. 分块:将大量数据分割成较小的块,以便更有效地处理和管理数据。

    1. 向量化: 使用嵌入模型将每个数据块转换为向量表示这有助于在后续的检索和生成阶段中处理和分析文本。

    2. 存储:将生成的向量和相应的数据块存储在向量数据库中。


      2.1

      数据清洗


      数据质量在RAG中起着至关重要的作用,因此在进行以下任何步骤之前,需确保数据集符合以下标准:

      • 整洁:请应用一些在自然语言处理中常用的数据清洗方法。例如确保所有特殊字符被正确编码。

      • 正确:确保信息的一致性与准确性,避免可能混淆语言模型的冲突信息。


      若原始数据集不符合这样的标准,首先要做的就是将数据集清洗为符合这两条标准的数据格式,然后再进行下面的步骤。


      2.2

      分块


      在RAG中,对文档进行切块是处理外部知识源的一项重要步骤,会直接影响性能。分块是一种生成有逻辑关联的信息片段的技巧,通常做法是通过将长文档分割成小节(也可以将小片段组合成段落)。


      分块技术是影响分块效果的一个因素。如在LangChain中,不同的文本拆分器根据不同的逻辑拆分文档,比如按字符、标记等。这要根据你的数据类型来决定。


      分块长度(chunk_size)也要具体情况具体分析:若使用场景是问答,可能需要更短的、更具体的切块;但如果是摘要,可能需要更长的切块。此外,如果一个切块太短,可能不包含足够的上下文。另一方面,如果切块太长,可能包含太多不相关的信息。


      另外,还需要考虑在切块之间引入一些额外上下文的“滚动窗口”(重叠),来提高信息连贯性。


      2.3

      嵌入模型


      嵌入模型是检索的核心,嵌入的质量直接影响检索结果。通常来说,生成的嵌入的维度越高,嵌入的精度就越高。


      虽可以直接使用通用嵌入模型,但在某些情况下,对嵌入模型进行微调以适应特定用例可能是有意义的,因为这样可以避免后期出现领域外问题。根据LlamaIndex的实验证明,微调嵌入模型通常可以导致检索评估指标提高5-10%,

      但不是所有嵌入模型都可以进行微调。


      2.4

      元数据


      将向量嵌入存储在向量数据库中时,一些向量数据库可以将它们与元数据(或未向量化的数据)一起存储。使用元数据注释向量嵌入可以对搜索结果进行后处理,例如元数据过滤,或者添加日期、章节或子章节引用等元数据。

      2.5

      多索引


      若元数据不足以在逻辑上区分不同类型的上下文,可以尝试使用多索引。如可以为不同类型的文档使用不同的索引。需要注意的是,若对元数据和独立集合(separate collections)感兴趣,可能也会想要了解原生多租户。

      2.6

      索引算法

      为了在大规模情况下实现快速相似性搜索,向量数据库和向量索引库使用的是近似最近邻搜索(Approximate Nearest Neighbor,ANN)而不是k最近邻搜索(k-nearest neighbor,kNN)。顾名思义,ANN算法近似最近邻,因此可能比kNN算法精度略低。

      其中,有许多不同的ANN算法,例如Facebook Faiss(聚类)、Spotify Annoy(树)、Google ScaNN(向量压缩)和HNSWLIB(接近图)。这些ANN算法一般都有可以调整的参数,比如HNSW中的ef、efConstruction和maxConnections

      此外,可以对索引算法启用向量压缩,使用向量压缩会损失一些精度。但是,你也可以(根据场景)对压缩算法的选择和调整进行优化。


      在实践过程中,算法的参数通常已经由数据库研究团队在基准实验中进行调整了,RAG系统的开发人员通常不会改动。


      03

      推理阶段-优化方案


      RAG的主要组成部分是检索生成。本节主要讨论提升检索效果的策略(查询转换、检索参数、高级检索策略和重新排序模型)。因为相对于生成,检索对结果的影响更大。但检索也会简单涉及到一些生成的策略(LLM和提示工程)。


       

      3.1

      查询转换


      RAG中,用于获取额外上下文的搜索查询也被嵌入到向量空间中,因此查询的表达方式会对搜索结果产生影响。若搜索查询没有得到满意的结果,可尝试一些查询转换技术,如:

      1. 重新表达: 使用语言模型(LLM)重新表达查询,然后再次尝试。

      1. 假设性文档嵌入(HyDE): 使用语言模型生成对搜索查询的假设响应,然后将两者一起用于检索。

      1. 子查询: 将较长的查询分解为多个较短的查询。


      3.2

      检索参数


      检索是RAG的重要组成部分,在检索中首先要考虑的是,语义搜索是否足够满足用例,或者是否希望使用混合搜索。


      在采用混合搜索的情况下,需要尝试调整混合搜索中稀疏和密集检索方法的加权聚合。因此,调整参数alpha将变得至关重要。


      此外,检索结果的数量也很重要。检索到的「上下文数量」将影响「所使用的上下文窗口的长度」。同时,若使用重排序模型,则需要考虑将多少上下文输入到模型中。


      虽然语义检索相似性度量方式可以设置,但应根据所使用的嵌入模型来修改,而不是进行不必要的实验。如text-embedding-ada-002支持余弦相似度,而multi-qa-MiniLM-l6-cos-v1支持余弦相似度、点积和欧几里得距离。


      3.3

      高级检索策略


      高级检索的基本思想为用于检索的块不一定要与用于生成的块相同。理想情况下,会把检索嵌入为较小的块,去检索较大的上下文。

      • 句子窗口检索(Sentence-window retrieval):不仅检索相关句子,还要检索句子之前和之后的窗口。

      • 自动合并检索(Auto-merging retrieval):文档以类似树状结构组织。查询时,可以将单独但相关的较小块合并成更大的上下文。


      3.4

      重排序模型


      语义搜索是基于上下文与搜索查询的语义相似性来检索的,但“最相似”并不一定意味着“最相关”重排序模型,例如Cohere的重排序模型,可以通过计算每个检索到的上下文与查询相关性的分数来消除不相关的搜索结果。

      如果使用重排序模型,可能需要重新调整输入到重排序器的搜索结果数量,以及您希望将多少经过重新排序的结果输入到LLM中。和嵌入模型一样,您可能需要根据您的用例来微调重排序模型。


      3.5

      语言模型微调


      LLM是生成响应的核心组件。类似于嵌入模型,根据您的需求(如开放式与专有模型、推理成本、上下文长度等),有各种各样的LLM可供选择。与嵌入模型或重排序模型一样,您可能希望尝试对LLM进行微调来适应特定用例。


      3.6

      提示工程prompt极大地影响LLM的生成结果。

      请仅基于提供的搜索结果回答问题,切勿参考其他信息!

      这一点非常重要!您的回答必须建立在提供的搜索结果之上。请解释您的答案为何基于搜索结果。

      此外,在提示中使用少量示例可以提高完成结果的质量。


      上下文长度是一个应该尝试实验的参数,虽然通过增加相关上下文可以改善RAG的性能,但如果将相关上下文放置在过多上下文的中间,可能遇到“中间迷失”效应,即LLM可能无法识别中间位置的相关上下文。

       

      04

      优化方案总结


      随着越来越多的开发人员在创建RAG流程的原型方面积累经验,讨论如何使RAG流程达到投入生产所需的性能变得更为重要。本文主要阐述了以下调优点:


      数据索引阶段中的策略:

      • 数据清洗:确保数据清洁且正确。

      • 切块:选择切块技术、切块大小(chunk_size)和切块重叠(overlap)。

      • 嵌入模型:选择嵌入模型,包括维度,以及是否进行微调。

      • 元数据:是否使用元数据以及元数据的选择。

      • 多索引:决定是否为不同的数据集使用多个索引。

      • 索引算法:ANN和向量压缩算法的选择和调整是可以进行调整的,但通常不由RAG应用开发者进行调整。

      在推理阶段(检索和生成)的策略:

      • 查询转换:尝试重新表达、HyDE或子查询。

      • 检索参数:选择搜索技术(如果启用混合搜索,则为alpha)和检索到的搜索结果数量。

      • 高级检索策略:是否使用高级检索策略,如句子窗口或自动合并检索。

      • 重排序模型:是否使用重排序模型,重排序模型的选择,输入到重排序模型的搜索结果数量,以及是否对重排序模型进行微调。

      • LLMs:LLM的选择以及是否对其进行微调。

      • 提示工程:尝试不同的措辞和少量示例。

      RAG为大模型的落地和使用提供了更多可能,但如何使用RAG又是一项关键技术,因此RAG的调优显得尤其重要。本文整理了12种调优策略,在实际场景中,还存在其他的策略,以上内容仅供参考和探讨。


      THE END


      以上便是本文的全部内容,部分内容和图片来源于网络,本文仅供学习、交流,若有侵权,请联系小编删除。

      往期精选

               

      火热

      大数据前沿系列

      热文

      数据分析-数据清洗8大类方法

      推荐

      数据建模到底是什么?

      推荐

      大数据交互式引擎之KUDU

      推荐

      态势感知系列之一:态势感知

      推荐

      2022年的网络安全宣传周发生了什么

      推荐

      IDS和IPS到底有什么区别?

      推荐

      数据建模到底是什么?

      点个“在看”表示朕

      已阅



      53AI,企业落地应用大模型首选服务商

      产品:大模型应用平台+智能体定制开发+落地咨询服务

      承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

      联系我们

      售前咨询
      186 6662 7370
      预约演示
      185 8882 0121

      微信扫码

      与创始人交个朋友

      回到顶部

       
      扫码咨询