RAG应用程序的12种调优策略:使用“超参数”和策略优化来提高检索性能

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文从数据科学家的角度来研究检索增强生成(retrieve - augmented Generation, RAG)管道。讨论潜在的“超参数”,这些参数都可以通过实验来提高RAG管道的性能。与本文还将介绍可以应用的不同策略,这些策略虽然不是超参数,但对性能也会产生很大的影响。

本文将介绍以下索引阶段的“超参数”。

  • 数据清理
  • 分块
  • 嵌入模型
  • 元数据
  • 多索引
  • 索引算法

在推理阶段(检索和生成),可以通过一下策略进行调优:

  • 查询转换
  • 检索参数
  • 高级检索策略
  • 评估模型
  • llm
  • 提示工程

注意,本文涵盖了RAG的文本用例。对于多模式RAG应用程序,可能需要考虑不同的因素。

数据索引

数据的索引摄取阶段是构建RAG管道的准备步骤,类似于ML管道中的数据清理和预处理步骤。通常,摄入阶段包括以下步骤:

  • 收集数据
  • 数据分块
  • 生成块的矢量嵌入
  • 在矢量数据库中存储矢量嵌入和块

本节讨论可以应用和调优的有效技术和超参数,以便在推理阶段提高检索上下文的相关性。

1、数据清理

与任何数据科学管道一样,数据的质量严重影响RAG管道中的结果[8,9]。

应用一些自然语言处理中常用的基本数据清理技术,例如确保所有特殊字符都被正确编码。确保信息是一致和准确的,以避免相互矛盾的信息混淆你的LLM。

2、文本分块

对的文档进行分块处理是在RAG管道中的外部知识来源的必要准备步骤,这可能会影响性能[1,8,9]。它通常通过将长文档分解成更小的部分(但它也可以将更小的片段组合成连贯的段落)。

需要考虑的一个问题是分块技术的选择。例如,在LangChain中,不同的文本分割器通过不同的逻辑(如字符、标记等)来分割文档。这取决于拥有的数据类型。例如,如果输入数据是代码而不是Markdown文件,则需要使用不同的分块技术。

块的理想长度(chunk_size)取决于用例:如果用例是回答问题,可能需要更短的特定块,但是如果用例是总结,则可能需要更长的块。此外如果一个块太短,它可能没有包含足够的上下文,如果一个块太长,它可能包含太多不相关的信息。

初上面基本要求外,还需要考虑块之间的“滚动窗口”(重叠),以引入一些额外的上下文。

3、嵌入模型

嵌入模型是检索的核心。嵌入的质量严重影响检索结果[1,4]。通常,生成的嵌入的维数越高,嵌入的精度就越高。

要了解有哪些可用的替代嵌入模型,可以查看大规模文本嵌入基准(MTEB)排行榜,它涵盖了164个文本嵌入模型(在撰写本文时)。

在某些情况下,可能需要根据特定用例对嵌入模型进行微调以避免稍后出现域外问题[9]。根据LlamaIndex进行的实验,微调嵌入模型可以使检索评估指标的性能提高5-10%[2]。

4、元数据

在矢量数据库中存储矢量嵌入时,一些矢量数据库允许将它们与元数据(或未向量化的数据)一起存储。用元数据标注向量嵌入有助于对搜索结果进行额外的后处理,例如元数据过滤[1,3,8,9]。例如,可以添加元数据,例如日期、章节或子章节引用。

5、多索引

如果元数据不足以提供额外的信息来逻辑地分离不同类型的上下文,可能需要尝试使用多个索引[1,9]。例如可以对不同类型的文档使用不同的索引。如果使用多索引则需要在检索时合并一些索引路由[1,9]。

6、索引算法

为了在规模上实现快速的相似性搜索,矢量数据库和矢量索引库使用近似最近邻(ANN)搜索而不是k最近邻(kNN)搜索。ANN算法近似于最近邻,但可能不如kNN算法精确。

可以尝试不同的人工神经网络算法,比如Facebook Faiss(聚类)、Spotify Annoy(树)、Google ScaNN(矢量压缩)和HNSWLIB(接近图)。此外这些人工神经网络算法都有一些可以调优的参数,例如用于HNSW的ef、efConstruction和maxConnections[1]。

如果数据量比较大哦,还可以为这些索引算法启用矢量压缩。与人工神经网络算法类似,矢量压缩会损失一些精度。但是根据矢量压缩算法的选择及其调优,也可以对其进行优化。

在实践中,这些参数已经由矢量数据库和矢量索引库的研究团队在基准测试实验期间进行了调整,而不是由RAG系统的开发人员进行调整。但是如果想尝试使用这些参数来挤出性能的最后一点,也是可以试试的。

推理阶段(检索生成)

RAG管道的主要组成部分是检索组件和生成组件。本节主要讨论改进检索的策略(查询转换、检索参数、高级检索策略和重新排序模型),因为这是两者中更有影响力的组件。同时也简要地探讨了提高生成的一些策略(LLM和提示工程)。

1、查询转换

由于在RAG管道中检索附加上下文的搜索查询也嵌入到向量空间中,因此其关键词也会影响搜索结果。如果搜索查询没有得到令人满意的搜索结果,可以尝试各种查询转换技术[5,8,9],例如:

查询改写:使用LLM重新措辞查询,然后再试一次。

假设文档嵌入(HyDE):使用LLM生成对搜索查询的假设响应,并将两者用于检索。

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

2、检索参数

检索是RAG管道的重要组成部分。首先要考虑的是,语义搜索是否足以满足用例,或者是否想尝试混合搜索。

在后一种情况下,需要在混合搜索中对稀疏和密集检索方法的聚合进行加权试验[1,4,9]。因此,有必要调整参数alpha,它控制语义(alpha = 1)和基于关键字的搜索(alpha = 0)之间的权重。

要检索的搜索结果的数量将发挥重要作用。检索上下文的数量将影响所使用上下文窗口的长度(参见提示工程)。如果使用重新排序模型,则需要考虑要向模型输入多少上下文(请参阅重新排序模型)。

虽然用于语义搜索的相似度度量是一个可以更改的参数,但不应该进行实验,而应该根据所使用的嵌入模型设置它(例如,text-embedding-ada-002支持余弦相似度,multi-qa-MiniLM-l6-cos-v1支持余弦相似度,点积和欧几里得距离)。

3、高级检索策略

从技术上讲,这一节可以单独写一篇文章。这里我们只做概述,因为我也不是搜索方面的专家

高级检索的基本思想是,用于检索的块不必与用于生成的块相同。理想情况下,检索该嵌入较小的块(参见分块),但是如果检索上下文则需要较大的块。[7]

不只是检索相关的句子,而是检索前后合适句子的窗口。并将文档以树状结构组织。在查询时,可以将独立但相关的较小块合并到更大的上下文中。

4、重排序模型

虽然语义搜索根据上下文与搜索查询的语义相似度来检索上下文,但“最相似”并不一定意味着“最相关”。重新排序模型,如Cohere的重新排序模型,可以通过计算每个检索上下文的查询相关性的分数来帮助消除不相关的搜索结果[1,9]。

“最相似”并不一定意味着“最相关”

如果使用的是重排序模型,则可能需要重新调整用于重新排序的输入的搜索结果数量,以及希望将多少重新排序的结果提供给LLM。

与嵌入模型一样,特定用例对重新排序器可以进行微调。

5、LLM

LLM是生成响应的核心组件。与嵌入模型类似,可以根据自己的需求选择广泛的llm,例如开放模型与专有模型、推理成本、上下文长度等。[1]

与嵌入模型或重新排序模型一样对LLM进行微调,以适应您的特定用例,以合并特定的措辞或语气。

6、提示工程

如何表达或设计提示将显著影响LLM的完成[1,8,9]。

 Please base your answer only on the search results and nothing else!

 Very important! Your answer MUST be grounded in the search results provided. 
 Please explain why your answer is grounded in the search results!

此外,在提示中使用少量示例可以提高补全的质量。

正如检索参数中提到的,输入提示符的上下文数量是应该试验的一个参数[1]。虽然RAG管道的性能可以随着相关上下文的增加而提高,但也可能遇到“Lost in the Middle”[6]的效果,即如果将相关上下文置于许多上下文的中间,则LLM无法识别相关上下文。

总结

本文讨论了不同的“超参数”和可以根据相关阶段在RAG管道中调整的其他参数:

  1. 数据清理:确保数据干净、正确。
  2. 分块:选择分块技术,块大小(chunk_size)和块重叠(重叠)。
  3. 嵌入模型:选择嵌入模型,包括维度,以及是否对其进行微调。
  4. 元数据:是否使用元数据和选择元数据。
  5. 多索引:决定是否对不同的数据集合使用多个索引。
  6. 索引算法:人工神经网络和矢量压缩算法的选择和调整可以调整,但通常不是由应用调整。
  7. 查询转换:尝试改写、HyDE或子查询。
  8. 检索参数:搜索技术的选择(如果启用了混合搜索,则为alpha)和检索的搜索结果的数量。
  9. 高级检索策略:是否使用高级检索策略,如句子窗口或自动合并检索。
  10. 重排名模型:是否使用重排名模型,重排名模型的选择,输入重排名模型的搜索结果数量,是否对重排名模型进行微调。
  11. LLM:LLM的选择以及是否对其进行微调。
  12. 提示工程:使用不同的措辞和少量的例子进行实验。

引用资料

[1]Connor Shorten and Erika Cardenas (2023). Weaviate Blog. An Overview on RAG Evaluation (accessed Nov. 27, 2023)

[2]Jerry Liu (2023). LlamaIndex Blog. Fine-Tuning Embeddings for RAG with Synthetic Data HUB (accessed Nov. 28, 2023)

[3] LlamaIndex Documentation (2023). Building Performant RAG Applications for Production (accessed Nov. 28, 2023)

[4] Voyage AI (2023). Embeddings Drive the Quality of RAG: A Case Study of Chat.LangChain (accessed Dec. 5, 2023)

[5] LlamaIndex Documentation (2023) DEEP HUB. Query Transformations (accessed Nov. 28, 2023)

[6] Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2023). Lost in the middle: How language models use long contexts. arXiv preprint arXiv:2307.03172.

[7] DeepLearning.AI (2023). Building and Evaluating Advanced DEEP RAG HUB Applications (accessed Dec 4, 2023)

[8] Ahmed Besbes (2023). Towards Data Science DEEP. Why Your RAG Is Not Reliable in a Production Environment (accessed Nov. 27, 2023)

[9] Matt Ambrogi(2023). Towards Data Science. 10 Ways to Improve the Performance of Retrieval Augmented Generation Systems DEEP (accessed Nov. 27, 2023)

[10] MTEB https://huggingface.co/spaces/mteb/leaderboard

https://avoid.overfit.cn/post/548ad625830a4645beba60a37a2b59d6

作者:Leonie Monigatti

目录
相关文章
|
机器学习/深度学习 数据采集 人工智能
几周速通大模型实习,你需要做什么?
这是一篇关于转行进入大模型AI应用开发领域的经验分享。作者凭借自身两年开发经验成功转型,并详细列出学习路线:从Python语言、框架(如LangChain、Flask、FastAPI)到NLP、LLM微调,涉及强化学习、数据清洗、RAG调优等技术。他还提到论文复现、量化模型的重要性,以及高学历和顶会论文对进入顶级公司(如九坤、幻方)的帮助。文中提及面试经历和技术挑战,强调技术深度与努力的必要性。最后,作者鼓励读者坚持学习,并计划全平台发布教程。
Ubuntu18.04设置系统默认音频设备:使用pavucontrol命令
Ubuntu18.04设置系统默认音频设备:使用pavucontrol命令
2667 0
Ubuntu18.04设置系统默认音频设备:使用pavucontrol命令
|
9月前
|
数据可视化 物联网 开发者
深度解析四大LLM微调工具:从单卡到千亿级训练的四大解决方案
本文详解大语言模型微调四大工具——Unsloth、Axolotl、LlamaFactory、DeepSpeed,覆盖从单卡实验到万亿参数分布式训练场景,助你掌握主流框架选型策略,提升微调效率。建议点赞收藏。
3147 1
|
人工智能 JSON API
使用 Qwen 生成数据模型和进行结构化输出
本教程展示如何使用CAMEL框架和Qwen模型生成结构化数据。CAMEL是一个强大的多智能体框架,支持复杂的AI任务;Qwen由阿里云开发,具备自然语言处理等先进能力。教程涵盖安装、API密钥设置、定义Pydantic模型,并演示了通过Qwen生成JSON格式的学生信息。最后,介绍了如何利用Qwen生成多个随机学生信息的JSON格式数据。欢迎在[CAMEL GitHub](https://github.com/camel-ai/camel)上为项目点星支持。
4299 70
|
12月前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
2744 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
机器学习/深度学习 人工智能 Serverless
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
满血 DeepSeek 免费用!支持联网搜索!创作声明:真人攥写-非AI生成,Written-By-Human-Not-By-AI
7237 11
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
|
人工智能 并行计算 监控
深入剖析 Qwen2.5 - 32B 模型在 VLLM 上的单机三卡部署与运行
本文深入探讨了Qwen2.5 - 32B模型在VLLM框架上的部署过程,从模型下载、启动命令、资源占用分析到GPU资源分配及CUDA图应用,详述了大模型运行的挑战与优化策略,强调了硬件资源规划与技术调优的重要性。
8730 2
|
人工智能 数据可视化 API
FastGPT 基于Higress 聚合 LLM 网关的最佳实践
本文介绍了Fast GPT的产品形态和设计理念,重点讨论了大模型的幻觉问题及其对应用落地的影响。Fast GPT通过结合工作流的强逻辑性和AI的理解能力,提升系统的稳定性和可靠性。文章还详细描述了Fast GPT的工作流节点、知识库管理及AI网关的功能,并展示了几个实际应用场景,如私人助手、图文生成和文档处理等。最后,探讨了如何通过引入云函数和Copilot简化代码编写,实现无代码编排的工作流解决方案,提升用户体验。
|
机器人 API 开发工具
阿里云百炼应用实践系列-基于LlamaIndex的文档问答助手
本文以阿里云百炼官方文档问答助手为例,介绍如何基于阿里云百炼平台打造基于LlamaIndex的RAG文档问答产品。我们基于阿里云百炼平台的底座能力,以官方帮助文档为指定知识库,搭建了问答服务,支持钉钉、Web访问。介绍了相关技术方案和主要代码,供开发者参考。
1936 22