AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大模型|“上下文长度”和“上下文窗口”不再傻傻分不清楚!
发布日期:2024-07-31 20:12:26 浏览次数: 2096



LLMs 中的Context Length和Context Window 如何区分?

前言

如果你是一个ChatGPT或其它模型的使用者,你想必会有以下疑惑:

  • 为什么有时候输入内容,ChatGPT(或者其它产品)会提示内容过长呢?
  • 为什么聊天内容多了以后,前面的内容(AI)就忘记了呢?
  • 为什么上传的资料,有些内容就是搜不到呢?
  • 经常听到什么“上下文”,那么“上下文”究竟是指什么?怎么定义?
  • GPT-4 Turbo宣称自己“上下文”长度达到128K,然而在ChatGPT中感受不到啊!……

以上问题涉及的关键概念就是Context Length(上下文长度)和Context Window(上下文窗口)。搞清楚这两个概念就完美解释以上问题。

为什么要搞清楚这两个概念?因为它们决定了大语言模型(LLMs)在生成文本时可以处理的输入和输出信息的范围。

Context Length:它限制了模型一次性交互中能够处理的最大token数量。这包括了用户输入的所有内容和模型生成的输出。可以将其类比为资源(如金钱或时间)的总量,你只能在总量内分配这些资源。对于大模型来说,这意味着输入的信息越多,留给输出的空间就越少,反之亦然。

Context Window:这是模型在生成每个新token时实际参考的前面内容的范围。可以将其类比为在某一特定时间内你能集中注意力的范围,就像你只能专注于手头的有限任务。Context Window决定了在生成过程中,模型可以参考的上下文信息的量。这有助于模型生成连贯且相关的文本,而不会因为参考过多的上下文而导致混乱或不相关的输出。

这两个概念本质上是关于如何合理分配和使用有限的token资源,以确保大语言模型能够生成高质量的输出。理解这些限制有助于更好地应用和优化模型在各种语言处理任务中的表现,决定了我们的使用体验和使用质量

下面会展开讨论以下议题:

  • 两个概念的含义和对比
  • 使用类比的方式帮助理解
  • 大模型≠应用端:对比 GPT-4 和ChatGPT 的数值差异
  • 上传文档同样受到限制
  • 从这两个概念获得的启发

开始吧!

概念

容易混淆的概念

很多国内的文章实际上把上下文长度上下文窗口混淆了,都叫“上下文”。就像这篇文章(虽然是一篇好文章),就容易把人误导。

国外文章对于两者都有清晰的定义(下面截图),看不懂没关系,这篇文章主要就是把这两个概念讲明白。

当别人在讨论“上下文”的时候,一定要搞清楚,说的是“上下文长度”还是“上下文窗口”!

Context Length(上下文长度)

这是指模型单次可以处理的最大输入序列长度,通常以token数表示。

换句话说,这是模型可以同时“看到”的内容的最大数量

context length 限制了模型在生成或理解语言时能够处理的信息量。

例如,GPT-4的context length可以达到8,192 tokens,而某些特定版本如GPT-4-32k甚至可以达到32,768 tokens。

特别注意

context length限制了模型在生成时可以考虑的上下文信息的总量,这个限制包括了输入和输出的总和,而不是单独限制生成的内容长度。换句话说,输出内容的长度加上输入的长度不能超过context length

Context Window(上下文窗口)

这是模型在预测每个输出时实际使用的文本片段的范围

在transformer模型中,context window是通过注意力机制来定义的,它决定了模型在生成每个新token时可以参照的前面tokens的数量

context window的大小对模型的性能有显著影响,尤其是在长文本处理和内容生成方面。它决定了在生成过程中,模型可以参考的上下文信息的量。这有助于模型生成连贯且相关的文本,而不会因为参考过多的上下文而导致混乱或不相关的输出。

换句话说,大模型在生成输出时,就像从一个大型的图书馆(数据库)中寻找和调取相关信息。这些信息可以帮助模型生成准确和连贯的回答。

Context Window就像是模型能够一次性从书架上取下的书籍数量。Context Window越大,模型可以参考的信息量就越多,生成的答案也可能更详细和丰富。

区分Context Length与Context Window

Context Length是对模型能处理的总信息量的限制,而Context Window是模型在生成时实际利用的最近的上下文信息范围

假设一个模型的Context Length是2048,你输入了一段包含1500个token的文本(prompt),那么模型生成的响应最多只能有548个token(1500输入 + 548输出 = 2048总长度)。

如果这个模型的 Context Window是512 token,那么在生成第513个token时,模型只能参考前面的512个token,而不是全部2048个token。

区分点

范围:Context Length是一个静态的上限,涵盖了整个输入和输出过程中的所有token;而Context Window则是一个动态的范围,每次生成token时模型实际参考的上下文。

用途:Context Length主要决定了模型一次处理时的总信息量上限;Context Window则影响模型在生成过程中可以利用的上下文信息的深度和广度。

类比

下面使用几个类比帮助大家进一步理解。

类比(一)

如果将大语言模型(LLMs)类比为人,“Context Length”和“Context Window”可以分别与人类的长期记忆和短期记忆类比:

1. Context Length - 类比为人类的长期记忆

Context Length可以看作是一个人所能记住的所有知识和经验的总量。

就像一个人能够记住一生中学到的所有东西一样,Context Length决定了模型在一次交互中能处理的最大信息量

包括了所有输入的信息和模型生成的输出。这个类比帮助我们理解为什么有时候需要限制输入的信息量,因为人的长期记忆也是有限的,我们不可能在任何时候都记得所有事情。

2. Context Window - 类比为人类的短期记忆

Context Window则可以类比为人类的短期记忆,它决定了一个人在某个时间点能清楚记住的最近信息

短期记忆对于处理当前任务非常重要,就像当我们在对话中,需要记住刚刚说过的话以确保对话的连贯性

同样地,Context Window限制了模型在生成每个新内容时可以参考的最近信息范围

即使人类可以记得很多事情,我们在当前时刻能清晰回忆的只有最近发生的几件事

类比(二)

想象你正在阅读一本小说,而这本书特别长,你需要记住前面的内容来理解后面的内容。在这个类比中:

  1. Context Length 就像是你能携带的记忆卡片的最大数量。这些记忆卡片上可以记录你读到的内容。

    假设你只能携带100张卡片,那么即使你想记住更多的内容,你也只能选择最重要的100张信息记录下来。对于LLMs来说,context length就是它能“记住”的最大信息量。

  2. Context Window 则更像是你在写读书笔记时实际翻阅的书页数量。

    假设你在写笔记时,桌上只能放5页,那么即使你能记住的内容很多(100张卡片),在写每一条笔记时,你只能查看这5页内容。

    这影响了你能写出多详细或准确的笔记。对于LLMs来说,context window是模型在生成每个输出时实际参考的前面内容的范围。

类比(三)

  1. Context Length

  2. 假设我拿一张 A4 纸给《三体》做读书笔记,除了要记录(输入),还要写读后感(输出)。

    我能记录的信息量就被限制在一张 A4 纸当中。这张 A4 纸就是我的“Context Length”。

    而且我“记录”(输入)的越多,留给“读后感”(输出)的部分就越少。

  3. Context Window

    假设我看完《三体》后需要写一篇读书笔记,就需要回顾每个章节的内容。

    “Context Window”就是回顾章节内容的“范围”大小,如果范围是100页内容,那么我只能从最近的100页中提炼信息。

GPT-4 模型和ChatGPT(应用端)的数据对比

模型宣称的数值 ≠ 应用端

首先要区分2个概念:“大模型”和“应用端”

  • 大模型是指GPT-4,Claude-3.5,GLM-4,文心一言4.0,Llama 3.1等等;

  • 应用端是指ChatGPT,文心一言,智谱清言等;

大模型提供了底层的智能和能力,应用端则是这些能力的具象化,给用户提供了易于使用和理解的界面。

模型的能力 ≠ 应用端的表现

比如GPT-4 Turbo 宣称的上下文窗口有128K,但是应用端ChatGPT实测的结果是达不到的,这个受限于应用端的接口、优化设置和其它技术限制。


这篇文章对ChatGPT的真实的上下文长度做了测试:《ChatGPT真实的上下文长度是多少?不是128K!》ChatGPT真实的上下文长度是多少?不是128K!

下面我们从上下文长度和上下文窗口两方面对比大模型和应用端的数据

Context Length 上下文长度

  • GPT-4的Context Length在不同版本中有所不同。标准版GPT-4的Context Length为8,192个token,而GPT-4 Turbo版本的Context Length则扩展到了128,000个token

    GPT-4 Turbo能够处理非常长的输入,但需要注意的是,模型的生成能力可能会在处理超长输入时有所下降

  • 在ChatGPT应用端,标准的GPT-4模型的Context Length通常被限制在4,096个token。这一限制低于API版本中的8,192个token,并且远低于GPT-4 Turbo的128,000个token

你看看,只有区区 4000 个 token!而且包含输入和输出!

Context Window 上下文窗口

  • GPT-4的标准版和Turbo版本的Context Window是128,000个token。这意味着模型在生成输出时,可以参考输入的所有这些token,以便生成更加相关和连贯的输出。

OpenAI 官网明确指出 GPT-4 的 128k 对应的是 context Window

  • 在ChatGPT应用中,Context Window通常与Context Length相同,即4,096个token。这意味着模型在生成回复时,只能参考最近的4,096个token。虽然这些token的范围可能足以应对大多数对话情况,但在处理非常长的上下文时,模型可能会丢失早期对话中的信息 。

这样的限制可能是出于性能优化和资源管理的考虑。在实际应用中,使用更短的Context Length有助于减少计算资源的消耗和提高响应速度。

把token换算成英文和中文

  • 英文 : 1 token ≈ 0.75 words 1 token ≈ 4 characters

  • 中文 : 1 token ≈ 1 character

ChatGPT (4,096 tokens),相当于

  • 英文 大约3,072 单词 或 16,384 字母
  • 中文:大约 4,096 字

结合Context Length和Context Window 的概念,即:

在 ChatGPT 输入的中文上限大约是 4096 个,实际上是要更少,因为还要保证输出(输入+输出≤4096 字);

ChatGPT输出的内容能够参考的前文大概在 4096 字范围内,也就是如果你在一个连续对话中,对话量超过了 5000 字,那么从当下的输出往前 4096 字以外的内容是无法被使用的(忘记了)。

上传文档的内容同样受限制?

ChatGPT给出的答案是肯定的。

当用户上传文档(例如doc格式)时,ChatGPT对内容的处理确实受到Context LengthContext Window的限制。

  1. Context Length的限制影响:如果上传的文档长度超过Context Length,ChatGPT将无法处理超出部分的内容。这意味着,如果文档中包含的内容超出了这个限制,模型只能在一个对话中处理部分内容。

  2. Context Window的限制影响:对于长文档,如果整个内容无法在一次对话中完全包含,模型可能会需要对文档进行分块处理。这样做的结果是,模型可能无法考虑所有的上下文,尤其是在跨越不同块的内容时。

上传文档会占用ChatGPT的Context Length

上传的文档内容确实会占用ChatGPT的Context Length,这就意味着输入的token数量会影响剩余的输出容量。

具体来说,ChatGPT的Context Length是一次交互中输入和输出token的总数限制。例如,如果ChatGPT的Context Length是4096个token,而上传的文档已经占用了3000个token,那么剩下的输出就只能使用1096个token。这种限制同样适用于通过API与ChatGPT交互的情况,即上传文档后,模型的回复长度会根据剩余的token量而定。

思考

前面提到了很重要的信息:Context Length是指模型在一次处理过程中能够接收的最大token数。它包括了用户输入的所有token以及模型生成的所有token

Context Length决定了模型能够“看到”的最大信息量。例如,如果Context Length是2048 token,那么无论是输入还是输出,模型处理的总token数不能超过2048。

假设一个模型的Context Length是2048,你输入了一段包含1500个token的文本,那么模型生成的响应最多只能有548个token(1500输入 + 548输出 = 2048总长度)。

这意味着,如果我们输入的 prompt 很长,就会压缩输出的文本量。由此启发:

  1. 如果我们发现大模型的输出“惜字如金”,看看是不是我们的输入太多,占用 token;
  2. 如果我们希望大模型输出更多,就要压缩提示词内容;
  3. 可以把“系统提示词”和“任务指令”拆分并且分别输入,系统提示词文本量大,只要求它理解任务背景;任务指令简短不占用 token。

综上所述,如果我们充分理解这两个概念,那么以后使用大模型或者 ChatGPT 的时候,就要会做算术题了:

我应该如何通过控制prompt 或者上传的文本内容数量,使用提示词技巧,优化大模型的输出结果。

就像“限定时间内如何完成项目”,“限定金钱如何优化投资分配”,当 token 也是限定的时候,我们如何优化提示?

我相信这绝对是一个值得研究的,并且懂的人/组织会有很大优势的技术领域,因为节省下来的 token 就是真金白银。

从这个层面看,高质量的提示词不仅是为了获得更好的结果,而且是花小 token(钱)办大事!


写作不易,如果喜欢,请各位老板动动发财的小手:关注,点赞,在看⬇️


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询