一、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 倍。这直接导致推理速度急剧下降、显存爆炸。
这里先补充两个核心术语:
- Transformer:2017 年谷歌团队提出的深度学习架构,是当前几乎所有主流大语言模型的底层基础。它最大的创新就是自注意力机制,让模型能同时捕捉文本里任意两个词的关联,并行计算效率远高于之前的模型。
- 自注意力(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)等技术来缓解这些限制。
这句话讲了两类主流的长文本优化方案:
-
位置编码优化
- 自注意力本身不识别顺序("我打他" 和 "他打我" Token 完全一样),所以需要给每个 Token 加上位置信息,这就是位置编码。
- RoPE(旋转位置编码)、ALiBi 是目前主流的两种方案,相比老式位置编码,它们能更好地支持超长上下文,泛化性更强。
-
稀疏注意力
- 放弃 "每个 Token 和所有 Token 算注意力" 的全量模式,改成只和部分 Token 计算,把复杂度从 O (n²) 降到 O (n)。
- 比如滑动窗口注意力(Sliding Window Attention) :每个 Token 只和它前后固定窗口内的 Token 算关联,不用管整个序列,大幅节省计算和显存。
无限进步,共勉~