检索增强生成:RAG(Retrieval Augmented Generation)

  • 什么是 RAG?
  • 为什么使用 RAG?
  • LLM 微调 和 RAG?
  • 实战

什么是 RAG?

RAG 在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中被引入,原论文是这样描述的:

探索了一种 通用的 检索增强生成(RAG)微调方案 —— 这种模型结合了 预训练的参数化记忆非参数化记忆,用于语言生成。提出的 RAG 模型中,参数化记忆是一个预训练的 seq2seq 模型,而 非参数化记忆是一个由预训练神经检索器访问的维基百科稠密向量索引

以提示“地球上的第一种哺乳动物是什么时候出现的?”为例,RAG 可能会提取关于“哺乳动物”、“地球历史”和“哺乳动物进化”的文档。这些支持性文档随后被连接为上下文,与原始输入一起输入到 seq2seq 模型中,该模型生成实际输出。
因此,RAG 拥有两种知识来源:seq2seq 模型在其参数中存储的知识(参数化记忆)以及 RAG 从文档库中检索到的段落所存储的知识(非参数化记忆)

在这里插入图片描述
图 1:概览。将一个预训练的检索器(查询编码器 + 文档索引)与一个 预训练的 seq2seq 模型(生成器)相结合,并进行端到端微调。对于查询 xxx,我们使用 最大内积搜索(MIPS)找到前 KKK 篇文档 ziz_izi。在得到最终预测 yyy 时,将 zzz 视为潜在变量,并对不同文档下的 seq2seq 预测结果进行边际化处理。

每个步骤可以大致分解为:

  • 检索:根据查询从源中寻找相关信息。例如,根据问题从数据库中获取相关的维基百科文本段落。
    • 构建/索引文档库(预处理):把外部知识源(比如维基百科)拆分成文档/段落编码成向量建立检索索引(如向量索引,支持 MIPS/ANN 查询)。
    • 查询编码与检索把输入查询 xxx 用检索器的查询编码器编码,进行向量检索,返回前 KKK 个最相关的文档 z1,...,zKz_1,...,z_Kz1,...,zK
  • 增强:使用相关检索到的信息来修改输入到生成模型(例如 LLM)中的内容。将检索到的文档与生成器结合,即把检索到的文档作为 条件信息 喂入 预训练的 seq2seq 生成器。这里有两种常见形式:
    • RAG-Sequence(或 RAG-固定):对整个输出序列都使用同一组检索段落作为上下文。
    • RAG-Token(或 RAG-逐 token):生成每个 token 时可使用不同的检索段落(更细粒度)。
  • 生成:根据输入生成输出。例如,在 LLM 的情况下,根据输入提示生成一段文本。
    • 生成与边际化(推理):将文档 zzz 视为潜在变量,计算最终输出的概率为对不同检索文档的边际化 p(y∣x)=∑zp(z∣x)p(y∣x,z)\;p(y|x)=\sum_z p(z|x)\,p(y|x,z)p(yx)=zp(zx)p(yx,z)。实现上可以对每个 ziz_izi 生成 p(y∣x,zi)p(y|x,z_i)p(yx,zi) 再加权求和,得到最终预测。
    • 端到端微调(训练):将检索器(查询编码器)和生成器一起端到端微调,使得检索更契合生成任务、生成更能利用检索到的证据。训练时通常会最大化边际似然或相应损失。
    • (可选)输出后处理与可追溯性:返回生成文本同时附加证据来源(即用到的检索片段),便于验证与更新知识库。

为什么使用 RAG?

Retrieval Augmented Generation: Streamlining the creation of intelligent natural language processing models

LLM(大型语言模型)的参数,本质上代表了人类使用词语构造句子的一般模式。参数化的知识让 LLM 在回答通用问题时非常有用,但对于想深入探索某类特定信息的用户来说,这种方式并不够。

RAG(检索增强生成)可以将生成式 AI 服务与外部资源连接起来,尤其是那些包含最新技术细节的资源。它被称为一种“通用微调方案”,因为几乎任何 LLM 都可以用它来连接几乎任何外部资源。

  • 使用自定义数据。许多 基础 LLMs 使用互联网规模文本数据进行训练。这意味着它们具有强大的语言建模能力,然而,它们 通常缺乏特定领域的知识。RAG 系统可以向 LLMs 提供 特定领域的数据,如医疗信息或公司文档,从而 根据特定用例定制它们的输出
  • RAG 会为模型 提供可引用的来源,就像科研论文中的脚注一样,让用户能够核查模型的说法。
  • 防止幻觉。LLMs 非常出色,但它们容易产生潜在的幻觉,也就是说,生成看似正确但实际上不正确的内容。RAG 管道可以通过提供事实性(检索到的)输入来帮助 LLMs 生成更符合事实的输出。即使从 RAG 管道生成的答案看起来不正确,由于检索功能,也可以获取其来源的资料。
  • RAG 的真正优势在于其灵活性改变预训练语言模型所知的内容需要用新文档重新训练整个模型。而使用 RAG,只需更换其用于知识检索的文档,就能控制它所知的内容。通过用旧版维基百科数据集替换原始数据集,并询问诸如“冰岛的总理是谁?”等问题来测试这一行为。结果显示,RAG 利用替换进来的语料库中的知识调整了其答案,尽管参数化知识保持不变。这种适应方法在事实随时间变化的情况下非常有价值。

RAG 也可以是一个比在特定数据上微调 LLM 更快的解决方案。

LLM 微调 和 RAG?

LLM 微调(Fine-tuning)在下游数据上更新模型参数,使模型直接 在内部参数中编码任务或领域知识。包括全量微调,也包括参数高效微调(如 LoRA、Prompt-Tuning、Adapters 等,统称 PEFT)。LoRA 是典型方法之一,能显著减少可训练参数并节省显存。

RAG(Retrieval-Augmented Generation):把 外部非参数化知识库(文档/段落向量索引)与生成模型结合,在 推理时检索相关文档并以此条件化生成,生成端对不同检索结果做边际化或融合以产出答案;检索库可以独立更新,从而实现 更新知识而不重训模型。RAG 在知识密集型任务上被提出并验证效果优于仅参数化模型。

维度LLM 微调(全量/PEFT)RAG(检索增强生成)
知识存储位置模型参数(内隐)外部索引(显式)+ 模型(局部决策)
更新知识需重训或增量微调更新索引即可(无需重训模型
推理延迟较低(单次前向)增加检索与文档处理延迟(检索/编码/聚合)。
计算/成本(训练)全量微调高;PEFT 低(显存 & 存储节省)检索器训练 + 生成器微调(可仅微调生成器或与检索器联合微调),索引构建有成本
可解释性 / 溯源较差(内部权重难溯源)好:可返回支持文档作证据
抗幻觉 / 事实准确性依赖模型及数据;难以快速修正错误更易 grounding,若检索到高质量文档,生成更事实性
小样本/数据效率PEFT 在少数据下表现好依赖检索质量;在少标注下可借外部知识补充
工程复杂度相对简单(若仅单模型部署)复杂:需索引/检索服务、向量数据库、检索器与生成器协同
最佳适用场景任务固定、知识静态、可承受模型更新成本知识频繁更新、需要来源/可解释性、知识密集型 QA 与事实生成

实战

本地 RAG 教程
使用 smolagents、LlamaIndex、LangGraph 来构建 RAG 工具的完整例子,见 HF Agent Course

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

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

相关文章

Android 设置/修改系统NTP服务地址

Android 手机的 NTP 时间同步(网络时间同步)主要依赖网络,但系统时间来源还包括其他方式,整体时间校准机制是多种来源的结合。具体可分为以下几类: 1. 网络 NTP 同步(最主要方式) 这是 Androi…

Ubuntu22.04 安装vitis2023.2 卡在“Generating installed device list“.

关于这个问题,xilinx有官方说明,链接 原因:问题是 Ubuntu 20.04 缺少 libtinfo.so.5 库。 解决办法: sudo apt-get install libtinfo5

前端全栈修炼手册:从 Vue3 到工程化的进阶之路

本文将全方位覆盖前端开发的核心知识,从 Vue3 框架的基础语法到复杂的工程化实践,从包管理工具的使用到模块规范的深入理解,带你踏上从入门到精通的进阶之路。 Vue3 框架:新时代前端开发的基石 Vue3 核心语法探秘 Vue3 作为目前…

Jetpack Compose 常用控件

Jetpack Compose 常用控件一、基础展示控件:呈现静态内容二、交互控件:响应用户操作三、列表与网格控件:展示大量数据四、导航与标签控件:组织页面结构五、反馈控件:提示与加载状态六、布局控件:组织 UI 结…

Android适配最新SplashScreen方案:让启动页不再“翻车“

Android适配最新SplashScreen方案:让启动页不再"翻车" 各位开发者大佬们,最近是不是又被Android的SplashScreen适配搞得焦头烂额?别慌,今天咱们就来聊聊这个让人又爱又恨的启动页适配方案,保证让你笑出腹肌的同时,还能把技术要点牢牢掌握![6][7][9][10] 一、…

【自动驾驶】《Sparse4Dv3》代码学习笔记

这里时间比较有限,优先看Sparse4Dv3方法里面相对以前改动的地方。 0.参考 代码v1/v2/v3:https://github.com/HorizonRobotics/Sparse4D 跑起来:https://github.com/HorizonRobotics/Sparse4D/blob/v3.0/docs/quick_start.md 1.方法 (1&a…

「ECG信号处理——(22)Pan-Tompkins Findpeak 阈值检测 差分阈值算法——三种R波检测算法对比分析」2025年8月8日

目录 1、引言 2、算法原理 (1)Pan-Tompkins 算法(方法1) (2)Findpeak 阈值检测算法(方法2) (3)差分阈值算法(方法3) 3、算法性能…

Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)

在向量搜索中,过滤(Filtering) 是保证结果精准性和业务契合度的关键手段。Qdrant 的过滤机制不仅能在向量相似度检索的基础上叠加结构化条件,还提供了灵活的布尔逻辑组合,让我们可以像写数据库查询一样,精准…

五、RuoYi-Cloud-Plus 前端项目部署以及如何改后端请求地址。

1.前情描述 前面的文章我们介绍了RuoYi-Cloud-Plus的nocos的配置内容,已经启动其他服务要注意什么东西。 专栏内容在这,感兴趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.前端项目部署。 官网地址:plus…

工作量评估

工作量评估 API 工作量评估: 得分 入参个数 * 0.2 业务规则 * 0.5 改动的库表个数 * 0.3 得分(1-2):简单API-5人天 得分(3-8):中等API-8人天 得分(8-15):复…

篮球运动(动态规划)

题目描述小明建造了一个篮球场,他请来了2行n列的人,想让他们进行比赛。每一个人都有一个能力值,第一行分别为h11,h12,…,h1n,第二行为h21,h22,…,h2n。现在小…

区块链与大数据分析技术深度解析

目录 区块链与大数据分析技术深度解析 1. 引言:当区块链遇见大数据 2. 区块链数据特性 2.1 数据结构差异 2.2 区块链数据层级 3. 数据获取技术 3.1 节点直连方案 3.2 链上数据湖架构 4. 数据分析关键技术 4.1 交易图谱分析 4.2 地址聚类算法 5. 链上分析应用场景 5.1 反洗钱(A…

网络基础——网络层级

OSI七层模型OSI七层模型名称功能协议应用层直接为用户应用程序(如浏览器、邮件客户端)提供网络服务接口。HTTP/HTTPS(网页浏览)FTP(文件传输)SMTP/POP3(邮件)DNS(域名解析…

【Redis】hash哈希,List列表

目录 一. hash哈希 1.1.常用命令 1.1.1.HSET 1.1.2.HGET 1.1.3.HEXISTS 1.1.4.HDEL 1.1.5.HKEYS 1.1.6.HVALS 1.1.7.HGETALL 1.1.8.HMGET 1.1.9.HLEN 1.1.10.HSETNX 1.1.11.HINCRBY 1.1.12.HINCRBYFLOAT 1.2. 内部编码 1.3. 使用场景 1.4…

MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)

目录1.分组查询(1)聚合函数(2)group by子句(3)having2.连接查询(1)内连接(笛卡尔积)(2)外连接(3)内外连接的区…

【Python 高频 API 速学 ①】

一、为什么先学它们? 在真实代码里,90 % 的 bug 都源于「拿到的是 A 类型,却当成 B 类型用」。 把「不确定」变成「确定」——这就是类型转换三兄弟的核心价值。二、三兄弟速览函数一句话定位常见输入失败会怎样int(x)把 x 变成整数‘42’, 3…

FFmpeg 视频旋转信息处理:3.4 vs 7.0.2

1. 概述 FFmpeg 在处理视频旋转信息方面经历了重要的架构变化。本文档详细对比了 FFmpeg 3.4 和 7.0.2 在封装(muxing)和解封装(demuxing)视频旋转信息时的差异,并提供兼容性解决方案。文档内容由Claude Sonnet 4辅助撰…

《Resolving tissue complexity by multimodal spatial omics modeling with MISO》

概念多模态空间组学:简单来说,就是同时研究生物组织里的多种分子信息(比如基因表达、蛋白质、代谢物、表观遗传标记等),而且这些信息还带有空间位置。MISO(MultI-modal Spatial Omics)是这篇论文…

三阶段提交(3PC)协议的全面解析:理论、机制与实践局限性

第一部分:非阻塞提交的起源:从两阶段提交(2PC)的缺陷到三阶段提交(3PC)的构想在分布式计算领域,确保跨多个独立节点执行的事务的完整性是一项至关重要的挑战。这些节点或站点可能在地理上分散&a…

衰减器的计算

pi型衰减器,如下图所示。 它适用于输入输出阻抗匹配的情况下,还能进行衰减。 不过当输入输出阻抗不匹配时,2个R1也会不相等。 已知特性阻抗Z0,衰减比AVin/Vout,怎么计算R1、R2? 1、电阻分压。 Vout Vi…