由于篇幅原因,本文分为上下两篇,上篇主要讲解上下文窗口的概念、在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的情况下,总是能保有一群核心粉丝。
同时,长文本也能促进大模型基础能力的提升,前四个能力是大模型功能优化和拓展方面的,通过长文本去实现过去难以支持的功能,或增强过去支持很差的功能:
- 更好地理解文档。通过扩展LLM的上下文窗口,模型可以更好地捕捉文档中的长距离依赖和全局信息,从而提高摘要、问答等任务的性能。这是我们作为一般用户最经常要用的功能。
- 增强指代消解。更长的上下文窗口可以帮助模型更好地确定代词所指代的实体,从而提高指代消解的准确性。也就是说模型不会忘掉或搞混你们前面提到的“那个男人”,“那份文档”。
- 改进机器翻译。扩展上下文有助于更好地保留原文的语义,尤其是在专业术语、歧义词等方面,提高翻译质量。
- 增强few-shot学习能力。通过在扩展上下文中提供更多示例,LLM可以更好地进行few-shot学习,提高在新任务上的泛化能力。如今随着模型命令跟随的能力逐步增强,很多时候直接通过Prompt指令就可以让模型学到新的能力,比如做个英语教师,当个医生之类的。但这些功能描述会非常复杂,还需要举出例子帮助模型学习,长文本支持越好,在Prompt指令中能添加的例子就越多,模型就会学的越好。
另两项则是对模型基础功能的提升,因为现在的上下文增加模式除了RAG(检索增强生成)等引入外部存储的模式外,内生上下文提升都需要更改Transformer模型本身。因此在这个过程中模型的能力也会得到相应的提升,简单来说就是传统Transformer模型根本理解不了文本间隔比较远的内容间的联系,现在它能了,理解能力也就自然提升了。
- 提升大模型的语言理解和生成能力。更长的上下文有助于LLM更好地理解多轮对话、复杂文本中的语义,并生成更连贯、相关的响应。这对于对话系统、文本生成等应用很重要。
- 提高长文本推理和QA能力。扩展上下文使LLM能更好地处理涉及多文档、长文本的推理和QA任务。
在去年GPT4-Turbo还没有推出上下文长度128k版本的时候,OpenAI的开发者关系经理Logan Kilpatrick就曾经表示过,“上下文就是大语言模型的下一个关键突破”。从大语言模型的功能满足上看,也确实如此。
目前使用大语言模型的大多数人群,还是泛科技行业,有尝鲜能力的从业者、爱好者以及相关专业的学生,长文本处理能力毫无疑问是论文、深度研报、会议摘要这些有明确应用场景的刚需能力。
(上篇完)