【NLP】RAG 应用中的调优策略

检索增强生成应用程序的调优策略

没有一种放之四海而皆准的算法能够最好地解决所有问题。

本文通过数据科学家的视角审视检索增强生成(RAG)管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似,例如,数据增强技术不是超参数,而是可以调整和实验的旋钮,本文还将介绍您可以应用的不同策略,这些策略本身不是超参数。

本文涵盖以下按相关阶段排序的“超参数”。在RAG 管道的

摄取阶段,您可以通过以下方式实现性能改进:

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

在推理阶段(检索和生成),您可以调整:

  • 查询转换
  • 检索参数
  • 高级检索策略
  • 重新排序模型
  • LLM
  • 及时工程

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

摄取阶段

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

  1. 收集数据
  2. 块数据
  3. 生成块的向量嵌入
  4. 将向量嵌入和块存储在向量数据库中

首先对文档进行分块,然后对块进行嵌入,并将嵌入存储在向量数据库中

RAG 管道的摄取阶段

本节讨论有影响力的技术和超参数,您可以应用和调整这些技术和超参数,以提高推理阶段检索到的上下文的相关性。

数据清洗

与任何数据科学管道一样,数据质量会严重影响 RAG 管道中的结果 。在继续执行以下任何步骤之前,请确保您的数据满足以下条件:

  • 清洗:至少应用自然语言处理中常用的一些基本数据清理技术,例如确保所有特殊字符都正确编码。
  • 准确:确保您的信息一致且事实准确,以避免信息冲突使您的LLM感到困惑。

分块

对文档进行分块是 RAG 管道中外部知识源的重要准备步骤,这可能会影响性能 。它是一种生成逻辑上连贯的信息片段的技术,通常是将长文档分解成较小的部分(但它也可以将较小的片段组合成连贯的段落)。

您需要考虑的一项是分块技术的选择。例如,在LangChain中,不同的文本拆分器通过不同的逻辑来拆分文档,例如按字符、令牌等。这取决于您拥有的数据类型。例如,如果您的输入数据是代码,则您将需要使用不同的分块技术,如果它是 Markdown 文件,您将需要使用不同的分块技术。

块 ( chunk_size)的理想长度取决于您的用例:如果您的用例是问答,您可能需要较短的特定块,但如果您的用例是摘要,您可能需要更长的块。此外,如果块太短,它可能无法包含足够的上下文。另一方面,如果块太长,它可能包含太多不相关的信息。

此外,您需要考虑块之间的“滚动窗口”( overlap)以引入一些额外的上下文。

嵌入模型

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

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

虽然您可以开箱即用地使用通用嵌入模型,但在某些情况下,根据您的特定用例微调嵌入模型可能是有意义的,以避免稍后出现域外问题 。根据 LlamaIndex 进行的实验,微调嵌入模型可以使检索评估指标的性能提高 5-10% 。

请注意,您无法微调所有嵌入模型(例如,OpenAItext-ebmedding-ada-002目前无法微调)。

元数据

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

多重索引

如果元数据不足以提供附加信息来逻辑地分隔不同类型的上下文,您可能需要尝试使用多个索引。例如,您可以对不同类型的文档使用不同的索引。请注意,您必须在检索时合并一些索引路由。

索引算法

为了实现大规模快速相似性搜索,矢量数据库和矢量索引库使用近似最近邻 (ANN) 搜索而不是 k 最近邻 (kNN) 搜索。顾名思义,ANN 算法近似最近邻,因此可能不如 kNN 算法精确。。

您可以尝试不同的 ANN 算法,例如Facebook Faiss(聚类)、Spotify Annoy(树)、Google ScaNN(矢量压缩)和HNSWLIB(邻近图)。此外,许多 ANN 算法都有一些您可以调整的参数,例如HNSW的efefConstructionmaxConnections

此外,您可以为这些索引算法启用矢量压缩。与 ANN 算法类似,矢量压缩会损失一些精度。但是,根据矢量压缩算法的选择及其调整,您也可以对此进行优化。

然而,在实践中,这些参数已经由向量数据库和向量索引库的研究团队在基准测试过程中调整,而不是由 RAG 系统的开发人员调整。但是,如果您想尝试使用这些参数来发挥最后的性能,我建议您从这篇文章开始:

推理阶段(检索和生成)

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

标准 RAG 架构

RAG 管道的推理阶段

查询转换

由于在 RAG 管道中检索附加上下文的搜索查询也嵌入到向量空间中,因此其措辞也会影响搜索结果。因此,如果您的搜索查询没有产生令人满意的搜索结果,您可以尝试各种查询转换技术,例如:

  • 重新措辞:使用LLM重新措辞查询并重试。
  • 假设文档嵌入 (HyDE):使用 LLM 生成对搜索查询的假设响应,并将两者用于检索。
  • 子查询:将较长的查询分解为多个较短的查询。

检索参数

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

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

此外,要检索的搜索结果的数量也将发挥重要作用。检索到的上下文数量将影响所使用的上下文窗口的长度。此外,如果您使用重新排名模型,则需要考虑向模型输入多少上下文。

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

高级检索策略

从技术上讲,本节可以单独成一篇文章。对于本概述,我们将尽可能保持简洁。

本节的基本思想是用于检索的块不一定与用于生成的块相同。理想情况下,您可以嵌入较小的块进行检索,但检索更大的上下文。

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

重新排列模型

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

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

如果您使用重新排序模型,您可能需要重新调整重新排序输入的搜索结果数量以及您想要输入 LLM 的重新排序结果数量。

与嵌入模型一样,您可能需要尝试根据您的特定用例微调重新排序器

LLM

LLM是生成回复的核心组件。与嵌入模型类似,您可以根据自己的要求选择多种 LLM,例如开放模型与专有模型、推理成本、上下文长度等。

与嵌入模型或重新排序模型一样,您可能需要尝试根据您的特定用例对LLM 进行微调,以纳入特定的措辞或语气。

及时工程

你如何表达或设计你的提示将显着影响LLM完成。

请仅根据搜索结果给出您的答案,不要考虑其他任何内容!
很重要!您的答案必须基于所提供的搜索结果。
请解释为什么您的答案基于搜索结果!

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

正如检索参数中提到的,输入到提示中的上下文数量是您应该尝试的一个参数 。虽然 RAG 管道的性能可以随着相关上下文的增加而提高,但您也可能会遇到“迷失在中间”的效果,即如果将相关上下文放置在许多上下文的中间,LLM 就无法识别相关上下文。上下文。

概括

随着越来越多的开发人员获得 RAG 管道原型设计的经验,讨论将 RAG 管道引入生产就绪性能的策略变得更加重要。本文讨论了不同的“超参数”以及您可以根据相关阶段在 RAG 管道中调整的其他旋钮:

本文涵盖了摄取截断的以下策略:

  • 数据清理:确保数据干净且正确。
  • 分块:选择分块技术、块大小 ( chunk_size) 和块重叠 ( overlap)。
  • 嵌入模型:嵌入模型的选择,包括。维度,以及是否对其进行微调。
  • 元数据:是否使用元数据以及元数据的选择。
  • 多重索引:决定是否针对不同的数据集合使用多个索引。
  • 索引算法:可以调整 ANN 和矢量压缩算法的选择和调整,但通常不由从业者进行调整。

以及推理截断(检索和生成)的以下策略:

  • 查询转换:尝试改写、HyDE 或子查询。
  • 检索参数:搜索技术的选择(alpha如果启用了混合搜索)和检索的搜索结果的数量。
  • 高级检索策略:是否使用高级检索策略,例如句子窗口或自动合并检索。
  • 重新排序模型:是否使用重排序模型、重排序模型的选择、输入重排序模型的搜索结果数量以及是否微调重排序模型。
  • LLM:LLM 的选择以及是否对其进行微调。
  • 及时工程:尝试不同的措辞和少量示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/238490.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatisPlus简介

1 简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、特性 无侵入 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑…

Java+Swing: 从数据库中查询数据并显示在表格中 整理11

分析:要想从数据库中查询数据并分页展示到表格中,我觉得应该按照这个思路:首先就是发起请求,此时需要向数据库中传递三个参数:当前页码(pageNum)、每一页的数量(pageSize&#xff09…

无代码开发让合利宝支付与CRM无缝API集成,提升电商用户运营效率

合利宝支付API的高效集成 在当今快速发展的电子商务领域,电商平台正寻求通过高效的支付系统集成来提升用户体验和业务处理效率。合利宝支付,作为中国领先的支付解决方案提供者,为电商平台提供了一个高效的API连接方案。这种方案允许无代码开…

项目计划书

项目开发计划包括项目描述、项目组织、成本预算、人力资源估算、设备资源计划、沟通计划、采购计划、风险计划、项目过程定义及项目的进度安排和里程碑、质量计划、数据管理计划、度量和分析计划、监控计划和培训计划等。 软件全套资料获取:点我获取

炫酷CSS加载动画

HTML结构 首先是HTML代码&#xff0c;定义了一个类名container的<div>容器&#xff1a; 1.在这个容器里面包含了一些加载器.loader&#xff0c;每个加载器都具有不同的旋转角度自定义属性--r(1~4)&#xff0c;而每个加载器里面有20个<span>元素&#xff0c;并且也都…

vue编辑页面提示 this file does not belong to the project

背景 打开vue项目工程 文件夹被锁定&#xff08;有黄色背景&#xff09;&#xff0c;编辑页面时&#xff0c;报错。 报错提示&#xff1a; vue编辑页面提示 this file does not belong to the project 原因 一不下心打开了错误的文件包 解决方案 1、删除.idea文件夹 2、…

光学仿真 | 推动高精度且微型化摄像头以满足市场需求

光学设计人员面临着一项持续挑战&#xff0c;即满足消费者对摄像头等体积更小、更轻量化设备的需求&#xff0c;同时要不断提高图像质量。一般来说&#xff0c;能否获得最佳质量取决于镜头数量&#xff1a;可装入设备的镜头越多&#xff0c;分辨率和色彩精度就越高。 就智能手机…

隐语开源|周爱辉:隐语 TEE 技术解读与跨域管控实践

“隐语”是开源的可信隐私计算框架&#xff0c;内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择&#xff0c;提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 11月25日&#xff0c;「隐语开源社区 Meetup西安站」顺利举办&…

Pinia无废话,快速上手

Pinia无废话&#xff0c;快速上手 Vue3 状态管理 - Pinia 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到Vue项目 后面在实际开发项目的时候&#xff0c;Pinia可以在项目创建时自动添加&#xff0c;现…

项目播报 | 河北信投数字科技签约璞华科技,以数字化方式全面提升采购效率

近日&#xff0c;璞华科技签约河北信投数字科技有限责任公司&#xff08;以下简称“河北信投数字科技”&#xff09;。璞华科技基于璞华采云链产品帮助客户打造采购数字化全景解决方案&#xff0c;实现智慧采购数字化转型升级。 本次强强联合&#xff0c;双方就采购数字化平台建…

【产品设计】软件系统三基座之三:用户管理

软件系统中的用户管理该如何做&#xff1f;系统设计过程中要考虑哪几方面&#xff1f;用户体验设计从哪些点来考察&#xff1f; 软件系统三基座包含&#xff1a;权限管理、组织架构、用户管理。基于权限控制、组织搭建&#xff0c;用户可以批量入场。 一、用户管理 在系统构建…

深入理解RBAC权限系统

最近&#xff0c;一位朋友在面试中被问及如何设计一个权限系统。我们注意到目前许多后台管理系统&#xff08;包括一些热门的如若依快速开发平台&#xff09;都采用了RBAC访问控制策略。该策略通过将权限授予角色&#xff0c;然后将角色分配给用户&#xff0c;从而实现对系统资…

【Spark精讲】Spark任务运行流程

Spark任务执行流程 部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交任务与Driver进程在同一个节点上&#xff0c;而cluster模式提交任务与Driver进程不在同一个节点。 Client模式 Clinet模式是在spark-submit提交任务的节点上运行Driver进程。 执行流…

day01、什么是数据库系统?

数据库系统介绍 1.实例化与抽象化数据库系统2.从用户角度看数据库管理系统的功能2.1 数据库定义功能2.2 数据库操纵2.3 数据库控制2.4 数据库维护功能2.5 数据库语言与高级语言 3.从系统&#xff1a;数据库管理系统应具有什么功能 来源于战德臣的B站网课 1.实例化与抽象化数据库…

Git篇---第五篇

系列文章目录 文章目录 系列文章目录前言一、提交对象包含什么?二、如何在Git中创建存储库?三、怎样将 N 次提交压缩成一次提交?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分…

D30|继续贪心

别太贪心了&#xff0c;做出一道贪心就应该知足呜呜呜 860.柠檬水找零 初始思路&&题解复盘: 确实不难&#xff0c;按照这个思路书写即可。 情况一&#xff1a;账单是5&#xff0c;直接收下。 情况二&#xff1a;账单是10&#xff0c;消耗一个5&#xff0c;增加一个10…

『 Linux 』进程地址空间概念

文章目录 &#x1fad9; 前言&#x1fad9; 进程地址空间是什么&#x1fad9; 写时拷贝&#x1fad9; 可执行程序中的虚拟地址&#x1fad9; 物理地址分布方式 &#x1fad9; 前言 在c/C中存在一种内存的概念; 一般来说一个内存的空间分布包括栈区,堆区,代码段等等; 且内存是…

长三角区域部分行业企业是如何实践招标采购供应链系统建设的?

长三角城市群是我国经济发展最活跃、开放程度最高、创新能力最强的区域之一&#xff0c;在国家现代化建设大局和全方位开放格局中具有举足轻重的战略地位。今年前三季度&#xff0c;长三角实现地区生产总值约22万亿元&#xff0c;占全国经济总量的24&#xff05;。 采购作为供…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

极兔速递查询,极兔速递单号查询,筛选出指定派件员的单号

批量查询极兔速递单号的物流信息&#xff0c;并将指定派件员的单号筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff…