token是什么?为什么大模型会有上下文长度的限制

一、Token的定义

Token 是大语言模型(LLM)处理文本时的最小单位

模型不会直接识别汉字、英文字母,它处理文本有自己的最小颗粒度,这个颗粒就叫 Token。所有的语义理解、内容生成都建立在 Token 的基础上,不会拆得比 Token 更小。

你可以把它理解为模型 "阅读" 文本时的 "碎片"------ 但这些碎片不一定对应我们日常理解的字或词。

二、Token 核心三点

2.1 分词过程

当你输入一句话时,模型会通过一个叫做 Tokenizer(分词器) 的组件,将文本切分成一个个 token。

  • Tokenizer(分词器) :是大模型自带的一个前置工具,相当于 "文本切割器"。它有一套固定的分词规则(由训练阶段的词表决定),输入原始文本,输出切好的 Token 序列,是模型处理文本的第一步。

  • 没有分词器,模型就看不懂原始的文字字符串,必须先转成它认识的 Token 格式。

比如「我喜欢猫」可能被切成 ["我", "喜欢", "猫"] 三个 token;而英文单词如 "unbelievable" 可能被拆成 ["un", "believ", "able"] 三个 token。

这是中英文分词的典型例子,背后是行业通用的 "子词分词" 思路:

  • 中文:"喜欢" 是高频常用词,分词器会把它保留为一个 Token,减少序列长度;如果是非常生僻的词,才会拆成单字。
  • 英文:unbelievable 拆成前缀un-、词根believ、后缀-able,是因为英语单词总量太多,如果每个整词都做一个 Token,词表会爆炸。拆成语义子单元后,既可以覆盖几乎所有英文单词,又能控制词表大小,还能让模型理解词根词缀的规律。

2.2 向量化

模型会将每个 token 转换成一个高维向量(embedding),所有的计算(注意力机制、前馈网络等)都是在这些向量上进行的。

这句话讲的是 Token 的 "数字化" 过程:

  • 高维向量(embedding,也叫嵌入 / 词向量) :计算机只能处理数字,不能直接处理文字。每个 Token 都会被转换成一串有几千个数字的数组(高维向量),这串数字里编码了这个 Token 的语义、语法、情感等所有信息。
    • 语义相近的词,向量距离就近,比如 "猫" 和 "狗" 的向量相似度很高,"猫" 和 "桌子" 的相似度就很低。
  • 注意力机制、前馈网络:是 Transformer 架构里的两个核心计算模块。模型理解语义、推理逻辑的全部运算,都是在这些向量上做数学计算完成的,不会直接操作文字本身。

2.3 计费单位

这也是大模型 API 按 token 数量收费的原因------输入和输出的 token 总数直接决定了计算量。

解释了大模型按 Token 计费的底层逻辑:

  • 每一个 Token 都要走一遍完整的向量计算流程,Token 总数越多,GPU 要做的运算就越多,硬件成本就越高。
  • 计费时会同时算输入 Token (你发给模型的文字)和输出 Token(模型生成给你的回复),两者加起来就是总消耗。

三、上下文长度限制

上下文长度限制即模型一次能处理的 token 数量上限,如 4K、128K、200K,存在的原因主要有以下几点:

先解释基础概念:

  • 上下文长度:也叫上下文窗口,指模型单次能 "记住并处理" 的 Token 总数量上限,包含你之前的对话历史、当前提问、模型即将生成的回复。超出这个上限的内容,模型就 "看不到、记不住" 了。
  • 这里的 K 是计算机单位,1K = 1024,比如 4K 就是 4096 个 Token,128K 就是 131072 个 Token。

3.1 注意力机制的 "平方灾难"

Transformer 的核心是自注意力(Self-Attention),其计算复杂度与序列长度呈二次方关系 (O(n²))。如果上下文从 4K 扩展到 128K,计算量不是增加 32 倍,而是增加约 1000 倍。这直接导致推理速度急剧下降、显存爆炸。

这里先补充两个核心术语:

  1. Transformer:2017 年谷歌团队提出的深度学习架构,是当前几乎所有主流大语言模型的底层基础。它最大的创新就是自注意力机制,让模型能同时捕捉文本里任意两个词的关联,并行计算效率远高于之前的模型。
  2. 自注意力(Self-Attention) :模型理解语义的核心能力 ------ 处理每个 Token 时,都会去计算它和序列里所有其他 Token的关联程度(比如代词指代哪个名词、因果关系对应哪个内容),从而理解整句话的逻辑。

如果上下文从 4K 扩展到 128K,计算量不是增加 32 倍,而是增加约 1000 倍,这直接导致推理速度急剧下降、显存爆炸。

  • 推理:就是模型接收输入、生成输出的过程(我们日常和 AI 对话就是推理过程)。计算量暴涨后,GPU 算不过来,生成回复的速度就会大幅变慢。
  • 显存爆炸:计算过程中产生的大量中间数据,会超出 GPU 显存的容量,导致程序直接报错、无法运行,俗称 "显存炸了"。

3.2 显存(GPU Memory)的物理限制

注意力机制需要存储一个 "注意力矩阵"(Attention Matrix),记录序列中每个 token 与其他所有 token 的关系。序列越长,这个矩阵占用的显存越大。

  • 注意力矩阵:是一个 n 行 ×n 列 的表格(n 是 Token 数量),每个格子里存的是 "第 i 个 Token 和第 j 个 Token 的关联程度(注意力权重)"。

  • 自注意力计算时,必须先把这个矩阵存在显存里,才能进行后续运算,它是长文本最占显存的部分之一。

128K 长度的注意力矩阵需要占用数十 GB 的显存,这对硬件是巨大挑战。

可以做个简单估算:

  • 128K = 131072 个 Token,矩阵大小是 131072 × 131072 ≈ 170 亿个数值
  • 每个数值用常用的半精度格式存储,约占 2 字节,仅这个矩阵就需要约 32GB 显存
  • 再加上模型本身的参数、其他中间计算数据,总显存需求会非常高,普通消费级 GPU 根本装不下,这是硬件层面的物理瓶颈。

3.3 长距离依赖的衰减

即使技术上能处理长文本,模型在长序列中的注意力分数会变得非常稀疏和稀释,导致模型 "看不清楚" 远距离的信息关联。

  • 注意力分数:一个 Token 对其他所有 Token 的 "关注度" 总和是固定的(总和为 1)。序列越长,每个 Token 能分到的关注度就越少,就像一杯水倒进越来越大的池子里,浓度会越来越低。

  • 最终结果:相隔很远的两个 Token,关联权重会变得极低,模型相当于 "没注意到" 两者的关系,长文本的逻辑推理效果就会下降。

3.4 训练难度与成本

训练超长上下文模型需要更长的训练时间、更大的显存,且长序列的梯度传播更不稳定。

  • 训练模型比推理更费资源:训练时不仅要做前向计算,还要存反向传播的梯度数据来更新模型参数,显存压力是推理的数倍。

  • 梯度传播不稳定:训练时,误差信号要从输出层一层一层传回输入层来调整参数。序列越长,梯度传递的路径就越长,很容易出现 "梯度消失"(梯度传着传着变成 0,参数不更新了)或 "梯度爆炸"(梯度太大,参数乱掉),模型很难学好长序列的规律。

目前业界主要通过位置编码优化(如 RoPE、ALiBi)和稀疏注意力(如 Sliding Window Attention)等技术来缓解这些限制。

这句话讲了两类主流的长文本优化方案:

  1. 位置编码优化

    • 自注意力本身不识别顺序("我打他" 和 "他打我" Token 完全一样),所以需要给每个 Token 加上位置信息,这就是位置编码。
    • RoPE(旋转位置编码)、ALiBi 是目前主流的两种方案,相比老式位置编码,它们能更好地支持超长上下文,泛化性更强。
  2. 稀疏注意力

    • 放弃 "每个 Token 和所有 Token 算注意力" 的全量模式,改成只和部分 Token 计算,把复杂度从 O (n²) 降到 O (n)。
    • 比如滑动窗口注意力(Sliding Window Attention) :每个 Token 只和它前后固定窗口内的 Token 算关联,不用管整个序列,大幅节省计算和显存。

无限进步,共勉~

相关推荐
kyriewen5 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
程序员辉哥6 小时前
Skill精通系列之GStack-最会做决策的虚拟团队
openai·ai编程·claude
PinkSun6 小时前
Spring AI ChatMemory踩坑实录:重启丢数据、Agent丢记忆、对话溢出
后端·ai编程
阿里云云原生6 小时前
软件工程领域 LLM 驱动的自迭代知识引擎
llm
吴佳浩6 小时前
Hermes Agent 连环 400 真凶找到了:一个 call_id 让人炸毛
人工智能·llm·agent
浩风祭月7 小时前
Cursor + Claude Code实战:从需求分析到测试提交的完整流程
ai编程·claude·cursor
程序员cxuan7 小时前
幽默,一个 Github 名字叫“马尾辫”,但是他给你省了 80% 的 token
人工智能·后端·程序员
didadida2627 小时前
Isshin AI Agent:LLM 工具路由架构
ai编程
孟健7 小时前
GLM-5.2能打了,但还不能替代GPT
ai编程