当前位置: 首页 > news >正文

针对 LLM 应用程序优化 RAG

前言

大型语言模型 (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 让更多的人看到你的才华。

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


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT操作各类数据库用法详解
  • python conda查看源,修改源
  • 20行代码写一个简单 Blazor 时钟组件
  • 模型优化调参利器贝叶斯优化bayesian-optimization实践
  • Java项目:基于SSM框架实现的校园快递代取管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 14-38 剑和诗人12 - RAG+ 思维链 ⇒ 检索增强思维(RAT)
  • 星戈瑞CY7-Amine生物荧光成像
  • linux cpuspeed工具
  • 软件设计之Java入门视频(11)
  • Qt扫盲-QRect矩形描述类
  • Desktop docker 部署 WordPress
  • 智慧矿山:EasyCVR助力矿井视频多业务融合及视频转发服务建设
  • BDD 100K dataset 的标签数据结构(json文件)
  • ABAP中CONVERT_TO_LOCAL_CURRENCY 函数的使用方法
  • 安装elasticsearch
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • maven工程打包jar以及java jar命令的classpath使用
  • node-glob通配符
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 一份游戏开发学习路线
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 阿里云ACE认证之理解CDN技术
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #QT(智能家居界面-界面切换)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (编译到47%失败)to be deleted
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (回溯) LeetCode 78. 子集
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (一)认识微服务
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .NET Core 项目指定SDK版本
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net多线程总结
  • .net中应用SQL缓存(实例使用)
  • /3GB和/USERVA开关
  • /bin/bash^M: bad interpreter: No such file or directory
  • @GetMapping和@RequestMapping的区别
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @SpringBootApplication 注解
  • @Valid和@NotNull字段校验使用
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [Doris]阿里云搭建Doris,测试环境1FE 1BE
  • [ES-5.6.12] x-pack ssl
  • [Godot] 3D拾取