优雅谈论大模型5: RAG

RAG

众所周知,大模型以及一些预训练的模型在训练完毕之后会在其参数存储了大量的压缩资讯。但是这样的参数是通过固定的语料库训练而成,训练完毕之后这个模型已经固定了。然而外部资讯瞬息万变,加上大模型本质上为一种概率模型,所以会存在很多问题。打个比方,它没有办法知晓最近发生的事情,同时也会针对一些问题一本正经的胡说八道。几个很明显的大模型问题:

  1. 偏见:因为大模型会收到训练语料的影响,要是输入的语料有明显的偏见也会带入到大模型之中。

  2. 幻觉:大模型其实是一种概率模型,里面各个层级的神经网络算是某种意义的概率转移模型,它的最终输出是概率输出,因此难免一本正经的胡说八道。

  3. 时效:因为训练大模型的语料是固定的,而现实世界又是一直变化,资讯其实源源不断地进来,因此训练好的大模型在提供准确的信息层面还是存在滞后。

白话的总结制约大模型的两大关键因子:资讯的来源和时效。如何合理的平衡这两个因子,也决定了在将大模型推向应用领域的关键技术选择和数据管理模式。研究人员其实在2021年的时候最早提出了RAG想用最简洁的办法解决这个问题。那么RAG是什么?RAG,英文全称Retrieval Augmented Generation,检索增强生成。RAG首次在《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中提出。

2021年当时 大模型还未流行,Seq2Seq的模型却十分流行,它帮助解决知识密集型任务,以及机器缺乏外部知识源的情况下而无法解决的任务。

大模型与数据管理

大模型的知识一般来至三个渠道,绿色渠道为用户输入(U),蓝色渠道为大模型已经掌握的知识(训练语料,L),粉色渠道为外部知识库(E),把这三部分交叉会形成4个重叠的区域,每个区域可以将知识组合使用,但是存在着或多或少的问题。

区域1:用户将输入的上下文和关注点给达大模型,大模型给出的响应会存在幻觉和失效的问题。

区域2:用户将输入的上下文和外部知识库结合,那么缺乏语义分析和对话管理和,其实这个领域和传统的机器人技术相似。

区域3:利用外部的知识库对已经训练好的大模型进行微调,微调技术会在后续的章节进行讨论,可是相当的复杂。

区域4:那么将用户上下文和关注点、外部知识库和大模型组合运用的方法就是RAG。效果虽然不如3,但是简单和便捷。

RAG基本框架

RAG的基本流程为:外部知识库预处理至向量数据库(后文会详细介绍)=》用户输入问题=》问题编码后在向量数据库检索相似知识=》将用户输入和检索知识组合成查询的提示词=》大模型基于问题结合自身和外部知识库给出最终回答。

简单的说就是A提问,然后B收到之后检索和这个问题相关的知识库,最后将相关的知识库和问题组合起来送给大模型回答。这个过程非常的干净利落,不需要涉及很复杂的编程。

因为大模型的输入都有一定的约束,过长的文本则需要先切片(上图),然后采用一定的策略拼接成提示词(下图)送给大模型去理解和给出正确的答案。在这里向量数据库成为很重要的一环,它连接着所有的环节。

关于RAG和微调之间正确性的问题,有篇论文做出了对比认为是RAG不差于全数据微调,但是论文发表在早年,和现在的大模型技术已经不可同日而语。后面会针对两者进行深入的比较分析。

Gorilla

说到RAG,就不得不提鼎鼎大名的Gorilla(基于Llama-7B)。Gorilla由加利福尼亚大学伯克利分校和微软研究院设计,该模型能根据用户输入的自然语言为用户选择最合适的API来执行对应任务。某种意义上它是希望成为一个统帅其它AI的AI模型。

它利用在三大机器学习中心的数据集进行训练,这些中心包括Torch Hub、TensorFlow Hub和HuggingFace。它不断新增新的领域,包括 Kubernetes、GCP、AWS、OpenAPI等。在zero-shot的情况下,Gorilla的性能优于GPT-4、Chat-GPT和Claude。它非常可靠,大幅减少了幻觉错误。

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

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

相关文章

中级经济师报考条件

遵守中华人民共和国宪法和法律,具有良好的道德品行和业务素质,符合以下中级经济专业技术资格考试报名条件的经济专业人员,均可报名: 1. 高中毕业并取得初级经济专业技术资格,从事相关专业工作满10年; 2. 具备大学专科…

unapp写微信小程序每次版本更新后自动更新应该怎么实现?

1.找到项目组件中的app.vue文件 2.在methods中实现如下函数 checkUpdataWxapp() {const updateManager uni.getUpdateManager();updateManager.onCheckForUpdate(function (res) {// 请求完新版本信息的回调});updateManager.onUpdateReady(function (res) {uni.showModal({t…

Nginx读书笔记

Nginx 是高性能的 HTTP 和反向代理的web服务器

ffmpeg使用xfade的转场特效

ffmpeg使用xfade的转场特效 1. 介绍2. ffmpeg里面的xfade3. 使用 1. 介绍 参考文档 ffmpeg是一个音视频编辑工具,具体的。。。。我才搞接触,所以不懂。 xfade是一种视频转场滤镜,用于在两个视频片段之间创建平滑的过渡效果。xfade的转场效果…

软件测试有哪些常用的测试方法?

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 软件测试是软件开发过程中重要组成部分,是用来确认一个程序的质量或者性能是否符合开…

visual studio snippet常用注释片段

Visual Studio 2022 添加自定义代码片段_vs2022 代码片段-CSDN博客 dclass.snippet: <?xml version"1.0" encoding"utf-8"?> <CodeSnippets xmlns"http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> …

前端JS必用工具【js-tool-big-box】学习,检测当前是否为手机端浏览器,检测某元素是否处于当前可视范围内

这一小节&#xff0c;js-tool-big-box工具库又迎来了两个非常实用功能成员&#xff0c;分别是检测当前浏览器是否为手机端浏览器&#xff0c;还有检测某元素当前是否处于可视范围内。 1 安装引入 通过npm安装&#xff0c;执行以下命令 npm i js-tool-big-box 这两个功能&…

@RequestParam和 @RequestBody有什么区别?

在Spring框架中&#xff0c;RequestParam和RequestBody是用于处理HTTP请求数据的两个不同注解&#xff0c;它们在使用场景和数据处理方式上有所区别。 RequestParam RequestParam用于将请求参数区数据绑定到控制器方法的参数上。它主要用于处理GET请求中的查询参数&#xff0…

跨域数据流动:数据提取过程中的治理与安全双轮驱动

跨域数据流动&#xff1a;数据提取过程中的治理与安全双轮驱动 随着信息技术的飞速发展&#xff0c;跨域数据流动已成为现代社会的常态。从医疗记录到金融交易&#xff0c;从社交媒体到企业运营&#xff0c;数据在各个领域之间频繁交换&#xff0c;为社会发展带来了极大的便利…

汽车电子笔记之-012:旋变工作原理及软解码硬解码

目录 1、旋变 1.1、激励的产生 1.2、旋变的标定 2、旋变解码 2.1、旋变硬解码 2.2、软解码 1、旋变 旋转变压器&#xff08;旋变&#xff09;&#xff0c;是电机控制中常用的一种位置传感器&#xff0c;用来反应电机的转子位置&#xff0c;提供给软件做电机控制等相关算法…

详细分析过电压保护器分类

按照结构特征部分 1、无间隙&#xff1a;功能部分为非线性氧化锌 电阻 片 2、串联间隙&#xff1a;功能部分为串联间隙及氧化锌电阻片 按照外形结构&#xff1a; F、复合绝缘外套 T、T型底座&#xff1a;相间距离&#xff1a;包括85、131、150、200、310、630等 W1、户外用&…

Spring之配置类源码深度解析

Spring之配置类源码深度解析 前言 Spring是一个非常流行的Java开发框架&#xff0c;它提供了很多便捷的功能和工具&#xff0c;使得Java开发变得更加高效和简单。其中&#xff0c;配置类是Spring框架中非常重要的一个概念&#xff0c;它可以用来定义Bean的创建和依赖关系&…

java基础之对线程的理解

目录 程序、进程、线程 什么是进程&#xff1f; 什么是线程 线程与进程的区别&#xff1f; 二、多线程 实现多线程方式一&#xff1a;继承Thread类 实现多线程方式二&#xff1a;实现Runnable接口 实现多线程方式三: 实现Callable接口 ​ 三种实现方式的对比 设置和获…

解释Python中的with语句在文件处理中的作用。

Python中的with语句提供了一种更加优雅和安全的方式来处理文件操作。它基于上下文管理器&#xff08;context manager&#xff09;的概念&#xff0c;能够自动管理资源的打开和关闭&#xff0c;即使在发生异常的情况下也能够保证文件被正确关闭。以下是with语句在文件处理中的作…

邦芒贴士:领导想让你主动辞职的3个表现

都说遇到一个好老板&#xff0c;比进入一个好公司还重要。好老板&#xff0c;可遇不可求&#xff1b;而遇不好的老板&#xff0c;不仅上班感到委屈&#xff0c;无奈的是想辞职经济又不允许。职场中充满着不公平的待遇&#xff0c;有克扣员工奖金的&#xff0c;有不发年终奖的&a…

Cesium 问题:使用 zoomTo 定位到模型上后展示太大了如何拉远相机

文章目录 问题分析问题 使用 zoomTo 定位到模型上后展示太大了如何拉远相机 分析 原that.map.zoomTo(tileset);现改为如果你觉得模型定位飞入后视角太小,可以尝试调整 new Cesium.HeadingPitchRange 中的参数来改变视角的范围。 new Cesium.HeadingPitchRange 接受三个参数…

Docker容器里面有什么东西?

2024年5月15日&#xff0c;周三下午 Docker 容器内部包含了一个运行的应用程序及其依赖环境。当你创建一个 Docker 容器时&#xff0c;你可以指定容器应该运行哪个镜像。这个镜像是由一系列层组成的&#xff0c;每一层包含了一些文件和目录。当你运行这个镜像时&#xff0c;Doc…

微前端架构 之 路由管理(二)

路由管理是一个核心部分&#xff0c;它负责处理多个子应用&#xff08;也称为微前端&#xff09;之间的页面跳转和导航。在微前端架构中&#xff0c;由于存在多个独立的子应用&#xff0c;因此需要一个全局的路由管理器来协调这些子应用的路由。 路由管理通常涉及以下几个方面&…

【WEEK12】 【DAY3】整合MyBatis框架【中文版】

2024.5.15 Wednesday 目录 13.整合MyBatis框架13.1.整合测试13.1.1.新建springboot-05-mybatis项目13.1.2.导入MyBatis需要的依赖13.1.3.配置数据库连接信息13.1.3.1.修改application.properties13.1.3.2.修改Springboot05MybatisApplicationTests.java并测试 13.1.4.新建pojo文…