大语言模型RAG vs. 长文本

在学习完大语言模型中最热门的两个概念大语言模型落地的关键技术:RAG和大语言模型上下文窗口初探后,关于RAG和长文本(long-context)的优劣比较引起了广泛的讨论,本文整理了大语言模型RAG vs. 长文本争论的5种类观点。

1、观点1:RAG 与长文本各有所长

人们普遍认为将文本切片,然后进行相应的检索是最节省资源的方式。但因为检索是速度检索,受到阈值的影响,可能要多次反复检索,反而会造成一些token 消耗的问题。在多轮对话过程中,特别是在金融分析和客服场景,需要使用长文本来解决问题。如果进行切片处理,可能会丢失上下文之间的相互依赖关系。

对于大模型厂商,选择长文本或者 RAG 应该考虑哪种方式最节省 token。
 

一位投资人分享了一个项目:国内有一个做代码生成工具的公司,相比仅仅生成代码,他们更注重软件工程。因为GitHub 或 Copilot 生成代码分析和代码片段的能力已经很完美,国内真正需要解决的是能够围绕多个指标进行策略生成。

以操作系统为例,当我们想在操作系统中增加 AI 助手时,大模型不仅能实现底层部署,还能生成交互界面。这种生成能力依赖于向模型输入的数据规模,可能涉及到的代码量会达到百万行、甚至千万行。如果仍然使用比较原始的一次性输入方式,可能会遇到很多问题。

对此,这位投资人分享了两个观点:

  • 长文本是一种智力能力。拥有一个更好的上下文窗口,可以更好地解决代码的相互依赖和逻辑性问题。如果只是用 RAG 方式去分段代码,然后再连接起来,再分段提问,是无法满足需求的。
  • RAG更像是能力的边界。如果只使用上下文窗口,而没有好好利用 RAG 基于检索的方式,很难解决同一个代码工程在多个模块,或者在多个功能上的问题。只能解决比较局部的问题,无法处理多个模块之间的相互关联,例如进行联调测试,而合理使用 RAG 辅助可以拓展模型的知识边界。

进一步说明:

  • 长文本是一种智力能力:从认知科学的角度看,人类处理长文本信息的能力是高级智力的体现。阅读理解一本小说,写作一篇论文,都需要在大脑中维护一个宏大的上下文,同时进行逻辑推理、情节关联等复杂的认知活动。这种能力区别于对简单句子或短语的机械处理。对语言模型而言,长文本建模能力意味着更强的抽象和归纳能力。
  • RAG更像是能力的边界:RAG 通过检索相关片段来辅助生成,在一定程度上弥补了语言模型在长文本建模上的不足。它提供了一种即时获取背景知识的机制,减轻了模型的记忆负担,但它并不能取代模型本身的语言理解和推理能力。

2、观点2:长文本将取代RAG

长文本相比于 RAG 在解码过程中检索具有明显的优越性,因此有人认为长文本正在取代 RAG

爱丁堡大学博士付尧在评价Gemini 1.5 Pro 的帖子中写道:

“一个有 1000 万 token 上下文窗口的大模型击败了 RAG。LLM 已是强大的检索器,那为什么还构建一个弱小的检索器并花时间在解决分块、嵌入和索引问题上呢?”

他表示,1000 万 token 上下文杀死了 RAG。

Twitter地址:

https://twitter.com/Francis_YAO_/status/1758934303655030929

虽然当前上下文模型的计算成本很高,上下文窗口的消耗成本和时间消耗是非线性增长的,但有人认为未来可能会有更好的方式来重复利用缓存,从而释放压力。从 AI 的历史发展来看,现有模型的成本能降低90%,RAG可能会从现在的50%的应用场景缩减到10%。

在大规模语言模型中,重复利用缓存是一种优化策略,旨在提高模型的推理效率和速度。它的基本思路是:将模型在处理长文本时生成的中间结果(如隐藏状态、注意力矩阵等)存储在缓存中;当遇到相似的上下文时,直接从缓存中读取这些中间结果,而不是重新计算。比较常见的是Key-Value Cache、Hidden State Cache 等

对于长文本替代RAG,有人提出了一个很有意思的 idea:如果有一个无限长的上下文模型,直接将 wiki 里面所有的文本和相关信息全部输入,然后再去问问题。实际上就相当于大模型直接做 RAG,不需要有任何外部的知识库,再去进行上游检索。模型的推理成本是个门槛,即模型输入的信息越多,模型推理的时间越长,成本越高

但依旧存在可行的解决方案,即信息压缩:交给 RAG 或在线数据库处理的信息,本质上是可以被压缩的。比如检查 GitHub 里的 Star 数量,或者 wiki 上的访问量,贡献的数量等,都是可以被压缩的,进而转化为结构化的信息。但此方法的前提条件是,需要找出哪些数据真的可以被压缩,并且它的压缩失真情况在接受的范围内。

3、观点3:RAG 和长文本分工已经明确,不存在争议空间

对于一些严肃的场景中,如法规条文、保险或教育等,RAG可以更好解决的问题。在进行向量化的初期,开发者设计的就是认为里面的内容是法定正确的;或者至少为大模型提供向量数据库时,我们认为这些是客观事实,不应该对这些事实进行歪曲或改变。如果将其交给大模型的幻觉或者概率去判断,实际上可能会出现问题。如果完全依赖长文本,结果一定是不准确的。

对于多轮对话的场景,RAG能解决的问题并不是很清晰。如客服场景,很多大模型会出现与它对话的时候,会做一些后端的成本精简,不需要动用全部算力来解答一个问题。如果反复去确认,要给一个真实答案,这个时候只能交给长文本去解决这个问题,而 RAG 只是去把它向量化。此外,对于软件工程领域,涉及到代码的补全、翻译或重构时,输入 token 会非常大,只交给滑动窗口去处理,会存在理解的障碍。

4、观点4:长文本和 RAG 需要结合

RAG的特点是准确、事实性和时效性。用 RAG 的方式,可以将原有系统的元素变成多维标签,甚至将系统本身做成一个端到端的向量,或是一个标签化的端到端的实体,以防信息损失。但如果只用 RAG 的方法去做模型,可能在多轮对话后,它就不知道说什么了。长上下文在解决问题时,是一个泛化和上下文理解的过程,避免信息丢失。

长文本和RAG 都比较依赖于上游检索的输出。如果大模型对上下文的容纳程度比较低,那对检索的要求就更高,必须把最重要的信息检索出来。但是,如果大模型可以接受更多的上下文,那么对检索的要求就相对降低,而对数据准备的要求就会相对提高。

对于大模型厂商来说,无论是做大模型基座还是其他,未来最终都是要转向消费端。只有当消费端起来之后,大模型才可能有一个大的爆发。从消费端来看,一般考虑的是成本性能、泛化能力以及信息丢失。在消费端应用的场景下,最终是希望成本越来越低,性能越来越快,泛化能力越来越强。

  • 如果不能接受信息损失,需要在系统里面投入更高的 RAG 成本。
  • 如果只是进行角色扮演,或者是给出一个笼统的回答,那么长文本比较合适。

长文本和RAG 的结合更像是一种趋势,在输入大模型之前,我们不仅可以通过向量库去做文本检索;还可以通过一些 function 去获取更多的文本来做集中的召回,通过大模型做能力整合再做 RAG。长上下文能够代表所有情况,但 RAG 系统仍然会存在。

5、观点5:RAG 是大模型发展的中间态,短期内长文本无法替代 RAG

无论是传统还是新架构,不断扩大模型的处理长度后,其性能必然会有所损失。目前的大模型而言,可能较合适的处理窗口是4K到8K,因为预训练是在这个长度范围内。RAG 相当于我们把模型的存储扩展到了无限,我们要做的是把有用的、最重要的信息给大模型。

因此,RAG 一定是很重要的,只不过它未来可能会有多种形态,不一定是现在这种大模型和向量检索分开的形态,它的形态可能会有所不同。但是,这种通过一些方法提前对信息进行精炼和提取的思想,一定会在大模型的发展中长期发挥重要的作用。

长文本处理和RAG 这两个技术会共同发展。对长文本处理已经有一些优化的方法。比如,通过微调的方法把训练的参数量已经提升到了十亿或者是百亿;在推理上的话,减少长文本的处理开销也有一些优化方法,比如 MIT 的韩松实验室有一个 Streaming LLM 的方法,可以识别出长文本中哪些是重点的 Context 或者 Token;然后保留这些部分和最近的一些信息,可以进行推理长度的优化,从而降低推理的成本。

除了长文本处理在不断进步之外,RAG 最近也有很多新的技术,未来可能会结合 agent,在其他方面提高模型解决具体实际问题的能力。

以目前的推理成本来看,RAG必不可少,可能会隐藏在产品里。比如说网易的逆水寒,它里面做了很多 AI 的具体应用,比如 NPC 对话。MiniMax 的模型有一个功能叫做 Glyph,它可以去控制模型输出的结果,可以标准化它的格式,对于很多场景来说,它的推理是非常有帮助的。

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

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

相关文章

百度富文本编辑器配置(vue3)

今天分享一下我做的项目里面的一个百度富文本的配置问题,安装配置流程以及如何解决的 1.首先是安装组件 # vue-ueditor-wrap v3 仅支持 Vue 3 npm i vue-ueditor-wrap3.x -S # or yarn add vue-ueditor-wrap3.x 2. 下载 UEditor UEditor 并不支持通过 npm 的方式…

爬虫入狱笔记——xx政府网站公开政策数据

最近在学习爬虫,做个笔记吧 今天爬xx政府网站-政策法规栏目的数据 咱们首先需要找到数据从哪里来,鼠标右键->检查(或者快捷键一般为F12)检查元素,搜索关键词 eg.【违法案例】 回车, 如果没有的话&am…

模数转换器 SIG5533A 国产平替 CS5533AS,替代 CS5533AS

信格勒微电子的芯片产品已通过行业头部大厂导入验证,深受百万终端客户好评。 而且因为 fully compatible. 板子拿来,换个芯片, 性能更好 。MCU 不用改 c code。 SIG5531A/SIG5532A/SIG5533A/SIG5534A 1.6SPS to 3840SPS 16-bit/24-bit AD…

Java8关于Function接口

Java学习-Function接口 1 函数式接口简介和学习地址2 两种常见的函数式接口2.1 Runnable:执行接口,不接收参数,也无返回结果。2.2 Consumer:作为消费接口,接收一个参数,无返回结果。 3 初识3.1 定义Functio…

数据结构初阶:栈和队列

栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。…

报错:Directory“c:/Gowin/20240325 USB_3/impl/pnr”has null character.

问题说明 将工程从一个电脑拷贝到另外一个电脑,然后工程综合没有问题,布局布线时没有ERROR报出,但是就是不能进行布局布线,如下图: 解决方法: 将拷贝工程文件夹名字中的空格删除,然后重新布局…

构成CNN主要组件思想---BP

方式1:手推写神经元节点的前向、后向计算(参数更新) import numpy as np_w [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65] _b [0.35, 0.65] _x [5, 10] _y [0.01, 0.09] lr 0.5def w(index):return _w[index - 1…

昇腾Ascend之npu-smi工具的简单使用

一、参考资料 npu-smi工具 二、npu-smi工具的常用操作 信息查询(info) npu-smi info -t <type> -i <npu_id>查询所有芯片的AI CPU、control CPU和data CPU数量 参数描述-ttype: board, flash, memory, usages, sensors, temp, power, volt, common, health, p…

4/7 QT_day1

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//窗口设置this->setWindowTitle("小黑子(little black son)");this->setWindowIcon(QIcon("D:\\qq文件\\Pitrue\\pictrue\\black.jpg"));this-&g…

HiSilicon352 android9.0 系统显示方向旋转与截屏问题分析

一&#xff0c;系统显示方向 1. 概述 Android的旋转显示&#xff0c;主要运用于广告机。Android的旋转&#xff0c;包括图形UI的旋转、鼠标和遥控器的旋转及媒体旋转。 下图为竖屏UI的绘制坐标系和显示坐标系。 2. 功能说明 方案依据Android原生的旋转原理设计&#xff0c…

MySQL的sql_mode模式简介

前言 今天同事使用数据库时报错,排查问题时发现配置文件里的sql_mode配置被人注释了,所以通过查询资料对这个配置进行了下了解。 介绍 mysql为了支持在不同的环境下运行&#xff0c;允许我们给它设置不同的运行模式&#xff08;sql_mode&#xff09;。 不同的运行模式&#…

跨域问题及解决方案

跨域是指当一个Web页面的脚本&#xff08;如JavaScript&#xff09;试图请求另一个与自身不同源的Web页面资源时&#xff0c;由于浏览器的同源策略限制&#xff0c;导致请求被阻的现象。 同源策略是浏览器为了安全而设置的一种策略&#xff0c;它要求Web页面只能访问与其自身的…

使用tomcat里的API - servlet

一、创建一个新的Maven空项目 首次创建maven项目的时候&#xff0c;会自动从maven网站上下载一些依赖组件&#xff08;这个过程需要保证网络稳定&#xff0c;否则后续打包一些操作会出现一些问题&#xff09; ps:校园网可能会屏蔽一些网站&#xff0c;可能会导致maven的依赖…

Chat2DB

序言 日常开发中&#xff0c;我们可能会用到MyBatis Generator自动生成Entity实体类、DAO接口以及对应的Mapper文件可以减少一部分的冗余代码开发量&#xff0c;随着AI的发展&#xff0c;可以将自然语言转换为SQL语句&#xff0c;例如ChatSQL、阿里的Chat2DB等。 Chat2DB简介…

Stable Diffusion模型基于 TensorFlow 或 PyTorch 训练

安装必要的软件和库&#xff1a; 安装 Python&#xff08;建议使用 Python 3.x 版本&#xff09;。安装 TensorFlow 或 PyTorch&#xff0c;具体版本取决于你的模型是基于哪个框架训练的。安装其他可能需要的依赖&#xff0c;如 NumPy、Matplotlib 等。 获取模型代码和权重&…

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是&#xff1a;原来的仓库换了网址&#xff0c;原版网址不可用了。 解决方法如下&#xff1a; 方法一&#xff1a;查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…

蓝桥杯第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组题解

1.幸运数 题目链接&#xff1a;0幸运数 - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; bool deng(string& num){int n num.size();int qian 0,hou 0;for(int i0;i<n/2;i) qian (num[i]-0);for(int in/2;i<n;i) hou (num[i]-0);r…

数据库体系概述:详述其基本概念、多样分类、关键作用及核心特性

数据库是一个用于存储、管理和检索数据的系统&#xff0c;它按照特定的数据结构和模式组织数据&#xff0c;确保数据的一致性、安全性和高效访问。以下是关于数据库的详细介绍&#xff1a; 介绍&#xff1a; 数据库&#xff08;Database, DB&#xff09;是一个长期存储在计算…

ubuntu 设置时区

设置东八区&#xff08;UTC8&#xff09; timedatectl set-timezone Asia/Shanghai2.修改/etc/default/locale&#xff0c;设置24小时制 LC_TIMEen_DK.UTF-8执行tzselect&#xff0c;在国内选择亚洲 Asia确认之后选择中国&#xff08;China)接着选择北京(Beijing)最后选择(Ye…

算法汇总啊

一些常用算法汇总 算法思想-----数据结构动态规划(DP)0.题目特点1.【重点】经典例题(简单一维dp&#xff09;1.斐波那契数列2.矩形覆盖3.跳台阶4.变态跳台阶 2.我的日常练习汇总(DP)1.蓝桥真题-----路径 算法思想-----数据结构 数据结构的存储方式 : 顺序存储(数组) , 链式存储…