核心概念:Token与Context Window的本质

要理解大模型,首先必须厘清 Context Window(上下文窗口)与 Token 的关系。Context Window 代表了模型一次能够处理的最大信息量,例如 GPT-5.2 的 Context Window 为 40万,这意味着它一次最多能处理 40万个 Token。这里需要特别强调一个关键区别:这并非 40 万字,也不是 40 万个词。

“我说的不是 40 万个字,也不是 40 万个词,而是 40 万个 Token。”

许多人对 Token 一词耳熟能详,却鲜少深究其生成逻辑及与字词的关系。事实上,大模型本质上是一个巨大的数学函数,内部全由矩阵运算构成。它的输入是数字,输出也是数字,模型本身并不理解人类文字。因此,在人类与大模型之间必须存在一个“翻译官”,即 Tokenizer。这个组件负责两个核心环节:编码(文字转数字)和解码(数字转回文字)。

编码流程详解:切分与映射

以用户提问“马克喜欢人工智能吗?”为例,该问题首先发送给 Tokenizer 进行编码。这一过程包含两个具体步骤:切分和映射。第一步“切分”是将用户问题切割成最小的单位,这些碎片即为 Token。在本例中,经过初步处理后得到了四个 Token。

第二步“映射”是因为模型只识别数字。Tokenizer 会将每个 Token 映射为一个对应的 Token ID。Token ID 与 Token 是一对一的关系,如同硬币的正反面:Token是文字表现形式,而Token ID是数字表现形式。

“经过这两步后,我们原本的一句话就变成了一串 Token ID 列表。”

完成编码后,Tokenizer 将这一数字列表传给模型。模型经过内部运算后,吐出一个 Token ID。此时解码环节启动。

解码流程:从数字回归文字

当模型输出一个 Token ID(例如代表“喜欢”的ID)时,Tokenizer 再次登场进行解码。与编码不同,解码环节只有一步:映射。由于模型每次仅输出一个 Token ID,因此不需要进行“切分”操作。

解码的映射方向与编码相反,是将数字转换为文字。完成这一步后,我们就获得了大模型输出的第一个 Token——“喜欢”。如果模型未说完,可继续输出后续 Token(如第二个、第三个等),流程类似。至此,大模型从输入到输出的基本工作原理已阐述完毕。

Tokenizer 的训练原理:BPE算法实例

既然编码和解码涉及切分和映射,那么这些规则从何而来?答案是:Tokenizer 是被训练出来的。虽然大模型训练涉及复杂数学运算,但 Tokenizer 的训练相对简单。业界常用算法包括 Google 使用的 Unigram 和 OpenAI/Anthropic 多用的 BPE(字节对编码)。本文以 BPE为例演示训练流程。

“它的原理也很简单,大致说来就是从一堆文章里面找出哪些字经常在一起使用,然后把这些经常在一起使用的字合起来作为一个 Token。”

BPE 的核心逻辑是统计训练材料中字的共现频率,将高频组合合并。我们以一段包含“马克喜欢人工智能”的文章为训练材料,生成两个产物:词表和合并规则。首先,将所有单字放入词表(如“马”、“克”、“喜”、“欢”等),并为每个字分配一个无实际语义的编号作为 Token ID(从1开始递增)。

“Token ID 只是个编号,并没有什么特殊的语义在里面。”

此时词表记录了 Token 与 Token ID 的一一对应关系。若仅使用单字,虽然能解决编码解码问题(如“马克喜欢人工智能吗?”切分为9个单字Token),但效率极低。我们希望常见词(如“马克”、“喜欢”)作为一个 Token,从而减少输入数量,提升推理速度。

BPE 训练过程:合并规则的生成

如何让 Tokenizer “认识”这些词?算法通过扫描训练材料统计频率。模拟过程如下:

  1. 第一轮合并:“智”和“能”在一起出现频率最高(5次)。算法执行第一次合并,将“智能”视为不可分割整体。操作包括:
    • 将新词“智能加入右侧词表并分配 Token ID。
    • 记录合并规则:“智 + 能 = 智能”。
  2. 第二轮合并:扫描剩余部分,“人”和“工”出现4次,频率最高。执行合并:“人 + 工 = 人工”。更新词表并记录规则。
  3. 第三轮合并:此时“人工”和“智能”在一起出现3次,高于单独的“马克”或“喜欢”。执行合并:“人工 + 智能 = 人工智能”。

“合并之后的词还可以拿过来继续合并。”

这一过程持续进行,直到“马克”和“喜欢也被加入词表和规则中。最终训练完成的 Tokenizer 核心组件即为词表和合并规则。这解释了为何原本9个字的句子能被压缩为4个 Token,从而提升模型效率。

编码实战:应用合并规则进行切分与映射

回到模型运行流程,看训练好的 Tokenizer 如何工作。以编码环节为例:

切分阶段:将用户问题“马克喜欢人工智能吗?”先分为单字,再应用合并规则。 * 检查第一条规则“智 + 能 = 智能”:问题中二者相连,合并。 * 检查第二条规则“人 + 工 = 人工”:问题中二者相连,合并。 * 依此类推,“人工智能”、“喜欢”、“马克”依次被识别并合并。

最终,完整句子被切分为 4 个 Token:[马克, 喜欢, 人工智能, 吗]。

“在这一阶段里面,我们把一句完整的用户问题切分为 4 个 Token。”

映射阶段:这是编码的最后一步。利用词表将切分后的 Token 转换为 Token ID。 * “马克”对应 ID(如35) * “喜欢”对应 ID(如36)

这一步仅需查找词表,无需合并规则。编码过程至此结束。

解码实战与 Token 压缩率解析

解码环节更为简单,仅做映射。若模型输出 Token ID 为 36,查词表可知其对应“喜欢”,Tokenizer 即输出该文字。解码结束。

回到开头的问题:为何 40万 Token 不等于 40万字?因为 Tokenizer 不仅是翻译机,更是压缩机。它将高频共现的字合并为单个 Token。如前例所示,“马克喜欢人工智能吗”(9字)被压缩为 4 个 Token。

“Tokenizer 可以使模型的输入更少,因此模型的训练和推理效率也就更高。”

从总体统计来看:一个 Token 大概能代表 1.5 到 2 个汉字,或者 4 个英文字母(约0.75个英文单词)。据此推算,GPT-5.2 的 40万 Context Window 大致相当于:60到80万个汉字,或 30万个英文单词。掌握这一换算概念,有助于在查看大模型参数时建立直观认知。

结论

本文详细拆解了 Tokenizer 在大模型中的核心作用及其背后的 BPE 训练机制。Token并非简单的字或词,而是经过统计合并后的最小语义单元。通过“切分”和“映射”,Tokenizer 将人类语言转化为模型可处理的数字序列,并通过合并高频组合显著压缩了输入长度。理解 Token 与 Context Window 的换算关系(1 Token ≈ 1.5-2汉字),是准确评估大模型处理能力的基石。这一机制不仅揭示了 AI 理解语言的数学本质,也解释了为何高效的 Tokenization 能直接提升模型的推理速度与训练效率。