在大语言模型中Token是模型理解和生成文本的基本运算单元。本文档旨在阐明Token的本质并与计算机底层存储单位字节、编译原理中的词法单元进行对比最后深入解析当前主流的分词器实现原理。1. Token与字节的核心区别字节和Token位于信息处理的不同抽象层级其根本区别在于物理真实性与逻辑设计性。1.1 所属层级· 字节硬件/系统层——计算机底层的真实存储单位是信息存取的物理基础。· Token表示/算法层——为平衡模型效率与语义表达能力而设计的人工单元是模型认知的“基本符号”。1.2 大小是否固定· 字节固定为8个比特bit取值范围始终为0-255永不改变。· Token可变。一个Token可以对应一个完整单词如“hello”、一个子词如“ing”、一个单个字符甚至回退到一个字节。1.3 语义性· 字节无语义。单个字节如0x48本身没有任何意义必须结合编码表如ASCII或UTF-8才能解释为具体字符。· Token有统计语义。模型直接将每个Token ID映射为一个稠密向量在该向量空间中语义相近的Token彼此靠近如“猫”和“猫咪”。1.4 处理效率· 字节效率低。一段中文文本用字节表示会很长如“你好”占6个字节而Transformer模型的计算复杂度与序列长度的平方成正比直接处理字节序列会非常缓慢且消耗巨大内存。· Token效率高。通过将常见语言片段打包成一个Token序列长度大幅缩短如“你好”可能仅占1-2个Token这是大模型能够高效处理长文本的关键设计。1.5 未知输入处理· 字节不涉及此概念。字节是所有数字信息的最终表达形式不存在“未知字节”。· Token通过字节级回退机制保证永无未登录词。当遇到词汇表中不存在的生僻字或emoji时分词器会将其自动拆解为若干个字节Token每个字节0-255都在词汇表中因此理论上可以处理任意Unicode字符串。1.6 本质定位· 字节计算机的“硬件语言”——底层、固定、通用但直接使用对模型而言过于琐碎。· Token模型的“思维语言”——高层、可变、专门优化让模型能够以更接近人类语言单元的方式认知世界。核心结论字节是物理真实的最小单位Token是逻辑设计的最优组块。大模型不直接处理字节是为了避免序列过长带来的平方级计算开销以及单个字节缺乏语义关联的学习困难。字节是计算机的“硬件语言”Token是模型的“思维语言”。模型不直接处理字节以规避序列过长和语义缺失问题。2. Token与编译原理词法单元的区别尽管二者都称为“Token”但设计哲学与目标迥异。2.1 核心目标· 编译原理词法分析器识别出符合语言文法的语法正确的最小单元如关键字if、标识符、数字常量、运算符等供后续语法分析构建抽象语法树AST使用。· 大模型分词器进行统计压缩与语义保留将文本切分成模型易于学习的、统计上频繁出现的子词单元以压缩序列长度并提升学习效率。2.2 规则来源· 编译原理词法分析器人工定义的文法规则。通过正则表达式或手写状态机硬编码例如C语言中标识符的模式、数字常量的格式均由开发者明确规定。· 大模型分词器数据驱动自动学习。通过BPE/WordPiece等算法从大规模语料几十GB到几TB的文本中统计相邻符号对的出现频率自动生成合并规则和词汇表。2.3 词汇表大小· 编译原理词法分析器较小通常为几十至几百个。因为编程语言的关键字if、while、return等、运算符、-、*、/等、分隔符数量有限。· 大模型分词器很大通常为3万至15万个。包含常见完整单词、高频子词如“ing”、“er”、单个字母、标点符号以及基础字节。2.4 空白处理· 编译原理词法分析器通常忽略空白字符空格、制表符、换行除非出现在字符串字面量或注释中。因此解码时无法恢复原始的空白格式。· 大模型分词器保留空白。将空格作为特殊字符如GPT中的Ġ前缀或Llama中的下划线前缀纳入分词因为自然语言中空格是重要的词边界信号解码时需要精确还原。2.5 未知输入处理· 编译原理词法分析器报错并停止。遇到词法规则中未定义的字符如Python代码中出现$符号词法分析器会抛出异常无法继续处理。· 大模型分词器永不失败。任何未知字符生僻汉字、新emoji、非标准符号都会被自动拆解为词汇表中始终存在的字节Token0-255保证100%可编码。2.6 可逆性· 编译原理词法分析器不可逆。词法分析过程中丢弃了空白、注释、部分格式信息无法从输出的Token流精确还原原始源代码文本。· 大模型分词器完全可逆。解码器可以从Token ID序列精确恢复出原始字符串包括所有空格、标点和特殊字符。这是大模型能够生成连贯、格式正确的文本的基础。2.7 状态性· 编译原理词法分析器可以是有状态的。例如处理/* ... */多行注释时需要记住当前正处于注释内部直到遇到结束符*/处理字符串时也需要跟踪是否在引号内。· 大模型分词器无状态。每个文本片段独立进行分词不依赖之前处理过的上下文信息除了预分词阶段确定的局部边界但不跨片段记忆。2.8 输出用途· 编译原理词法分析器输出的Token序列被送入语法分析器Parser用于构建抽象语法树AST进而进行语义分析、代码生成等后续编译阶段。· 大模型分词器输出的Token ID序列被送入嵌入层Embedding Layer转换为稠密向量后再由Transformer的多层自注意力网络进行处理。2.9 本质定位· 编译原理词法分析器编译器的“守门员”——追求精确的语法边界识别强调正确性、歧义消除和与语法的配合。· 大模型分词器大模型的“压缩器词典”——追求统计上的高效表示强调序列压缩、完全可逆和全覆盖编码能力。核心结论词法分析器服务于语法正确性分词器服务于统计效率。两者形式相似——都将字符序列转换为符号序列——但设计哲学、约束条件和应用目标截然不同。词法分析器是编译器的“守门员”追求精确与正确分词器是大模型的“压缩器”追求统计效率与完全可逆。3. 分词器原理以BPE为例现代大模型GPT、Llama等主要采用基于字节的BPEByte Pair Encoding分词器其处理流程分为四个阶段。3.1 标准化将原始文本转换为标准形式如统一大小写、分解Unicode兼容字符fi → fi。目的是减少模型需要处理的变体数量。3.2 预分词按简单规则如空格和标点粗粒度切分文本划定单词边界。BPE的合并规则仅在单词内部进行避免跨边界错误合并。3.3 BPE合并学习训练阶段这是构建词汇表的核心算法1. 从256个基础字节符号开始。2. 统计语料中相邻符号对出现的频率。3. 将最高频符号对合并为新符号加入词汇表。4. 重复步骤2-3直至词汇表达到预设大小如32k或100k。5. 最终得到一组有序的合并规则。3.4 编码与解码推理阶段· 编码对输入文本先执行标准化和预分词然后对每个片段反复应用合并规则按训练顺序最终将子词映射为词汇表中的整数ID。· 解码将整数ID序列映射回子词字符串并拼接同时恢复空白信息精确还原原始文本。3.5 关键特性字节级回退由于词汇表始终包含全部256个基础字节Token任何生僻字符或emoji都会被拆解为字节序列。这保证了分词器永远不会遇到未登录词OOV问题理论上可处理任意Unicode字符串。4. Token词汇表的固定性对于已训练部署的大模型其分词器的词汇表大小是绝对固定的。原因如下· 嵌入层权重矩阵形状为 [vocab_size, hidden_dim]无法动态扩展。· 合并规则表在训练完成后固化。Token的“进化”仅发生在训练阶段通过BPE从语料中学习或人为微调扩展极少使用。在日常推理中模型只会使用已有的固定Token集合处理任何输入。5. 总结Token vs. 字节 :Token是字节的语义化压缩单元解决了序列过长和语义缺失问题。Token vs. 编译单元:目标不同前者追求统计效率后者追求语法正确。分词器原理 :基于BPE的四阶段处理标准化 → 预分词 → 子词合并 → 编码/解码Token的设计充分体现了大模型工程中的核心权衡在保持字符级可还原性的同时通过数据驱动的子词合并达到序列长度与语义表达的平衡。