针对 LLM 应用程序优化 RAG

news2024/11/27 9:44:32

前言

大型语言模型 (LLM)(如 GPT-4)在生成类似人类的文本方面表现出了令人印象深刻的能力。然而,在保留事实知识方面,它们仍然面临挑战。这就是检索增强生成 (RAG) 的作用所在——将 LLM 的生成能力与外部知识源相结合。RAG 已成为一种有前途的技术,可在保持 LLM 流畅性的同时提高其事实基础。

让我们深入了解 RAG 的世界,讨论它的工作原理、应用、优化 RAG 模型的策略以及未来前景。

我们将介绍:

  • RAG 概述及其如何改善 LLM
  • RAG 模型架构,例如 REALM、RAG-Token 和 Fusion-in-Decoder
  • RAG 模型的训练目标——上下文学习、双编码器等。
  • RAG 在问答、搜索、对话系统等领域的应用
  • 优化 RAG — 模型架构、检索技术、训练方案、提示
  • RAG 研究的当前挑战和未来方向

那么让我们开始了解如何优化检索增强生成以构建更强大、更真实的 LLM!

什么是检索增强生成 (RAG)?

检索增强生成将大型语言模型与检索机制相结合,在文本生成过程中为 LLM 提供相关知识。

在 RAG 框架中,LLM 与信息检索系统配对。当 LLM 收到提示时,检索器会查看知识源(数据库、文本段落等)以查找相关上下文。此上下文与原始提示一起提供给 LLM,以生成输出。

例如,假设我们向基于 LLM 的 QA 系统提供提示“法国的首都是哪里?”。LLM 本身可能不在其参数中包含这些事实知识。但使用 RAG,检索器可以获取诸如“巴黎是法国的首都和人口最多的城市”之类的证据。此上下文为 LLM 提供了生成输出“巴黎”所需的信息。

RAG 的主要优势在于,它允许 LLM 将其输出建立在外部知识的基础上。这克服了其固定参数内存的局限性。即使 LLM 从未针对该信息进行过明确的训练,RAG 模型也可以不断从知识源中检索相关信息。

现在让我们看一下一些流行的 RAG 模型架构,旨在优化这种知识的检索和整合。

RAG 模型架构

实现检索增强生成模型有几个主要范例:

领域

REALM(检索增强语言模型)训练检索器模块以及掩码语言模型目标。检索器学习根据提示从知识源中查找相关段落。这些段落与提示连接在一起,以帮助 LLM 填写掩码标记。

例如,给出“[MASK] 的首都是欧洲人口稠密的城市”这样的提示,检索器可能会提取相关段落,例如“法国首都巴黎是欧洲主要城市”。这为填写“法国”作为面具标记提供了线索。

在开放域问答方面,REALM 的性能比单独的 LLM 有显著提升。检索器和 LLM 进行了端到端联合优化。

RAG 代币

RAG-Token 使用特殊的 [RAG] 标记将检索直接纳入 LLM 词汇表。对于给定的提示,检索器会找到相关段落,并将其压缩为单个 [RAG] 标记。

例如,“巴黎是法国的首都和人口最多的城市”这段话可以浓缩为 [RAG: capital_of_france=Paris] 这样的标记。此标记与输入提示连接在一起,为 LLM 提供相关上下文。

RAG-Token 模型在生成任务上端到端地优化了 LLM 和基于编码器-解码器的检索器。这种紧密集成使它在许多 NLP 数据集上表现出色。

解码器融合

解码器融合将检索到的证据直接合并到仅解码器的转换器语言模型的注意层中。与基于连接的方法相比,这允许检索到的上下文和提示之间进行更紧密的集成。

例如,检索到的段落和提示被连接起来并输入到解码器中。注意力可以同时在提示、检索到的上下文和之前生成的标记之间流动。这提高了对话问答任务的性能。

我们可以看到,RAG 架构中的一个关键设计选择是如何将检索到的上下文与提示集成并输入到 LLM。像 Fusion-in-Decoder 这样的更紧密的融合可以带来更好的基础,但代价是模型更复杂。正确的方法取决于最终应用。

现在让我们看一些有趣的应用,与标准 LLM 相比,RAG 的优势在于。

RAG 模型的应用

检索增强型 LLM 已被证明非常有效的领域:

开放领域问答

REALM 等 RAG 模型已经在 Natural Questions、WebQuestions 等开放域 QA 数据集上取得了最佳效果。检索器会找到相关的维基百科段落来回答问题,这有助于提高普通 LLM 的准确性。

对话系统

RAG 可以帮助对话代理牢记对话背景和外部知识。过去的用户话语和检索到的结果可以融合到 LLM 中以生成一致的响应。

语义搜索

RAG 检索器使用的双编码器可以索引大型语料库以进行语义搜索。给定输入查询,可以使用编码表示显示相关内容。

多跳推理

检索链式证据段落允许 RAG 模型对复杂 QA 和程序文本生成等任务执行多步骤推理。

资源匮乏的环境

检索器组件提供了额外的监督功能,可以帮助 RAG 模型即使在 LLM 训练数据较少的情况下也能进行泛化。这使得它们适合资源匮乏的领域。

个性化

RAG 可根据检索器索引中编码的用户上下文、个人资料和过去的交互来实现个性化输出。

我们可以看到,与标准语言模型相比,RAG 在不同应用中提供了许多优势。现在让我们看看优化 RAG 模型的一些技巧。

优化 RAG 模型

以下是优化检索增强生成模型的一些关键策略:

模型架构设计

如前所述,检索器与 LLM 交互的架构设计至关重要。像 Fusion-in-Decoder 这样的更紧密的融合会有所帮助,但更复杂的架构可能更难训练。权衡利弊很重要。

LLM 和检索器都具有更高的神经网络容量也有帮助。像 Ragulator 这样的模型可以大大提高检索器的容量,从而提高性能。

检索技术

使用密集、可学习编码的更好的检索模型比 TF-IDF 等稀疏方法的检索质量更高。RAG Token 等交叉注意编码器在此表现良好。

在多个索引结构上进行分层检索也有帮助。例如,先从压缩索引中检索,然后再从全文索引中检索。

培训计划

端到端联合微调 LLM 和检索器,而不是单独训练它们,可以提高结果。在端到端 RAG 训练之前对检索器进行预训练也有帮助。

针对掩码语言建模等其他目标进行多任务训练也会有所帮助。创建噪音更少的更干净的训练数据集也能提高通用性。

提示

使用演示来提示 RAG 模型以特定风格生成可提高连贯性。例如,在提示之前提供示例输出可指导模型。

提示工程提供更多背景信息并减少歧义也有帮助。使用多种提示进行多提示训练可防止对某些提示细微差别过度拟合。

知识来源

更高质量、更密集、覆盖范围更广的知识源有助于提高检索召回率。对于封闭领域,手动整理的数据集效果很好。对于开放领域,像维基百科这样来源广泛的语料库以及过滤方法可以减少噪音。

重新排序

使用 LLM 的交叉注意力分数或似然分数对检索到的候选者进行重新排序有助于提高精度。这可以避免尽管编码器距离很近但可能无关的虚假候选者。

我们可以看到,优化 RAG 模型的方法有很多——从架构设计到检索技术再到训练方案和提示。需要采取综合考虑所有这些因素的整体方法来构建最有效的 RAG 系统。

现在让我们来看看未来 RAG 研究的一些当前挑战和有希望的方向。

RAG 的当前挑战和未来

检索增强生成是一个快速发展的领域,有许多未解决的研究问题:

  • 端到端训练大型 RAG 模型需要大量计算和数据。预训练 Fusion-in-Decoder 等新兴模型架构仍然具有挑战性。
  • 评估基准需要进一步完善,尤其是对话和个性化应用。离线评估可能与人类判断的相关性不高。
  • 结合结构化、符号化知识和文本的架构可以提高推理能力。将检索到的知识图谱与神经模型相结合是一项挑战。
  • 通过检索图像、视频和结构化数据的多模式 RAG 可以提高多模式性,但需要在紧密集成方面有更新的思维。
  • 部署期间的在线学习方案可以帮助 RAG 模型适应现实世界的使用并不断改进。
  • 实时应用的低延迟检索需要在服务架构、索引等方面进行创新。
  • 个性化技术(例如用户建模和上下文检索)需要更多地关注 RAG。
  • 对于 RAG 模型来说,可解释性、事实性和偏见评估仍然很困难,尤其是在更紧密的融合的情况下。

我们可以看到,在检索增强生成框架方面,还有许多开放的挑战和机会可以继续创新。随着 RAG 解锁更多功能强大且扎实的 LLM,未来看起来令人兴奋!

优化 RAG 模型的高级技术

到目前为止,我们已经介绍了优化检索增强生成模型的基础知识——架构设计、训练方案、检索方法、提示策略等。

现在让我们深入探讨一些进一步推动 RAG 功能的先进技术:

多阶段检索

使用多阶段检索管道可以组合不同的检索方法,以提高整体质量。例如,首先从快速最近邻索引进行检索,然后进行稀疏索引查找,最后使用交叉注意力分数进行重新排序。

多阶段检索还可以使用诸如交叉多个索引结果之类的技术来提高精度。针对不同目标进行训练的级联检索器也有助于结合优势。

可以通过端到端训练或使用强化学习来调整每个阶段来联合优化整个流程。

改进的重新排名

使用 LLM 对检索到的段落进行重新排序有助于挑选出产生更好输出的结果。重新排序方法包括:

  • 检索到的段落的掩蔽语言建模分数
  • 提示和段落之间的下一个句子预测分数
  • 最终生成文本的 LLM 似然分数

这些技术比基于原始编码器的相似度得分有所提高。对小候选子集进行重新排序是高效且有效的。

蒸馏

检索蒸馏训练较小的检索器模型,以匹配较大、更准确的教师模型的编码。这样可以通过为较小的蒸馏模型提供服务来扩展到大型语料库。

类似地,生成器蒸馏通过最小化分布发散来训练较小的 LLM,使其与大型教师 LLM 的输出相匹配。这可以改善推理延迟。

高效索引

优化检索器的索引方案和推理服务架构对于低延迟性能至关重要。以下技术:

  • 检索器编码的量化和矢量压缩
  • 快速最近邻的最大内积搜索方法
  • 内存索引、faiss、分区用于并行查找

这些可以提高吞吐量并减少实时 RAG 应用程序的尾部延迟。

课程学习

课程学习方案会在 RAG 训练过程中缓慢增加数据集难度。例如:

  • 首先提供更多背景信息,以减少歧义,然后再减少歧义
  • 混合简单和复杂的例子,随着时间的推移增加复杂性
  • 在增加噪音之前先从高质量的猎犬开始

这可以防止联合 LLM 和检索器目标的不稳定学习。

中级微调

在联合 RAG 训练过程中分别对 LLM 和寻回犬进行微调有助于稳定。寻回犬为联合训练后期的 LLM 提供了更好的背景。

多任务训练

针对分类、多项选择问答等不同目标训练检索器可以提高泛化能力。针对掩蔽语言模型、句子排序等目标对 LLM 进行多任务处理也有帮助。

在微调之前对相关任务上的 RAG 组件进行预训练可以进一步改善结果。

分析整合

人机交互分析(例如偏见评估、事实验证、段落聚类等)可以改进 RAG 模型并提高安全性。分析可以指导额外的训练数据收集。

通过选择不确定的样本进行手动标记的主动学习也有助于检索器的改进。

我们可以看到,有许多复杂的技术可以使 RAG 模型超越基本功能。将更强大的检索器和 LLM 模型与级联架构、高效推理、课程学习、分析集成等相结合,可以显著提高性能。

未来是令人兴奋的,因为这些先进的策略使 RAG 模型具有前所未有的推理和知识能力!还有更多的创新空间可以改变智能系统的构建方式。

结论

在这篇博文中,我们全面介绍了检索增强生成——了解它如何克服独立 LLM 的局限性、其模型架构、应用程序、优化技术和未来前景。我们讨论了:

  • RAG 框架将 LLM 与检索器相结合,为外部知识奠定基础
  • 模型架构重点关注如何将检索到的上下文与 LLM 输入相结合
  • RAG 提高了 QA、搜索、对话、推理、个性化等方面的性能。
  • 优化因素包括模型设计、训练、检索质量、提示、知识来源
  • 未来方向涉及模型扩展、评估、结构化知识、多模态等

RAG 是一个很有前途的方向,它克服了大型语言模型知识容量的固有限制。随着该领域的研究不断成熟,我们正在朝着构建以无与伦比的方式结合广泛知识、流畅性和推理能力的 LLM 的方向前进。未来是光明的,我们才刚刚开始!


欢迎你分享你的作品到我们的平台上. http://www.shxcj.com 或者 www.2img.ai 让更多的人看到你的才华。

创作不易,觉得不错的话,点个赞吧!!!


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TAPD项目管理软件无法与企业微信进行关联

TAPD一段时间未使用后,需要重新启动,此时会出现你的企业微信尚未与TAPD账号关联的提示 解决方案:找到TAPD应用,先删除应用,然后再解除禁用即可

【anaconda】—“conda info“命令后conda配置和环境信息的理解

文章目录 conda配置和环境信息的理解 conda配置和环境信息的理解 安装anaconda成功后,打开cmd,输入"conda info"命令,结果显示如下: conda的配置和环境信息的输出。以下是对每个字段的解释: active environm…

【MySQL】详解

SQL语句的分类: 1.DDL(Data Definition Languages)语句: 数据定义语言 ,这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象的定义。常用的语句关键字主要包括…

spark shuffle写操作——BypassMergeSortShuffleWriter

创建分区文件writer 每一个分区都生成一个临时文件,创建DiskBlockObjectWriter对象,放入partitionWriters 分区writer写入消息 遍历所有消息,每一条消息都使用分区器选择对应分区的writer然后写入 生成分区文件 将分区writer的数据flu…

强烈建议!所有Python基础差的同学,死磕这本64页的背记手册!

Python背记手册是一份非常实用的学习资料,它涵盖了Python语言的基础知识、语法规则、常用函数和模块等内容,对于初学者和有一定基础的Python程序员来说都非常有用。通过背诵这份手册,可以加深对Python语言的理解和记忆,提高编程能…

百度云智能媒体内容分析一体机(MCA)建设

导读 :本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂,采用人工的方式对视频进行分析处理,面临着效率低、成本高的困难。于是,MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术,为用户提供音视…

RFID电子锁在物流货运智能锁控管理的创新方案

物流货运锁控的现实挑战 易损性:传统锁具易受物理破坏,无法抵御恶意撬锁。 低效率:依赖人工操作,开锁速度慢,影响作业效率。 高成本:钥匙的制作、管理和丢失替换成本高昂。 监控缺陷:缺乏实…

笔记本如何录屏?3个方法分享给你

随着科技的飞速发展,录屏功能已不再局限于传统的教育或游戏领域,而是成为了大众都能用得到的创作、分享、记录生活的得力助手。同时,在生活中人们更多地使用到笔记本电脑,笔记本电脑有着其便携性、高效能和丰富软件资源&#xff0…

8.13 矢量图层面要素反转面要素渲染(Inverted polygons Renderer)

前言 本章介绍矢量图层面要素反转面要素(Inverted polygons Renderer)的使用说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 反转面要素(Inverted polygons Renderer) 反转面要素渲染常用于掩膜数据。 反转面要素(Inverted polygons Renderer)是一种渲染方…

python库(2):Passlib库

1 Passlib简介 Passlib库就是一个强大的工具,专门用于密码的安全存储和验证。本文将介绍Passlib库的基本概念、功能和使用方法,帮助更好地理解和应用密码安全技术。 Passlib是一个用于密码加密、哈希和验证的Python库,它提供了多种密码哈希…

adb不插usb线通过wifi调试

说起做手机开发也有好多年了,说来惭愧,我最近才知道安卓手机是可以不插数据线进行开发调试的。起因是公司近期采购了一批安卓一卡通设备,需要对其进行定制开发APP,但是由于我插USB调试发现没有反应。通过询问厂家才知道可以通过WIFI进行调试。…

服务器U盘安装Centos 7时提示Warning:/dev/root does not exist

这是没有找到正确的镜像路径导致的,我们可以在命令行输入ls /dev看一下有哪些盘符 像图中红色圈起来的就是我插入U盘的盘符,大家的输几盘可能做了多个逻辑盘,这种情况下就可以先将U盘拔掉再ls /dev看一下和刚才相比少了那两个盘符&#xff0c…

Linux服务器性能参数指标

【摘要】一个基于 Linux 操作系统的服务器运行的同时,会表征出各种各样参数信息,这些蛛丝马迹往往会帮助快速定位跟踪问题。 这里只是一些简单的工具查看系统的相关参数,当然很多工具也是通过分析加工 /proc、/sys 下的数据来工作的&#xff…

源代码防泄漏的制胜法宝——沙箱

沙箱技术作为现代信息安全领域的一种重要手段,其在源代码防泄密方面的应用愈发受到业界的关注。源代码作为企业或组织的核心资产,一旦泄露,不仅可能导致知识产权的流失,还可能对企业运营造成重大影响。因此,利用沙箱技…

云微客短视频矩阵全域营销,更高效的获客引流方式!

在抖音这样一个拥有海量用户和内容的短视频平台上,单一账号往往难以覆盖我们的客户群体,甚至于每天发布四五条视频,所引发的流量也是微乎其微的。在竞争如此激烈的市场环境中,商家企业无不想方设法追求更高效的获客引流方式&#…

MUNIK解读ISO26262--什么是DFA

我们在学习功能安全过程中,经常会听到很多安全分析方法,有我们熟知的FMEA(Failure Modes Effects Analysis)和FTA(Fault Tree Analysis)还有功能安全产品设计中几乎绕不开的FMEDA(Failure Modes Effects and Diagnostic Analysis),相比于它们…

内存管理(RTOS)

目录 #RTOS内存管理介绍 #堆定义 #栈定义 #RTOS四种堆分配方案 #Heap_1.c #Heap_2.c #Heap_3.c #Heap_4.c #Heap_5.c #stm32cublemx对堆的配置 #配置堆相关函数 #申请内存函数 #钩子函数 前言:本课程参考韦东山老师视频,连接放在最后。 #R…

打包技术 水库生态流量监控调度方法和计算方法

网盘 https://pan.baidu.com/s/1k0sx3rSkoOqQVIS50iwPzA?pwd9vej 一种兼顾蓄水期导流隧洞生态流量泄放和永久堵头完工后隧洞充水排气的方法.pdf 产漂流性卵鱼类自然繁殖的河流生态流量计算方法.pdf 促进鱼类产卵的梯级水库生态调度方法.pdf 反推水库入库流量过程的优化修正方…

从0开始搭建Spring-Cloud微服务项目

文章目录 1. 安装Java开发环境配置环境变量 2. MySQL安装与配置环境变量配置配置MySQLNavicat配置Idea配置 1. 安装Java开发环境 安装Java开发环境主要涉及下载Java开发工具包(JDK)并配置环境变量,以便在系统中正确运行Java程序。 下载JDK …

APP逆向 day12 JNI开发

一.前言 今天和大家讲讲jni开发,为什么要和大家介绍呢,因为jni开发是安卓开发中经常使用的,其作用就是java调用c代码,或者c调用java代码。一般一些难一点的app都是采用这个方式,采用这个方式的好处就是更难逆向&#…