LLM如何处理长上下文:Lost in the middle

news2025/1/12 1:57:23

论文地址:Lost in the Middle: How Language Models Use Long Contexts

论文总结:写prompt的时候,需要注意内容的顺序,把重要的信息放在最前面或者最后面。

大型语言模型大有用处,在设计 prompt 方面,人们通常建议为语言模型提供详尽的任务描述和背景信息。

近期的一些语言模型有能力输入较长的上下文,但它究竟能多好地利用更长的上下文?这一点却相对少有人知。

近日,斯坦福大学、加州大学伯克利分校和 Samaya AI 的研究者发布了一篇实证研究论文,探究了这个问题。

结论令人意外:如果上下文太长,语言模型会更关注其中的前后部分,中间部分却几乎被略过不看,导致模型难以找到放在输入上下文中部的相关信息。

他们对多种不同的开源(MPT-30B-Instruct、LongChat-13B (16K))和闭源(OpenAI 的 GPT-3.5-Turbo 和 Anthropic 的 Claude)的语言模型进行了对照实验 —— 实验中需要模型获取并使用输入上下文中的信息。

研究者首先实验了多文档问答,该任务需要模型基于多个文档进行推理,以找到相关信息并将其用于回答给定问题。这个任务模拟了检索增强式生成任务,其是许多商用生成式搜索和问答应用(如 Bing Chat)的基础。在实验中,他们的做法是改变输入上下文长度和输入上下文中相关信息的位置,然后对照比较输出结果的表现。

更详细地说,研究者通过向输入上下文添加更多文档来增大输入上下文的长度(类似于在检索增强式生成任务中检索更多文档);以及通过修改输入上下文中文档的顺序,将相关信息放置在上下文的开头、中间或结尾,从而修改上下文中相关信息的位置。

实验中,研究者观察到,随着相关信息位置的变化,模型性能呈现出明显的 U 型趋势,如图 1 所示。也就是说,当相关信息出现在输入上下文的开头或末尾时,语言模型的性能最高;而当模型必须获取和使用的信息位于输入上下文中部时,模型性能会显著下降。举个例子,当相关信息被放置在其输入上下文中间时,GPT3.5-Turbo 在多文档问题任务上的性能劣于没有任何文档时的情况(即闭卷设置;56.1%)。此外,研究者还发现,当上下文更长时,模型性能会稳步下降;而且配备有上下文扩展的模型并不一定就更善于使用自己的上下文。

图 1

既然已经知道语言模型在多文档问答任务中难以检索和使用相关信息,那么我们不禁要问:语言模型究竟能在多大程度上从输入上下文中检索信息?

研究者通过一个合成的键 - 值检索任务研究了这一问题。该任务被设计成一个最小化的测试平台,用于检测从输入上下文中检索出相匹配的 token 的基本能力。

在此任务中,研究者会向模型提供一个 JSON 格式的「键 - 值」对集合,然后要求模型返回与特定键关联的值。与多文档问答任务相似,键 - 值检索任务也允许对输入上下文的长度(添加更多键 - 值对)和相关信息的位置进行进行对照更改。研究者在实验中观察到了类似的 U 型性能曲线,即当匹配的 token 出现在输入上下文中部时,许多模型就难以检测出它们。

为了理解语言模型难以获取和使用输入上下文中部位置的信息的原因,研究者分析了模型架构(仅解码器和编码器 - 解码器)、查询感知型上下文化(query-aware contextualization)和指令微调的作用。

他们发现,当评估时的序列长度在训练时所用的序列长度范围内时,对于输入上下文中相关信息位置的变化,编码器 - 解码器模型是相对稳健的;但如果评估时的序列长度长于训练时的,那么模型性能会呈现出 U 型特征。

此外,查询感知型上下文化(将查询放在文档或键 - 值对之前和之后)能让模型可以完美地执行该合成键 - 值任务,但基本不会改变多文档问答任务中呈现的趋势。还有,甚至是基础语言模型(即没有指令微调)也会随输入上下文中相关信息的位置变化而呈现出 U 型性能曲线。

最后,为了更好地理解「向输入上下文添加更多信息」与「增多模型推理所用的内容量」之间的权衡,研究者进行了一个案例研究。该研究基于检索器 - 阅读器模型在开放域问答任务上的表现。相较于对照式的多文档问答任务实验(上下文总是会包含刚好一个用于问答问题的文档),在开放域问答任务中,可能会有多个或零个文档包含答案。

研究者发现,当通过检索维基百科来回答 NaturalQuestions-Open 中的查询时,模型性能在检索器召回率趋于稳定之前很久就已经饱和,这表明模型无法有效地使用额外的检索文档 —— 使用超过 20 个检索文档仅能略微提高性能(对于 GPT-3.5-Turbo 是 ∼1.5%,对于 claude-1.3 为 ∼1%)。

整体来说,这份研究能帮助人们更好地理解语言模型是如何使用输入上下文的,并为未来的长上下文模型引入了新的评估协议。为了促进未来的相关研究,研究者放出了代码和评估数据,请访问:https://github.com/nelson-liu/lost-in-the-middle   

为什么语言模型难以完整使用其输入上下文?

在多文档问答和键 - 值检索实验上的结果表明,当语言模型需要从长输入上下文的中部获取相关信息时,模型性能会显著下降。为了理解原因,研究者分析了模型架构(仅解码器和编码器 - 解码器)、查询感知型上下文化和指令微调的作用。

模型架构的影响

为了更好地理解模型架构的潜在影响,研究者比较了仅解码器模型和编码器 - 解码器语言模型。

实验中使用的具体模型为 Flan-T5-XXL 和 Flan-UL2。Flan-T5-XXL 的训练使用了序列长度为 512 token 的序列(编码器和解码器)。Flan-UL2 一开始使用 512 token 长度的序列训练(编码器和解码器),但之后又在 1024 token 长度的序列上预训练了额外 10 万步(编码器和解码器),然后进行了指令微调 —— 其编码器在 2048 token 长度的序列上微调,解码器的序列长度则为 512 token。但是,由于这些模型使用相对位置嵌入,因此它们的推断能力(原则上)可以超出这些最大上下文长度 ——Shaham et al. (2023) 发现当序列长度为 8000 token 时,这两个模型都能取得不错的表现。

图 11 并排展示了仅解码器模型和编码器 - 解码器模型的性能表现。当 Flan-UL2 评估时的序列长度在其训练时的 2048 token 上下文窗口范围内时,输入上下文中相关信息的位置变化能得到稳健的应对。而当评估时的序列长度超过 2048 token 时,如果相关信息位于输入上下文中部,那么 Flan-UL2 的性能会开始下降。Flan-T5-XXL 展现出的趋势类似 —— 如果相关信息在输入上下文中部,那么更长的输入上下文会导致性能下降更多。

图 11

研究者推测编码器 - 解码器模型也许能更好地利用其上下文窗口,因为它们的双向编码器让它们可以在未来文档的上下文中处理每个文档,这或许能提升文档之间的相对重要性估计。

查询感知型上下文化的影响

实验中,研究者的做法是将查询(即要回答的问题或要检索的键)放在数据(即文档或键 - 值对)之后来处理。由此,当对文档或键 - 值对进行上下文化时,仅解码器模型无法顾及查询 token,因为查询只会出现在 prompt 末尾而仅解码器模型在每个时间步骤只能关注之前的 token。

另一方面,编码器 - 解码器模型使用了双向编码器来上下文化输入上下文,这似乎能更加稳健地应对相关信息的位置变化 —— 研究者猜想这一直观结论或许也能用于提升仅解码器模型的性能,做法是将查询同时放在数据的前面和后面,从而实现文档或键 - 值对的查询感知型上下文化。

研究者发现,查询感知型上下文化能极大提升模型在键 - 值检索任务上的表现。举个例子,当使用 300 个键 - 值对进行评估时,GPT-3.5-Turbo (16K)(使用了查询感知型上下文化)的表现堪称完美。对比之下,如果没有查询感知型上下文化,其在同样设置下的表现最低为 45.6%。   

图 12

相比之下,在多文档问答任务上,查询感知型上下文化的影响很小。特别指出,当相关信息位于输入上下文的最开始时,它可以提高性能,但在其他设置中会稍微降低性能。

指令微调的影响

指令微调是指在初始的预训练之后,语言模型还会使用一个指令和响应数据集进行监督式微调。在这种监督式的指令微调数据中,任务规范和 / 或指令通常放置在输入上下文的开头,这可能会导致经过指令微调的语言模型为输入上下文的开头赋予更多权重。

为了更好地理解指令微调的潜在影响,研究者比较了 MPT-30B-Instruct 与其基础模型 MPT-30B(未经指令微调)在多文档问答任务上的性能表现。

图 13 展示了 MPT-30B-Instruct 和 MPT-30B 在多文档问答任务上的性能随输入上下文中相关信息的位置的变化。研究者惊讶地发现,MPT-30B-Instruct 和 MPT-30B 都展现出了 U 型趋势。尽管 MPT-30B-Instruct 的绝对表现优于 MPT-30B,但它们的整体性能趋势十分相似。

图 13

其实之前已有研究发现语言模型更偏向于近期的 token(即输入上下文的末端)。这种对近期 token 的偏好通常表现在预测连续文本的下一个词的语境中,此时语言模型只能从长程信息中获得极少的好处。相比之下,这里的实验结果表明,当 prompt 是指令格式的数据时,语言模型能够使用更长程的信息(即输入上下文的开头)。研究者猜想语言模型是从相似格式的数据中学习了这些上下文,而这些数据来自预训练时见过的网络文本。

上下文更多就总是更好吗?一个基于开放域问答的案例研究

在实践中,在输入上下文长度方面往往存在一个权衡 —— 如果给经过指令微调的语言模型输入更多信息,可能有助于其在下游任务上的性能,但也会增加模型需要处理的内容量。就算一个语言模型可以处理 1.6 万个 token,那么如果真的为其提供这么多 token,那会真的有用吗?这个问题的答案是:由下游任务决定。因为这取决于所添加上下文的边际价值以及模型有效使用长输入上下文的能力。为了更好地理解这一权衡,研究者在 NaturalQuestions-Open 上进行了开放域问答的案例研究。

他们使用的模型采用了标准的检索器 - 阅读器设置。一个检索系统(Contriever,基于 MS-MARCO 微调得到)从 NaturalQuestions-Open 取用一个输入查询,然后返回 k 个维基百科文档。为了在这些检索到的文档上调节经过指令微调的语言模型,研究者将它们包含到了 prompt 中。他们评估了检索器召回率和阅读器准确度(任何带注释的答案是否出现在预测输出中)随检索出的文档数 k 的变化情况。研究者使用了 NaturalQuestions-Open 的一个子集,其中长答案是一个段落(而不是表格或列表)。

图 14 给出了开放域问答的实验结果。可以看到,在检索器性能趋于稳定之前很久,阅读器模型的性能就早已饱和,这表明阅读器没有有效地使用额外的上下文。使用超过 20 个检索文档只能略微提升阅读器性能(对于 GPT-3.5-Turbo 是 ∼1.5%,对于 Claude 为 ∼1%),但却显著提升了输入上下文长度(由此延迟和成本都大幅提升)。

图 14

这些结果表明,如果能有效地对检索文档排序(让相关信息与输入上下文的起始处更近)或对已排序的列表进行截断处理(必要时返回更少的文档),那么也许可以提升基于语言模型的阅读器使用检索上下文的能力。

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

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

相关文章

Elasticsearch实战:索引阻塞 —— 数据保护的终极武器

文章目录 1、索引阻塞的种类2、什么时候使用阻塞?场景1:进行系统维护场景。场景2:保护数据不被随意更改场景。场景3:优化资源使用的场景。场景4:遵守安全规则场景。 3、添加索引阻塞API4、解除设置 API5、小结6、参考 …

【无标题】【数据结构】受限制的线性表——队列

🧧🧧🧧🧧🧧个人主页🎈🎈🎈🎈🎈 🧧🧧🧧🧧🧧数据结构专栏🎈🎈🎈&…

springboot企业级抽奖项目-系统设计

数据设计 E-R图 数据主体是活动(game),内置活动策略(game_rules),通过关联表(game_product)和奖品(product)联动,和用户(user&#x…

算法打卡day21|回溯法篇01|理论知识,Leetcode 77.组合

回溯法理论知识 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以回溯函数也就是递归函数,指的都是一个函数。 回溯法的效率 回溯法并不是什么高效的算法。因为回溯的本质是穷举,…

演讲嘉宾公布 | 智能家居与会议系统专题论坛将于3月28日举办

一、智能家居与会议系统专题论坛 智能家居通过集成先进的技术和设备,为人们提供了更安全、舒适、高效、便捷且多彩的生活体验。智能会议系统它通过先进的技术手段,提高了会议效率,降低了沟通成本,提升了参会者的会议体验。对于现代…

内网渗透学习-环境搭建

1、环境搭建测试 虚拟机网络环境配置,模拟外网和内网 主机操作系统网络内网ip外网ip物理主机window10vmnet8192.168.70.1攻击机kali Linuxvmnet8192.168.70.134域控主机win server 2008 r2vmnet0192.168.52.138域成员主机win server 2k3vmnet0192.168.52.141服务器…

【Windows Defender 排除指定 文件夹、文件夹以提升性能】

使用webStorm时候提醒排出程序和目录提升性能, 于是我就把我的代码目录和常用程序全部排出, 不过不知道能不能提升多少性能, 先加上再说 一.使用UI配置排出项 隐私与安全性安全中心 病毒与威胁防护 添加或删除排出项 配置 二.使用命令配置 使用 PowerShell开启自动排除列表…

基于深度学习的场景文本检测

CTPN 简介: 基于目标检测方法的文本检测模型,在Faster RCNN的基础上进行了改进,并结合双向LSTM增强了序列提取特征,通过anchor和gt的设计将文本检测任务转化为一连串小尺度文本框的检测。 解决问题: 文本长短不一&…

Android14 - AMS之Activity启动过程(2)

Android14 - AMS之Activity启动过程(1)-CSDN博客 Android14 - AMS之Activity启动过程(3)-CSDN博客 上篇梳理到: TaskDisplayArea和Task的复用与创建 TaskDisplayArea executeRequest后,随后调用startActivi…

软件系统开发设计的基本流程

一、前言 经过年的工程实践软件系统开发的流程演变有很多种,但是最基本的还是瀑布模型。但是由于近几年演变了很多种模型,现在很多公司的研发流程并不遵循瀑布模型。主要原因是无法满足市场竞争的需求。比如在哪某个节日需要敏捷上线活动等这样的场景。没…

python网络爬虫实战教学——urllib的使用(1)

文章目录 专栏导读1、前言2、urllib的使用3、发送请求3.1 urlopen3.2 request 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对…

支付宝小程序一次性订阅requestSubscribeMessage授权和操作详解

一、授权 — requestSubscribeMessage my.requestSubscribeMessage({entityIds: [xxxx],success: (res) > {console.log("success回调", res)},fail: res > {console.log(fail回调, res)} })success 回调函数 behavior String 用户订阅操作结果 — subscribe …

【译】矢量数据库 101 - 什么是矢量数据库?

原文地址:Vector Database 101 - What is a Vector Database? 1. 简介 大家好——欢迎回到 Milvus 教程。在上一教程中,我们快速浏览了每天产生的日益增长的数据量。然后,我们介绍了如何将这些数据分成结构化/半结构化数据和非结构化数据&…

【python】Matplotlib库安装教程

1.你要有python(如果没装可以看这篇文章文章安装) python及pycharm安装教程(2024超详细) 2.更新pip(此步可跳过) win R ;输入cmd(就是打开命令提示符) 打开后&#x…

【Linux】传输层协议:TCP/UDP

目录 netstat pidof UDP协议 TCP协议 TCP协议段格式 TCP协议的相关机制 确认应答(ACK)机制 超时重传机制 连接管理机制 服务端状态转换 客户端状态转化 流量控制 流量控制常见问题: 滑动窗口 拥塞控制 延迟应答 面向字节流…

electron-builder 打包问题,下载慢解决方案

目录 问题说明设置下载源 ?解决方案思路下载Electron下载winCodeSign下载nsis下载nsis-resources 总结 问题说明 项目使用了Electron,在第一次打包时会遇见下载慢,导致打包进度几乎停滞不前,甚至可能直接报错 其实这是因为Electr…

UML学习体会

1. 水在前面 本来写作的水平就很一般,平时写的也少。最近看到一些文章说学习最好的方式是输出,刚好又重温了一遍UML方面的基础,所以想记录点学习心得。而且说实话这玩意平时基本不怎么用(偶尔倒是看看别人的成果)&…

智能客服知识库如何搭建比较方便?教程奉上!

随着科技的进步,人工智能已深入到我们日常生活的各个角落。在客服行业里,智能客服知识库的出现,不仅极大地减轻了客服人员的工作负担,还提升了用户的服务体验。那么,怎样才能建立一个方便和实用的智能客服知识库呢&…

Acwing.167 木棒(回溯)

题目 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 50 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序,帮助乔治计算木棒…

【马斯克开源GROK-1模型】意味着什么?

目录 1.激动人心的消息 Grok-1 根据 Apache License 2.0 开放源代码 题外话-介绍JAX框架 2.grok-1模型参数介绍 3.推理grok-1模型需要多大显存? 4.grok-1开源意味着什么? 5.最后,让我们一同期待开源grok-1模型的训练代码!…