RAG(检索增强生成)技术

news2024/11/25 11:00:49

1.基本概念

检索增强 LLM ( Retrieval Augmented LLM ),简单来说,就是给 LLM 提供外部数据库,对于用户问题 ( Query ),通过一些信息检索 ( Information Retrieval, IR ) 的技术,先从外部数据库中检索出和用户问题相关的信息,然后让 LLM 结合这些相关信息来生成结果。下图是一个检索增强 LLM 的简单示意图。

在这里插入图片描述

传统的信息检索工具,比如 Google/Bing 这样的搜索引擎,只有检索能力 ( Retrieval-only ),现在 LLM 通过预训练过程,将海量数据和知识嵌入到其巨大的模型参数中,具有记忆能力 ( Memory-only )。从这个角度看,检索增强 LLM 处于中间,将 LLM 和传统的信息检索相结合,通过一些信息检索技术将相关信息加载到 LLM 的工作内存 ( Working Memory ) 中,即 LLM 的上下文窗口 ( Context Window ),亦即 LLM 单次生成时能接受的最大文本输入。

2.RAG解决的问题

参考资料:ACL 2023 Tutorial: Retrieval-based Language Models and Applications

(1)长尾知识:

对于一些相对通用和大众的知识,LLM 通常能生成比较准确的结果,而对于一些长尾知识,LLM 生成的回复通常并不可靠。ICML 会议上的这篇论文 Large Language Models Struggle to Learn Long-Tail Knowledge,就研究了 LLM 对基于事实的问答的准确性和预训练数据中相关领域文档数量的关系,发现有很强的相关性,即预训练数据中相关文档数量越多,LLM 对事实性问答的回复准确性就越高。从这个研究中可以得出一个简单的结论 ——** LLM 对长尾知识的学习能力比较弱**。下面这张图就是论文中绘制的相关性曲线。

为了提升 LLM 对长尾知识的学习能力,容易想到的是在训练数据加入更多的相关长尾知识,或者增大模型的参数量,虽然这两种方法确实都有一定的效果,上面提到的论文中也有实验数据支撑,但这两种方法是不经济的,即需要一个很大的训练数据量级和模型参数才能大幅度提升 LLM 对长尾知识的回复准确性。而通过检索的方法把相关信息在 LLM 推断时作为上下文 ( Context ) 给出,既能达到一个比较好的回复准确性,也是一种比较经济的方式

(2)私有数据

ChatGPT 这类通用的 LLM 预训练阶段利用的大部分都是公开的数据,不包含私有数据,因此对于一些私有领域知识是欠缺的。比如问 ChatGPT 某个企业内部相关的知识,ChatGPT 大概率是不知道或者胡编乱造。虽然可以在预训练阶段加入私有数据或者利用私有数据进行微调,但训练和迭代成本很高。此外,有研究和实践表明,通过一些特定的攻击手法,可以让 LLM 泄漏训练数据,如果训练数据中包含一些私有信息,就很可能会发生隐私信息泄露

如果把私有数据作为一个外部数据库,让 LLM 在回答基于私有数据的问题时,直接从外部数据库中检索出相关信息,再结合检索出的相关信息进行回答。这样就不用通过预训练或者微调的方法让 LLM 在参数中记住私有知识,既节省了训练或者微调成本,也一定程度上避免了私有数据的泄露风险。

(3)数据新鲜度

由于 LLM 中学习的知识来自于训练数据,虽然大部分知识的更新周期不会很快,但依然会有一些知识或者信息更新得很频繁。LLM 通过从预训练数据中学到的这部分信息就很容易过时

如果把频繁更新的知识作为外部数据库,供 LLM 在必要的时候进行检索,就可以实现在不重新训练 LLM 的情况下对 LLM 的知识进行更新和拓展,从而解决 LLM 数据新鲜度的问题

(4)来源验证和可解释性

通常情况下,LLM 生成的输出不会给出其来源,比较难解释为什么会这么生成。而通过给 LLM 提供外部数据源,让其基于检索出的相关信息进行生成,就在生成的结果和信息来源之间建立了关联,因此生成的结果就可以追溯参考来源,可解释性和可控性就大大增强。即可以知道 LLM 是基于什么相关信息来生成的回复。

利用检索来增强 LLM 的输出,其中很重要的一步是通过一些检索相关的技术从外部数据中找出相关信息片段,然后把相关信息片段作为上下文供 LLM 在生成回复时参考。有人可能会说,随着 LLM 的上下文窗口 ( Context Window ) 越来越长,检索相关信息的步骤是不是就没有必要了,直接在上下文中提供尽可能多的信息。

3.RAG关键模块

为了构建检索增强 LLM 系统,需要实现的关键模块和解决的问题包括:

  • 数据和索引模块将多种来源、多种类型和格式的外部数据转换成一个统一的文档对象 ( Document Object ),便于后续流程的处理和使用。文档对象除了包含原始的文本内容,一般还会携带文档的元信息 ( Metadata )可以用于后期的检索和过滤
  • 查询和检索模块:如何准确高效地检索出相关信息
  • 响应生成模块:如何利用检索出的相关信息来增强 LLM 的输出

4.几种RAG的调用模式

在这里插入图片描述

模式一:非结构化数据通过Embedding Model把非结构化数据进行embedding存到向量数据库中,然后形成Construct Prompts给到LLM。LLM返回结果给到用户。

模式二:用户提出问题,下一步把问题通过Embedding Model向量化,然后保存到长时记忆数据库(向量数据库)中,然后调用LLM完成问题的回答,接下来将大模型的回答存到长时记忆数据库中,最后返回给用户。

模式三:用户问问题,下一步把问题通过Embedding Model向量化,然后从Cache中(向量数据库)查询类似的问题和答案,返回给用户。如果没有命中,则去和LLM交互。然后把LLM的回答存到Cache中,最后把回答返回给用户。

这三种形式就是典型的RAG的调用模式。它可以解决不同类型的数据如何让大模型知道的问题,同时在性能和效率上得到了提高,解决了长时记忆的问题,幻觉问题也有很大改善。

5.RAG vs. SFT

RAGSFT传统方法
数据动态数据。 RAG 不断查询外部源,确保信息保持最新,而无需频繁的模型重新训练。(相对)静态数据,并且在动态数据场景中可能很快就会过时。 SFT 也不能保证记住这些知识。
外部知识库RAG 擅长利用外部资源。通过在生成响应之前从知识源检索相关信息来增强 LLM 能力。 它非常适合文档或其他结构化/非结构化数据库。SFT 可以对 LLM 进行微调以对齐预训练学到的外部知识,但对于频繁更改的数据源来说可能不太实用。
模型定制RAG 主要关注信息检索,擅长整合外部知识,但可能无法完全定制模型的行为或写作风格。SFT 允许根据特定的语气或术语调整LLM 的行为、写作风格或特定领域的知识。
缓解幻觉RAG 本质上不太容易产生幻觉,因为每个回答都建立在检索到的证据上。SFT 可以通过将模型基于特定领域的训练数据来帮助减少幻觉。 但当面对不熟悉的输入时,它仍然可能产生幻觉。
透明度RAG 系统通过将响应生成分解为不同的阶段来提供透明度,提供对数据检索的匹配度以提高对输出的信任。SFT 就像一个黑匣子,使得响应背后的推理更加不透明。
相关技术RAG 需要高效的检索策略和大型数据库相关技术。另外还需要保持外部数据源集成以及数据更新。SFT 需要准备和整理高质量的训练数据集、定义微调目标以及相应的计算资源。

与预训练或微调基础模型等传统方法相比,RAG 提供了一种经济高效的替代方法。RAG 从根本上增强了大语言模型在响应特定提示时直接访问特定数据的能力。为了说明 RAG 与其他方法的区别,请看下图。雷达图具体比较了三种不同的方法:预训练大语言模型、预训练 + 微调 LLM 、预训练 + RAG LLM。

在这里插入图片描述

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

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

相关文章

【个人版】SpringBoot下Spring-Security自定义落地篇【四】

SpringBoot Spring-Security 背景: 上篇文章在源码读取的基础上,根据自身代码习惯及需求,总结了一个自定义简单落地版本。后来在看到松哥写的博文(不太爱看官网),发现还有新的变种模式,虽然整…

机器学习---决策树

介绍 决策树和随机森林都是非线性有监督的分类模型。 决策树是一种树形结构,树内部每个节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶子节点代表一个分类类别。通过训练数据构建决策树,可以对未知数据进行分类, 随机森林是由多个决策树组成,随机森林中每…

【参天引擎】华为参天引擎内核架构源码架构,多线程服务,数据节点管理,多节点间元数据管理

cantian引擎源码结构 ​专栏内容: 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点…

极智AI | 算子融合、矩阵分块 一图看懂大模型优化技术FlashAttention

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 算子融合、矩阵分块 一图看懂大模型优化技术FlashAttention。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 没错…

RabbitMQ入门指南(二):架构和管理控制台的使用

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、RabbitMQ架构 二、RabbitMQ管理控制台的使用 1.Exchange交换机 2.Queue队列 3.绑定Exchange交换机和Queue队列 4.发送消息 5.数据隔离 总结 前言 RabbitMQ是一个高效、可靠的开源消息队列系统…

HTML_CSS的基本选择器的使用及其作用范围和优先级

目录 ✨CSS的使用:行内样式内部样式外部样式 ✨CSS基本选择器:id选择器class选择器标签选择器 ✨优先级:选择器的优先级样式表的优先级 ✨CSS的使用: 根据定义CSS的位置不同,分为行内样式、内部样式和外部样式 行内样…

java配置+J_IDEA配置+git配置+maven配置+基本语句

当前目录文件夹dir 进入文件夹cd 返回上一级cd.. 创建文件夹:mkdir 文件名删除文件夹:rd 文件夹名, 目录不为空不能直接删 rd /s 带子文件夹一起删 清屏cls 切换d盘才能进入 下载git地址: Git - Downloading Package (g…

隐私计算介绍

这里只对隐私计算做一些概念性的浅显介绍,作为入门了解即可 目录 隐私计算概述隐私计算概念隐私计算背景国外各个国家和地区纷纷出台了围绕数据使用和保护的公共政策国内近年来也出台了数据安全、隐私和使用相关的政策法规 隐私计算技术发展 隐私计算技术安全多方计…

JDBC 数据库连接池

目录 一、什么是数据库连接池二、为什么需要数据库连接池?三、JDBC 数据库连接池的实现四、C3P0的使用1、加入c3p0 jar包2、配置xml文件3、c3p0-config.xml模板4、C3P0的使用 五、Druid的使用1、加入Druid jar包2、定义配置文件:3、Druid连接池的使用 六、HikariCP的…

【最新】2023年30米分辨率土地利用遥感监测数据

改革开放以来,中国经济的快速发展对土地利用模式产生了深刻的影响。同时,中国又具有复杂的自然环境背景和广阔的陆地面积,其土地利用变化不仅对国家发展,也对全球环境变化产生了深刻的影响。为了恢复和重建我国土地利用变化的现代…

硬件基础-二极管

3.二极管 正偏时是多数载流子载流导电,反偏时是少数载流子载流导电。所以,正偏电流大,反偏电流小,PN 结显示出单向电性。多数载流子正向通过 PN 结时就需要克服内电场的作用,需要约 0.7 伏的外加电压,这是…

windows10录屏快捷键,让你效率翻倍!

“大家知道,windows 10系统有录屏快捷键吗?每次都要通过搜索才能打开,感觉花费的时间太多了,要是可以快速打开就方便多了,所以有人知道windows10系统的录屏快捷键是什么吗?” 在windows 10系统中&#xff…

OpenCV-8RGB和BGR颜色空间

一. RGB和BGR 最常见的色彩空间就是RGB,人眼也是基于RGB的色彩空间去分辨颜色。 OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同。 二.HSV, HSL和YUV 1.HSV(HSB) OpenCV用的最多的色彩空间是HSV. Hue:色相&…

【玩转 TableAgent 数据智能分析】股票交易数据分析+预测

文章目录 一、什么是TableAgent二、TableAgent 的特点三、实践前言四、实践准备4.1 打开官网4.2 注册账号4.3 界面介绍4.4 数据准备 五、确认分析需求六、TableAgent体验七、分析结果解读八、总结&展望 一、什么是TableAgent TableAgent是一款面向企业用户的智能数据分析工…

Pytorch深度强化学习案例:基于Q-Learning的机器人走迷宫

目录 0 专栏介绍1 Q-Learning算法原理2 强化学习基本框架3 机器人走迷宫算法3.1 迷宫环境3.2 状态、动作和奖励3.3 Q-Learning算法实现3.4 完成训练 4 算法分析4.1 Q-Table4.2 奖励曲线 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见…

AntDB-T提升查询性能的关键之查询优化解析

查询优化器是提升查询效率非常重要的手段,本文将主要介绍AntDB-T数据库查询优化的相关设计。AntDB-T数据库是一款企业级通用分布式关系型数据库,而查询是AntDB-T数据库管理系统中最关键、最吸引人的功能之一。每个生产数据库系统每天都需要处理大量的查询…

python【matplotlib】鼠标拖动滚动缩放坐标范围和拖动图例共存

背景 根据前面的博文: python【matplotlib】画图鼠标缩放拖动动态改变坐标轴范围 和Python【Matplotlib】图例可拖动改变位置 两个博文,博主考虑了一下,如何将两者的功能结合起来,让二者共存。 只需根据Python【Matplotlib】鼠标…

【音视频 | AAC】AAC音频编码详解

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

【GD32307E-START】06 ST7735 SPI-LCD显示模块移植

软硬件平台 GD32F307E-START Board开发板GCC Makefile1.8寸TFTLCD 分辨率128*160 驱动IC ST7735S 接口定义 序号引脚标号说明1GND接地2VCC5V/3.3V电源输入3SCKSPI总线时钟信号4SDASPI总线写数据信号5RESET液晶屏复位信号,低电平复位6DC液晶屏寄存器/数据选择信…

LinuxCNC系统安装

首先我们需要准备一个U盘来安装系统,然后进入Debian官网。操作系统处,点击“下载Debian”。 如果需要下载其他比较全版本,可以点击“其他下载链接”,选择DVD的安装,因为是国外的网站,最好不要选择网络安装。…