论文解读: 2023-Lost in the Middle: How Language Models Use Long Contexts

news2024/11/26 2:25:08

大模型使用的关键在于Prompt,然而大模型存在幻觉现象,如何减少这种现象的发生成为迫切解决的问题。外部知识库+LLM的方法可以缓解大模型幻觉,但是如何撰写Prompt才能发挥LLM的性能。下面介绍这篇论文说明上下文信息出现在Prompt什么位置使模型表现最佳,以及上下文文本长度对LLM性能的影响。

Title: Lost in the Middle How Language Models Use Long Contexts
URL: https://arxiv.org/pdf/2307.03172.pdf
Code: https://github.com/nelson-liu/lost-in-the-middle

1. Motivate

最近的语言模型能够将长上下文作为输入,然而人们对语言模型在多大程度上支持长上下文还了解不多。因此本文针对从输入上下文中识别相关信息的任务:多文档问题解答和键值检索,对语言模型的性能进行了分析。

2. Experiment

2.1 多文档问答

2.1.1 目的

探索输入上下文长度和相关信息在输入上下文的位置对LLM输出影响。

2.1.2 模型

  • claude-1.3
  • claude-1.3-100k
  • gpt-3.5-turbo-16k-0613
  • mpt-30b-instruct
  • longchat-13b-16k

全部模型统一使用贪婪解码策略。
评估指标:使用准确性作为评估指标,判断预测输出中是否出现任何正确答案。

2.1.3 结果分析

在这里插入图片描述

为了调整此任务中的输入上下文长度,增加或减少不包含答案的检索文档的数量。(见下图)
在这里插入图片描述
为了调整相关信息在输入上下文中的位置,我们调整输入上下文中文档的顺序,以更改包含答案的文档的位置。(见下图)
在这里插入图片描述

论文设置Closed-Book和Oracle两种实验环境,实验结果表明当输入含有上下文信息时,模型输出正确答案的概率大幅度提高。
在这里插入图片描述

实验结果显示当相关信息出现在输入上下文的开头或结尾时,模型性能最高。相关信息出现在上下文中间位置时模型表现最差。这些结果表明模型在执行下游任务时无法有效的推断其内部上下文窗口,模型更容易使用上下文开始或者结束的信息。如下图所示。
在这里插入图片描述

实验结果显示,随着输入上下文的增长,模型性能显著下降,表明模型很难从长输入上下文中检索和使用相关信息。当将模型与其相应的扩展上下文版本进行比较时,这种趋势仍在继续。尽管扩展上下文模型可以处理更长的输入上下文,但它们可能无法更好地对其上下文中的信息进行推理(查看GPT-3.5-Turbo-0613和GPT-3.5-Turbo-16k-0613)。
在这里插入图片描述

扩展上下文模型不一定更擅长使用输入上下文。在输入上下文模型及其扩展上下文对应模型的上下文窗口的设置中,我们可以看到它们之间的性能几乎是相同的。这些结果表明,具有较长最大上下文窗口的模型在使用这种扩展上下文方面并不一定更好。

2.2 键-值检索

2.2.1 目的

探索输入上下文中匹配和检索相关信息的基本能力

2.2.2 模型

  • claude-1.3
  • claude-1.3-100k
  • gpt-3.5-turbo-16k-0613
  • mpt-30b-instruct
  • longchat-13b-16k

评估指标:使用准确性作为评估指标,评估预测输出中是否出现了正确的值。

2.2.3结果分析

在这里插入图片描述

为了调整该任务中的输入上下文长度,通过添加或删除随机键来改变输入JSON键值对的数量,从而改变干扰器键值对的数目。(见下图)
在这里插入图片描述

为了调整输入上下文中相关信息的位置,在序列化的JSON对象中更改要检索的键的位置。(见下图)
在这里插入图片描述

实验结果显示在输入上下文的中间访问键值对时,模型性能最差。此外,这种设置下的模型性能通常也会随着输入上下文的增加而降低。
LongChat-13B(16K)在140键值设置中是一个显著的优势;当相关信息位于输入上下文的开头时,它倾向于生成代码来检索键,而不是输出值本身。
在这里插入图片描述

2.3 模型架构分析

2.3.1目的

为了更好地理解模型架构对语言模型使用上下文的潜在影响,比较了仅解码器和编码器-解码器语言模型。

2.3.2 结果分析

Flan-UL2在其2048训练时间上下文窗口内的序列上进行评估,其性能对输入上下文中相关信息的位置变化相对稳健。当在序列长于2048个令牌的设置上进行评估时,当相关信息位于中间时,Flan-UL2性能开始降级。Flan-T5-XXL显示了类似的趋势,当将相关信息放在输入上下文的中间时,输入上下文越长,性能下降越大。
在这里插入图片描述

实验结果表明编码器-解码器模型可能会更好地利用其上下文窗口,因为它们的双向编码器允许在未来文档的上下文中处理每个文档,从而可能增强文档之间的相对重要性。

当相关信息出现在最开始时,查询感知上下文化(即,将问题放在输入上下文中的文档之前和之后)提高了多文档QA性能,但在其他情况下会略微降低性能。
在这里插入图片描述

实验过程显示下图两种模型都有一条U形性能曲线,当相关信息出现在输入上下文的开始或结尾时,性能要高得多,这表明指令调优过程本身不一定对这些性能趋势负责。
在这里插入图片描述

2.4 总结

多文档问答和键值检索结果表明,当语言模型必须在长输入上下文中访问相关信息时,其性能会显著下降。

在对文档或键值对进行上下编码时,只有解码器的模型无法查询标记,因为查询只出现在提示的末尾,而只有解码器的模型在每个时间步只能处理前面的标记。另一方面,编码器-解码器模型使用双向编码器对输入上下文进行上下编码,并且似乎对输入上下文中相关信息的位置变化更具鲁棒性——可以使用这种直觉,通过在数据之前和之后放置查询,启用文档的查询感知上下文化(或键值对),来提高仅解码器模型的性能。查询感知的上下编码大大提高了键值检索任务的性能。

当使用指令格式的数据提示时,语言模型能够使用更长范围的信息(即输入上下文的开始)。增加输入上下文长度通常是一种折衷——为指令调整语言模型提供更多信息可能有助于改善下游任务性能,但也会增加模型必须推理的内容量。

3. Conclusion

实验证实将相关信息放在长输入上下文的开始或结尾有利于检索。长输入上下文越长模型性能越低。
仅解码器模型更加关注相关信息的位置,编码器-解码器模型对相关信息的位置具有一定的鲁棒性。

Reference

  • https://www.writebug.com/article/1fc384b0-1f88-11ee-ad3c-0242ac1b000f

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

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

相关文章

Python 算法基础篇之 Python 语言回顾:变量、条件语句、循环语句、函数等

Python 算法基础篇之 Python 语言回顾:变量、条件语句、循环语句、函数等 引言 1. 变量2. 条件语句3. 循环语句 a ) for 循环 b ) while 循环 4. 函数总结 引言 Python 是一种流行的编程语言,具有简洁而易读的语法。在学习算法时,了解 Python…

被B站用户高赞的广告文案:暴涨900万播放

今年6月,B站公布第一季度财报数据,B站日均活跃用户达9370万,月活3.15亿。在高月活的基础上,用户日均使用时长已经到了96分钟,日均视频播放量达41亿。 来源-B站 用户属性年轻、活跃度高已经成为B站典型的平台标签&…

Apikit 自学日记:私有云才有的测试文件库功能,该如何使用呢

在 APIkit 的私有云版本中,提供了测试文件库功能。不过目前该功能仅供私有云产品,线上SaaS产品不提供测试文件库功能 API自动化测试中可以添加文件参数。在这里统一管理所有测试文件。 在测试文件库界面,点击上传文件: 在私有云产…

【C++】STL反向迭代器模拟实现,迭代器适配器,迭代器类型简单介绍

反向迭代器 前言正式开始基本演示模拟实现的大致思路基本框架前置、--*重载->重载list和vector适配反向迭代器迭代器的类型库中reverse和sort模板参数中的迭代器reversesort 前言 本篇主要讲反向迭代器的模拟实现。 能够加深各位对泛型的理解。 前面我那篇string介绍里面…

Ubuntu学习笔记(二)——文件属性与权限

文章目录 前言一、用户与用户组1.用户(文件拥有者)2.用户组3.其他人 二、Linux用户身份与用户组记录文件1. /etc/passwd2. /etc/shadow3. /etc/group 三、文件属性与权限1. 查看文件属性的方法(ls)2.文件属性详细介绍2.1 权限2.2 …

Python多个if代码优化

一、背景 大量的if … elif…代码非常难看,也很难维护。扩展不太方便 二、优化方案 以下栗子展示不同的角色获取折扣信息。 1、正常写法 def discount_algorithm(user_role):if user_role admin:discount 0.1return discountelif user_role msp:discount 0.…

【protobuf】socket.io序列化和反序列化

1.背景 后台利用socket.io发送websocket消息&#xff0c;加密用到protobuf 2.反序列化时遇到问题 Traceback (most recent call last): File "D:/locust/Nigeria/test3.py", line 40, in <module> play.ParseFromString(decode_spin_str) google.proto…

Cesium 实战 - 通过 Blender 将模型组件拆解为独立子模型

Cesium 实战 - 通过 Blender 将模型组件拆解为独立子模型 拆分模型1.导入模型&#xff08;J15.glb&#xff09;2.拆分模型3.保存模型 完整代码在线示例 上篇博客介绍了 Cesium 实战 - AGI_articulations 扩展&#xff1a;模型自定义关节动作 这篇接着介绍一下&#xff0c;模型…

【Redis】高可用之三:集群(cluster)

本文是Redis系列第6篇&#xff0c;前5篇欢迎移步 【Redis】不卡壳的 Redis 学习之路&#xff1a;从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型&#xff0c;各个文章总有些小不同&#xff0c;我们这里讨论的是Redis 7.0&#xff0c;为确保准确&#xf…

YZ04:文本批量替换使用说明文档

【分享成果&#xff0c;随喜正能量】达摩祖师说&#xff1a;“不谋其前&#xff0c;不虑其后&#xff0c;不恋当今。”你內心安适&#xff0c;就会宠辱不惊&#xff0c;俯仰无愧&#xff0c;从一天到一年&#xff0c;从一年到一生&#xff0c;秒秒感受安详&#xff0c;活在至真…

MySQL-数据库读写分离(中)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

常见java知识点1

目录 1 什么是Spring框架&#xff1f;Spring框架有哪些主要模块&#xff1f; 2 使用Spring框架有什么好处&#xff1f; 3 Java常用的包&#xff08;列举六个&#xff09; 4 Arraylist 和 Linkedlist 的区别 5 HashMap和Hashtable的区别 6 Java中常见的…

vue-sticky简单使用(实现吸顶效果)

参考链接 vue-sticky&#xff1a;在页面滚动时将指定元素固定在窗口上的某个位置 生效条件如下&#xff1a; 1、父元素不能设置 overflow:hidden 或者 overflow:auto 属性 2、至少指定 top 、bottom 、left 、right 4 个值中的一个&#xff0c;否则只会处于相对定位 3、父元素…

OpenCVForUnity(六)图像的对比度和亮度

文章目录 前言公式讲解Unity嵌套循环实现使用convertTo实现亮度和对比度调整:伽马矫正 前言 图片处理中这也是非常常用的功能,下面我们一起来学习一下如何在OpenCVForUnity中修改图像的对比度亮度 图像处理中的常见算子可以将一个或多个输入图像转换为输出图像。这些变换包括点…

tdengine超级表创建

tdengine有官网文档&#xff0c;这里就把实际使用的SQL贴出来吧。 创建超级表&#xff1a; CREATE STABLE superTable(time TIMESTAMP, val double) TAGS (point varchar(100));执行SQL后会创建一个叫superTable的超级表。 建完超级表后再创建子表&#xff0c;SQL如下&#…

8、PHP访问权限配置与报错处理:You don‘t have permission to access this resource.

这是由于阿帕奇服务器的权限设置导致的。 解决办法&#xff1a; 1、由于我们之前已经设置了虚拟主机&#xff0c;我们在WAMPserver中&#xff0c;找到添加虚拟主机的配置文件的路径 2、打开这个文件&#xff0c;修改相应的虚拟主机的访问权限&#xff0c;Require后面改为all …

Cesium Terrain Builder (CTB) 简单使用_地形切片

Cesium Terrain Builder (CTB) 简单使用_地形切片 目录 Cesium Terrain Builder (CTB) 简单使用_地形切片 官网地址&#xff1a; winr&#xff08;cmd&#xff09;打开命令提示符工具运行&#xff1a; Create a GDAL Virtual Dataset (optional) Create Cesium Terrain fi…

CentOS系统下Docker安装部署Strapi

Nodejs 16 安装 移除旧版本的 node yum remove -y nodejs npm使用以下命令将存储库添加到系统 curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -配置存储库之后可以安装 yum install -y nodejs查看版本 node -v下载 yarn 包管理 curl -sL https://dl.yar…

数字化时代,智能文件工具让办公升级

无论是在办公室还是在学校&#xff0c;文件管理是我们日常工作中不可或缺的一环。传统的文件整理方式可能需要花费大量的时间和精力&#xff0c;而且常常容易出现混乱和遗漏。然而&#xff0c;随着科技的不断进步&#xff0c;我们现在有幸生活在一个数字化时代&#xff0c;因此…

ELK(elasticsearch+logstash+kibana+beats)

什么是ELK Elasticsearch&#xff1a;Elasticsearch&#xff08;以下简称ES&#xff09; 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 ES是 Elastic Stack 的核心&#xff0c;采用集中式数据存储&#xff0c;可以通过机器学习来…