大语言模型上下文窗口初探(上)

news2024/11/17 0:19:50

由于篇幅原因,本文分为上下两篇,上篇主要讲解上下文窗口的概念、在LLM中的重要性,下篇主要讲解长文本能否成为LLM的护城河、国外大厂对长文本的态度。

1、什么是上下文窗口?

上下文窗口(context window)是指语言模型在进行预测或生成文本时,所考虑的前一个词元(token)或文本片段的大小范围。

在语言模型中,上下文窗口对于理解和生成与特定上下文相关的文本至关重要。较大的上下文窗口可以提供更丰富的语义信息、消除歧义、处理上下文依赖性,并帮助模型生成连贯、准确的文本,还能更好地捕捉语言的上下文相关性,使得模型能够根据前文来做出更准确的预测或生成。

早在去年10月上旬,Moonshot AI(月之暗面)的Kimi Chat问世,首个支持20万汉字输入,近期也将上下文窗口扩展到了200万汉字。反观国内大厂,也纷纷加入了长文本大战。百度文心一言声称本月会进行版本升级,支持200万-500万长度上下文;360智脑正在内测500万字,一完成就要入驻360AI浏览器;阿里的通义千问则一出手就是1000万字,且不用等就可以免费使用。

2、上下文窗口长度为何重要?

上下文长度是LLM的关键限制之一,对于语言大模型,其中一个重要用例是人们想要“将大量自定义数据输入LLM”(与公司或特定问题相关的文档,各种异构文本等),并询问有关此特定数据的问题,而不是LLM在训练期间接入一些来自互联网的抽象数据。


为了克服这一局限性,人们做了以下尝试:

  • 尝试总结技巧和复杂的链式提示。
  • 维护向量数据库以保留自定义文档的嵌入,然后通过相似性指标在它们之间展开“搜索”。
  • 尽可能使用自定义数据微调LLM(并非所有商业LLM都允许自定义微调,对开源LLM进行自定义微调并不常见)。
  • 为特定数据开发定制小型LLM(同样,这并非常规任务)

较大的上下文长度能够让已经很强大的LLM(用整个互联网数据训练的模型)查询用户的上下文和数据,以更强的个性化在完全不同的层面与你交互。所有这些都无需更改模型权重并能够“在内存中”即时“训练”。
 

总体而言,大型上下文窗口可让模型更加准确、流畅,提升模型创造力。这就好比是计算机的RAM,操作系统保留了所有应用程序的实时上下文,由于上下文长度充足,LLM可以像“推理计算机”一样,保留大量用户上下文。

为了让C端用户能够理解“长文本”这个技术名词,月之暗面创始人杨植麟用了更形象的比喻“支持更长的上下文”意味着大模型拥有更大的“内存”。这个世界已经被计算机、手机教育过了,每个普通人都有一个“简单粗暴”的认知,“内存大”就意味着这个手机或电脑配置更高、性能更牛、价格也更贵。


如何理解这句话?如果你把大模型当成一个和你对话的人,可以想象他和我们一样有短期记忆和长期记忆。长期记忆就是那些在大模型里的通过训练得到的向量和参数,你可以理解为这是它自身的知识库。而上下文就是短期记忆,当你想和他交流的时候,这些不在长期记忆中的新内容,乃至你们对话的全部过程必须以上下文为窗口提供给大模型,超过其上下文承载能力的部分,大模型就会忘掉。


GPT3.5-Turbo初版上下文窗口长度仅有4k token,也就是大概2000字,你和它对答超过两千字的内容它就基本记不住了,更别提让他记住复杂的文件了。在这种上下文环境中,可以说很难让LLM完成真正复杂,多步的操作,也无法处理文档等长格式。


为了让大模型能够做更多事,拓展上下文就成了各路大模型争相竞争的一个重要目标。作为OpenAI被公认的最强大对手,Antropic的大模型Claude的杀手锏就是长文本,其初代模型就支持100k token的上下文,直接可以处理5万字,使得不那么长的阅读分析任务足以在上下文限制中完成。这也使它一直在整体性能劣于OpenAI的情况下,总是能保有一群核心粉丝。


同时,长文本也能促进大模型基础能力的提升,前四个能力是大模型功能优化和拓展方面的,通过长文本去实现过去难以支持的功能,或增强过去支持很差的功能:

  1. 更好地理解文档。通过扩展LLM的上下文窗口,模型可以更好地捕捉文档中的长距离依赖和全局信息,从而提高摘要、问答等任务的性能。这是我们作为一般用户最经常要用的功能。
  2. 增强指代消解。更长的上下文窗口可以帮助模型更好地确定代词所指代的实体,从而提高指代消解的准确性。也就是说模型不会忘掉或搞混你们前面提到的“那个男人”,“那份文档”。
  3. 改进机器翻译。扩展上下文有助于更好地保留原文的语义,尤其是在专业术语、歧义词等方面,提高翻译质量。
  4. 增强few-shot学习能力。通过在扩展上下文中提供更多示例,LLM可以更好地进行few-shot学习,提高在新任务上的泛化能力。如今随着模型命令跟随的能力逐步增强,很多时候直接通过Prompt指令就可以让模型学到新的能力,比如做个英语教师,当个医生之类的。但这些功能描述会非常复杂,还需要举出例子帮助模型学习,长文本支持越好,在Prompt指令中能添加的例子就越多,模型就会学的越好。

另两项则是对模型基础功能的提升,因为现在的上下文增加模式除了RAG(检索增强生成)等引入外部存储的模式外,内生上下文提升都需要更改Transformer模型本身。因此在这个过程中模型的能力也会得到相应的提升,简单来说就是传统Transformer模型根本理解不了文本间隔比较远的内容间的联系,现在它能了,理解能力也就自然提升了。

  1. 提升大模型的语言理解和生成能力。更长的上下文有助于LLM更好地理解多轮对话、复杂文本中的语义,并生成更连贯、相关的响应。这对于对话系统、文本生成等应用很重要。
  2. 提高长文本推理和QA能力。扩展上下文使LLM能更好地处理涉及多文档、长文本的推理和QA任务。

在去年GPT4-Turbo还没有推出上下文长度128k版本的时候,OpenAI的开发者关系经理Logan Kilpatrick就曾经表示过,“上下文就是大语言模型的下一个关键突破”。从大语言模型的功能满足上看,也确实如此。


目前使用大语言模型的大多数人群,还是泛科技行业,有尝鲜能力的从业者、爱好者以及相关专业的学生,长文本处理能力毫无疑问是论文、深度研报、会议摘要这些有明确应用场景的刚需能力。

(上篇完)

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

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

相关文章

【已解决】ZIP压缩文件如何设置密码?

ZIP是常用的压缩格式之一,对于重要的ZIP文件,我们还可设置密码保护,那ZIP压缩文件怎么设置密码呢?不清楚的小伙伴一起来看看吧! 给ZIP文件设置密码,我们需要用到支持ZIP格式的解压缩软件,比如7…

数字乡村:科技引领新时代农村发展

随着信息技术的迅猛发展和数字化浪潮的推进,数字乡村作为新时代农村发展的重要战略,正日益成为引领农村现代化的强大引擎。数字乡村不仅代表着农村信息化建设的新高度,更是农村经济社会发展的重要支撑。通过数字技术的深入应用,农…

41.基于SpringBoot + Vue实现的前后端分离-校园网上店铺管理系统(项目 + 论文PPT)

项目介绍 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。本课题研究和开发校园网上店铺,让安装在计算机上的该系统变成管理人员的小帮手,提高校园店铺商品销售信息处…

C语言——详解字符函数和字符串函数(二)

Hi,铁子们好呀!之前博主给大家简单地介绍了部分字符和字符串函数,那么这次,博主将会把这些字符串函数给大家依次讲完! 今天讲的具体内容如下: 文章目录 6.strcmp函数的使用及模拟实现6.1 strcmp函数介绍和基本使用6.1.1 strcmp函…

还在担心报表不好做?不用怕,试试这个方法(三)

系列文章: 《还在担心报表不好做?不用怕,试试这个方法》(一) 《还在担心报表不好做?不用怕,试试这个方法》(二) 概要 在上一篇文章《还在担心报表不好做?…

python爬虫学习第十五天-------ajax的get和post请求

嗨嗨嗨!兄弟姐妹大家好哇!今天我们来学习ajax的get和post请求 一、了解ajax Ajax(Asynchronous JavaScript and XML)是一种在 Web 开发中用于创建交互式网页应用程序的技术。通过 Ajax,网页可以在不重新加载整个页面…

C语言——#define的使用

#define定义常量 基本语法 #define name stuff //(#define)(变量名)(定义的数值) 这里记得,是不加分号的 定义常量(这里 就要涉及我们经常说的宏定义) 定义常量的使…

langchain 学习笔记-FunctionCalling三种方式

ChatGPT 基于海量的训练数据生成答案,所以它无法回答训练数据中没有的信息或搜索信息 。人们希望 ChatGPT 具有对话以外的各种功能,例如“我想管理我的待办事项列表”。 函数调用是对此类请求的响应。 通过使用函数调用,ChatGPT 现在可以在生…

牛客 2024春招冲刺题单 ONT98 牛牛猜节点【中等 斐波那契数列 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/6a3dfb5be4544381908529dc678ca6dd 思路 斐波那契数列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

Nestjs中使用MQTT

准备工作,首先就得硬件的小伙伴自己吧硬件部分配置好,成功连通云端,并成功推送数据。然后就是服务器装好Nestjs 。做好这些准备工作就可以开始了!!! 然后直接开始工作: 一、安装 # 直接安装最…

Spring boot框架Rouyi Cloud入门之token

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

Android Glide配置AppGlideModule定制化线程池,Kotlin(1)

Android Glide配置AppGlideModule定制化线程池,Kotlin(1) plugins {id org.jetbrains.kotlin.kapt }implementation com.github.bumptech.glide:glide:4.16.0kapt com.github.bumptech.glide:compiler:4.16.0 import android.content.Context…

布局图纸电子管理系统,布局图纸电子管理系统哪个好?

布局图纸电子管理系统是一个涉及多个步骤和策略的过程,旨在优化图纸的存储、检索、共享和安全性。下面是一个可能的布局图纸电子管理系统的框架和关键要素: 一、需求分析 明确电子管理系统的具体需求,包括用户群体、功能模块、安全性要求等。…

竞赛 交通目标检测-行人车辆检测流量计数 - 竞赛

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

NzN的数据结构--实现双向链表

上一章中,我们学习了链表中的单链表,那今天我们来学习另一种比较常见的链表--双向链表!! 目录 一、双向链表的结构 二、 双向链表的实现 1. 双向链表的初始化和销毁 2. 双向链表的打印 3. 双向链表的头插/尾插 4. 双向链表的…

java内存模型和线程

java内存模型 一个服务端需要同时对多个客户端提供服务,就是并法的具体场景。 衡量一个服务性能的好坏,每秒实务处理数(Transactions Per Second,TPS)是重要指标,它代表一秒内服务端平均能响应的请求总数。 硬件的效率和一致性 …

汇川PLC学习Day4:电机参数和气缸控制参数

汇川PLC学习Day4:伺服电机参数和气缸控制参数 一、伺服电机参数二、气缸参数1. 输入IO映射(1)输入IO映射(2) 输入IO触摸屏标签显示映射 2. 输出IO映射(1)输出IO映射(2) …

java中的正则表达式和异常

正则表达式: 作用一:用来校验数据格式是否合法 作用二:在文本中查找满足要求的内容 不用正则表达式:检验QQ号是否合法,要求全部是数字,长度在6-20,不能以0开头 public class test {public stat…

Python爬虫-爬取药膳食谱数据

🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:喜欢的话麻烦您点个👍和⭐! 🎈…

顺序表的应用之通讯录

学习了顺序表之后,我们也得知道它的实际用途吧!所以,我们今天来学习一下通讯录的实现。 typedef struct personInfo SLDataType; contact.h #define NAME_MAX 20 #define GENDER_MAX 20 #define GTEL_MAX 20 #define ADDR_MAX 100 #include&…