微信扫码
与创始人交个朋友
我要投稿
数据科学是一门实验性科学。它始于“无免费午餐定理”,即不存在适用于每个问题的通用算法。
因此,数据科学家们使用实验跟踪系统来帮助调整他们机器学习项目的超参数,以实现最佳性能。
整体优化方案说明
检索增强生成(Retrieval-Augmented Generation,以下简称RAG)是一种比较有效的大模型使用场景中的补充模型能力的机制,在实践中可以通过调整其各种参数提高RAG流程的性能。类似于深度学习中的实验,数据增强技术不是超参数,而是可以调整和实验的旋钮。
本文从数据索引阶段和推理阶段分别阐述RAG流程的“超参数”和调优建议。
数据索引阶段可优化点:
数据清洗
分块
嵌入模型
元数据
多索引
索引算法
推理阶段可优化点:
查询转换
检索参数
高级检索策略
重新排序模型
语言模型微调
提示工程
请注意,本文的用例是基于文本类的RAG应用。对于多模态的RAG应用,可能需要考虑其他不同的因素。
索引阶段-优化方案
数据索引阶段是构建RAG的准备步骤,类似于机器学习中的数据清洗和预处理。数据索引阶段通常包括以下步骤:
数据收集
分块:将大量数据分割成较小的块,以便更有效地处理和管理数据。
向量化: 使用嵌入模型将每个数据块转换为向量表示这有助于在后续的检索和生成阶段中处理和分析文本。
存储:将生成的向量和相应的数据块存储在向量数据库中。
整洁:请应用一些在自然语言处理中常用的数据清洗方法。例如确保所有特殊字符被正确编码。
正确:确保信息的一致性与准确性,避免可能混淆语言模型的冲突信息。
若原始数据集不符合这样的标准,首先要做的就是将数据集清洗为符合这两条标准的数据格式,然后再进行下面的步骤。
2.2
分块
分块技术是影响分块效果的一个因素。如在LangChain中,不同的文本拆分器根据不同的逻辑拆分文档,比如按字符、标记等。这要根据你的数据类型来决定。
分块长度(chunk_size)也要具体情况具体分析:若使用场景是问答,可能需要更短的、更具体的切块;但如果是摘要,可能需要更长的切块。此外,如果一个切块太短,可能不包含足够的上下文。另一方面,如果切块太长,可能包含太多不相关的信息。
另外,还需要考虑在切块之间引入一些额外上下文的“滚动窗口”(重叠),来提高信息连贯性。
2.3
嵌入模型
虽可以直接使用通用嵌入模型,但在某些情况下,对嵌入模型进行微调以适应特定用例可能是有意义的,因为这样可以避免后期出现领域外问题。根据LlamaIndex的实验证明,微调嵌入模型通常可以导致检索评估指标提高5-10%,
但不是所有嵌入模型都可以进行微调。
2.4
元数据
2.5
多索引
2.6
索引算法
其中,有许多不同的ANN算法,例如Facebook Faiss(聚类)、Spotify Annoy(树)、Google ScaNN(向量压缩)和HNSWLIB(接近图)。这些ANN算法一般都有可以调整的参数,比如HNSW中的ef、efConstruction和maxConnections
此外,可以对索引算法启用向量压缩,使用向量压缩会损失一些精度。但是,你也可以(根据场景)对压缩算法的选择和调整进行优化。
在实践过程中,算法的参数通常已经由数据库研究团队在基准实验中进行调整了,RAG系统的开发人员通常不会改动。
推理阶段-优化方案
RAG的主要组成部分是检索和生成。本节主要讨论提升检索效果的策略(查询转换、检索参数、高级检索策略和重新排序模型)。因为相对于生成,检索对结果的影响更大。但检索也会简单涉及到一些生成的策略(LLM和提示工程)。
3.1
查询转换
RAG中,用于获取额外上下文的搜索查询也被嵌入到向量空间中,因此查询的表达方式会对搜索结果产生影响。若搜索查询没有得到满意的结果,可尝试一些查询转换技术,如:
重新表达: 使用语言模型(LLM)重新表达查询,然后再次尝试。
假设性文档嵌入(HyDE): 使用语言模型生成对搜索查询的假设响应,然后将两者一起用于检索。
子查询: 将较长的查询分解为多个较短的查询。
3.2
检索参数
检索是RAG的重要组成部分,在检索中首先要考虑的是,语义搜索是否足够满足用例,或者是否希望使用混合搜索。
在采用混合搜索的情况下,需要尝试调整混合搜索中稀疏和密集检索方法的加权聚合。因此,调整参数alpha将变得至关重要。
此外,检索结果的数量也很重要。检索到的「上下文数量」将影响「所使用的上下文窗口的长度」。同时,若使用重排序模型,则需要考虑将多少上下文输入到模型中。
虽然语义检索相似性度量方式可以设置,但应根据所使用的嵌入模型来修改,而不是进行不必要的实验。如text-embedding-ada-002支持余弦相似度,而multi-qa-MiniLM-l6-cos-v1支持余弦相似度、点积和欧几里得距离。
3.3
高级检索策略
句子窗口检索(Sentence-window retrieval):不仅检索相关句子,还要检索句子之前和之后的窗口。
自动合并检索(Auto-merging retrieval):文档以类似树状结构组织。查询时,可以将单独但相关的较小块合并成更大的上下文。
3.4
重排序模型
如果使用重排序模型,可能需要重新调整输入到重排序器的搜索结果数量,以及您希望将多少经过重新排序的结果输入到LLM中。和嵌入模型一样,您可能需要根据您的用例来微调重排序模型。
3.5
语言模型微调
3.6
提示工程prompt极大地影响LLM的生成结果。
请仅基于提供的搜索结果回答问题,切勿参考其他信息!
这一点非常重要!您的回答必须建立在提供的搜索结果之上。请解释您的答案为何基于搜索结果。
此外,在提示中使用少量示例可以提高完成结果的质量。
上下文长度是一个应该尝试实验的参数,虽然通过增加相关上下文可以改善RAG的性能,但如果将相关上下文放置在过多上下文的中间,可能遇到“中间迷失”效应,即LLM可能无法识别中间位置的相关上下文。
优化方案总结
随着越来越多的开发人员在创建RAG流程的原型方面积累经验,讨论如何使RAG流程达到投入生产所需的性能变得更为重要。本文主要阐述了以下调优点:
数据索引阶段中的策略:
数据清洗:确保数据清洁且正确。
切块:选择切块技术、切块大小(chunk_size)和切块重叠(overlap)。
嵌入模型:选择嵌入模型,包括维度,以及是否进行微调。
元数据:是否使用元数据以及元数据的选择。
多索引:决定是否为不同的数据集使用多个索引。
索引算法:ANN和向量压缩算法的选择和调整是可以进行调整的,但通常不由RAG应用开发者进行调整。
在推理阶段(检索和生成)的策略:
查询转换:尝试重新表达、HyDE或子查询。
检索参数:选择搜索技术(如果启用混合搜索,则为alpha)和检索到的搜索结果数量。
高级检索策略:是否使用高级检索策略,如句子窗口或自动合并检索。
重排序模型:是否使用重排序模型,重排序模型的选择,输入到重排序模型的搜索结果数量,以及是否对重排序模型进行微调。
LLMs:LLM的选择以及是否对其进行微调。
提示工程:尝试不同的措辞和少量示例。
RAG为大模型的落地和使用提供了更多可能,但如何使用RAG又是一项关键技术,因此RAG的调优显得尤其重要。本文整理了12种调优策略,在实际场景中,还存在其他的策略,以上内容仅供参考和探讨。
THE END
以上便是本文的全部内容,部分内容和图片来源于网络,本文仅供学习、交流,若有侵权,请联系小编删除。
往期精选
火热
热文
推荐
推荐
推荐
推荐
推荐
推荐
点个“在看”表示朕
已阅
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-08-18
当产品经理谈到用LLM Agent构建新一代智能体的时候,他们在说什么?
2024-08-15
对话AI教育从业者们:AI如何解决因材施教的难题?
2024-08-03
工业应用中的向量数据库与知识向量化存储方案
2024-07-25
两大深度学习框架TensorFlow与PyTorch对比
2024-07-17
让生成式 AI 触手可及:NVIDIA NIM on VKE 部署实践
2024-07-16
中文大模型基准测评2024上半年报告
2024-07-16
一文看懂人工智能的起源、发展、三次浪潮与未来趋势
2024-07-14
"自拍" 秒变 "证件照" 看Coze如何实现
2024-05-14
2024-04-26
2024-05-22
2024-04-12
2024-07-18
2024-03-30
2024-05-10
2024-08-13
2024-04-25
2024-04-26