【RAG实战】RAG与大模型应用

1.1 大模型应用的方向:RAG

1.1.1 什么是RAG

1. 生成式AI

一种能够生成各类内容的技术,包括文本、图像、音频和合成数据。自2022年底ChatGPT在全球范围内推广以来,基于Transformer解码器结构的大模型已能在短时间内为用户生成高质量的文本、表格、代码,使整个AI领域迈入了新的时代。

大语言模型(Large Language Model,LLM)经过海量文本数据的训练后,能将这些文本数据以一种黑盒形式压缩在模型参数中。预训练完成后,模型便掌握了大量的人类知识世界。当模型的规模足够大且经过指令微调对齐后,便可通过提示模板,运用零样本(zero-shot)或少样本(few-shot)的提示词来完成许多自然语言理解和自然语言生成任务。

然而,大模型并不具备在环境中不断变化的场景中回答特定问题所需的全面知识。例如,早期的ChatGPT的预训练语料库时间截止至2021年,这意味着模型无法准确输出2021年以后的事实性问题,这正是现代大模型所面临的知识更新困境。实际上,对于一个大模型来说,更新基础模型知识库是非常困难的一件事情。首先,需要保证预训练数据的质量;其次,更新知识库后的模型通常都需要重新训练,至少要将新数据与旧数据按照一定的比例进行混合训练,而不能仅仅使用新数据,否则会出现灾难性遗忘的问题。

2. RAG

2020年,Facebook在"Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks"一文中首先提出了一种称为检索增强生成(RAG)的框架。该框架可以使模型访问超出其训练数据范围之外的信息,使得模型在每次生成时可以利用检索提供的外部更专业,更准确的知识,从而更好地回答用户问题。

RAG在推理过程中分为两个阶段:检索和内容生成。在检索阶段,通过算法检索与用户问题相关的知识片段。在开放领域中,这些知识片段可以来自互联网上搜索引擎检索到的文档,例如微软Bing AI的模式;在私有领域的企业场景中,通常使用大量的内部文档通过更小的信息源约束来提高模型生成的安全性和可靠性。

完成检索之后,可以获取到一些与用户输入相关的可靠外部知识。在内容生成阶段,通过一个结构化的prompt模板约束,将这些外部知识添加到用户的问题中,并传递给语言模型。模型基于知识增强的prompt,通过自己的大量参数计算,就可以生成一个针对该用户问题的更准确的单宁。在这个过程中,还可以约束模型对生成的答案进行溯源,以方便地知道模型是依据哪些知识片段完成最终答案生成的。

1.1.2 RAG与模型微调的对比

模型微调是指在一个特定任务上用一定量的数据来训练模型的过程,通过在特定数据集上微调可以提高模型在特定数据集上的性能。如果有足够大的监督数据集,且数据集不会发生改变,那么微调是一个很不错的方法。尽管大模型的微调成本较高,但现在已有大量低成本微调的方法,例如LoRA。然而,如果数据集是动态的,就需要不断的重新训练模型以跟上数据的变化;或者如果没有足够大的数据集,那么微调不是一个好办法。在这种情况下,可以使用RAG来提高大模型的性能。同样,可以利用RAG来提供大模型在摘要、翻译等任务上的性能,因为这些任务可能无法进行微调。

RAG

  • 定义:将大规模知识库检索与大模型生成相结合。检索相关文档并使用它们生成答案
  • 优点:可以用到外部知识
  • 挑战:需要可靠的召回系统
  • 用例:数据经常更新的智能回答场景

模型微调

  • 定义:使用较小的数据集细化针对特定任务的预训练模型。调整模型的权重以使其更适用于特定任务
  • 优点:可以在特定任务上获得不错的效果,尤其是在监督数据充足的情况下
  • 挑战:数据不足时存在过拟合风险,模型只能处理训练数据截止日期之前的场景
  • 用例:利用模型完成特定任务,例如情感分类、意图识别

1.2 为什么需要RAG

1.2.1 大模型的知识更新问题

大模型的知识源于预训练阶段,通过大量的无监督数据,利用下一个词预测任务来完成训练。待训练完成之后,模型便能将大量的知识压缩到自身的参数中。然而,在互联网时代,知识更新迅速,导致大模型难以实时更新所蕴含的知识。

1.2.2 大模型生成结构的不可解释性问题

深度模型由于其内部结构非常复杂,导致人们难以理解模型对输入做出的决策。然而,模型的解释性在很多方面都非常重要,因为它可以让开发人员理解模型时如何进行预测的,从而对模型产生的结果更有信心。此外,解释性还能帮助开发人员找到可以改进的方面,从而对模型进行更好的调整。在大模型领域中,模型基本都基于Transformer的解码器结构,因此大模型的生成结果仍然存在不可解释性问题。

然而,在使用RAG系统后,可以告之每个答案的来源。如果对答案不确定,还可以查看提供的溯源网页进行查看。相较于纯粹的大模型生成,RAG具有较强的可解释性。

1.2.3 大模型的数据泄漏问题

可以通过数据提取攻击大模型,获取电话、身份信息、电子邮件等敏感数据。

然而,在使用RAG系统之后,由于模型组织答案所用到的知识来源于预先提供的知识库信息,利用个人私有数据不仅可以使模型的答案更具有个性化,还能让整个系统变得更加安全,降低被诱导输出敏感信息的风险。

1.2.4 大模型的训练成本问题

近几年,模型的规模不断攀升。BERT-Base仅有1亿参数量,而如今已出现千亿、万亿级别的大模型。

庞大的参数量意味着需要更多的训练资源。同时,考虑到训练时长,一个大模型训练的成本极其昂贵。早在2021年,便有科学家在论文中通过大量实验证明,可以使用仅1/25参数量的模型结合RAG系统,在Pile数据集上达到GPT-3的效果

1.3 RAG的工作流程

RAG的工作流程涉及3个主要阶段:数据准备、数据召回和答案生成

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

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

相关文章

基于DeepSpeed Chat详解 PPO 算法中的actor_loss_fn及其核心参数

详解 PPO 算法中的 actor_loss_fn 及其核心参数 1. 引言 在强化学习中,PPO(Proximal Policy Optimization,近端策略优化)算法是一种经典且高效的策略优化方法。它通过重要性采样(Importance Sampling)和策…

D3 基础1

D3 D3.js (Data-Driven Documents) 是一个基于 JavaScript 的库&#xff0c;用于生成动态、交互式数据可视化。它通过操作文档对象模型 (DOM) 来生成数据驱动的图形。官方网站是 https://d3js.org/ <!DOCTYPE html> <html lang"en"><head><me…

基线检查:Windows安全基线.【手动 || 自动】

基线定义 基线通常指配置和管理系统的详细描述&#xff0c;或者说是最低的安全要求&#xff0c;它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…

Python -- Linux中的Matplotlib图中无法显示中文 (中文为方框)

目的 用matplotlib生成的图中文无法正常显示 方法 主要原因: 没找到字体 进入windows系统的C:\Windows\Fonts目录, 复制自己想要的字体 粘贴到Linux服务器中对应python文件所处的文件夹内 设置字体: 设置好字体文件的路径在需要对字体设置的地方设置字体 效果 中文正常显…

快速理解类的加载过程

当程序主动使用某个类时&#xff0c;如果该类还未加载到内存中&#xff0c;则系统会通过如下三个步骤来对该类进行初始化&#xff1a; 1.加载&#xff1a;将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据转换成方法区的运行时数据结构&#xff0c;然后生成一个…

搭建 Elasticsearch 集群:完整教程

本文将详细介绍如何在 Linux 环境下搭建一个 Elasticsearch 集群&#xff0c;涵盖环境准备、配置优化、服务启动等多个环节。 一、环境准备 创建安装目录 mkdir /es cd /es解压 Elasticsearch 安装包 tar -xzf elasticsearch-7.10.1-linux-x86_64.tar.gz -C /es配置环境变量 编…

宝塔-docker拉取宝塔镜像,并运行宝塔镜像

宝塔-拉取宝塔镜像&#xff0c;并运行镜像 第1步&#xff1a;查询 docker search btpanel/baota此docker镜像由堡塔安全官方发布&#xff0c;镜像版本为宝塔面板9.2.0正式版和9.0.0_lts 稳定版&#xff0c;镜像会随着宝塔面板更新。 目前支持x86_64和arm架构可供下载使用 版本…

使用 Valgrind 检测 C 程序中的内存问题 -基础教程

内存泄漏是许多 C 语言程序中的常见问题&#xff0c;它不仅会导致程序性能下降&#xff0c;甚至可能让系统崩溃。为了检测和修复这些问题&#xff0c;Valgrind 是一个非常强大的工具&#xff0c;它可以帮助我们分析 C 程序中的内存使用情况&#xff0c;检测内存泄漏、越界访问、…

穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集

题目&#xff1a; 两个方法本质就是决策树的画法不同 方法一解析&#xff1a; 代码&#xff1a; class Solution {private List<List<Integer>> ret;//返回结果private List<Integer> path;//记录路径&#xff0c;注意返回现场public List<List<Int…

leecode双指针部分题目

leecode双指针部分题目 1. 验证回文串2. 判断子序列3. 两数之和 II - 输入有序数组4. 盛最多水的容器5. 三数之和 1. 验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 …

Web 应用如何使用sqlite?使用 sql.js 实现前端 SQLite 数据库操作

前言 在 Web 应用开发中&#xff0c;前端数据处理的重要性日益增加。为了实现更高效的前端数据管理&#xff0c;特别是在处理结构化数据时&#xff0c;sql.js 提供了一个出色的解决方案。sql.js 是将 SQLite 数据库编译为 JavaScript 的库&#xff0c;允许开发者在浏览器环境中…

docker 安装 mysql8.0容器外无法连接

文章目录 概要问题描述解决方案其他命令 概要 主要是mysql5.7和mysql8.0的兼容性问题。 排查了很久 其实就是配置文件的一句话的事情 感觉mysql8.0更为严谨 这样可能是考虑杜绝一些漏洞吧 问题描述 在容器内 netstat -an | grep 3306 都不行 在容器外 netstat -an | grep 2…

TCP协议简单分析和握手挥手过程

TCP介绍 TCP是可靠的传输层协议&#xff0c;建立连接之前会经历3次握手的阶段。 确认机制&#xff1a;接受方 收到数据之后会向 发送方 回复ACK重传机制&#xff1a;发送方 在一定时间内没有收到 接收方的ACK就会重新发送 握手目的&#xff1a;与端口建立连接 TCP的三次握手 …

VisualStudio vsix插件自动加载

本文介绍如何在Visual Studio扩展中实现PackageRegistration&#xff0c;包括设置UseManagedResourcesOnly为true&#xff0c;允许背景加载&#xff0c;并针对C#、VB、F#项目提供自动装载&#xff0c;附官方文档链接。增加以下特性即可…… [PackageRegistration(UseManagedRe…

opencv所有常见函数

一、opencv图像操作 二、opencv图像的数值运算 三、opencv图像的放射变换 四、opencv空间域图像滤波 五、图像灰度化与直方图 六、形态学图像处理 七、阈值处理与边缘检测 八、轮廓和模式匹配

【Excel】单元格分列

目录 分列&#xff08;新手友好&#xff09; 1. 选中需要分列的单元格后&#xff0c;选择 【数据】选项卡下的【分列】功能。 2. 按照分列向导提示选择适合的分列方式。 3. 分好就是这个样子 智能分列&#xff08;进阶&#xff09; 高级分列 Tips&#xff1a; 新手推荐基…

【STM32练习】基于STM32的PM2.5环境监测系统

一.项目背景 最近为了完成老师交付的任务&#xff0c;遂重制了一下小项目用STM32做一个小型的环境监测系统。 项目整体示意框图如下&#xff1a; 二.器件选择 单片机&#xff08;STM32F103&#xff09;数字温湿度模块&#xff08;DHT11&#xff09;液晶显示模块&#xff08;0.8…

《开源数据:开启信息共享与创新的宝藏之门》

《开源数据&#xff1a;开启信息共享与创新的宝藏之门》 一、开源数据概述&#xff08;一&#xff09;开源数据的定义&#xff08;二&#xff09;开源数据的发展历程 二、开源数据的优势&#xff08;一&#xff09;成本效益优势&#xff08;二&#xff09;灵活性与可定制性&…

ReactPress最佳实践—搭建导航网站实战

Github项目地址&#xff1a;https://github.com/fecommunity/easy-blog 欢迎Star。 近期&#xff0c;阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress&#xff0c;ReactPress一个基于 Next.js 的博客和 CMS 系统&#xff0c;可查看 demo站点。&#xff08;…

2024,大模型杀进“决赛圈”

Henry Chesbrough在著作《通过技术创新盈利势在必行》中&#xff0c;曾提出过一个创新的“漏斗模型”。开放式创新一开始鼓励百花齐放&#xff0c;但最终只有10%的技术能够通过这个漏斗&#xff0c;成功抵达目标市场target market&#xff0c;进入到商业化与产业化的下一个阶段…