一句话定义
词元化(Tokenization)把原始文本切成模型词表内的最小处理单元「词元(Token)」,主流算法字节对编码(Byte-Pair Encoding,BPE)通过迭代合并高频字节对,在词表大小与序列长度间取得平衡。
为什么重要
模型不认识「字」或「词」,只认识词元 id。词表设计直接影响序列长度(成本)、拼写与数字能力、多语言公平性乃至代码能力。理解词元化,你才能解释「为什么模型数不清 strawberry 里有几个 r」「为什么中文按 token 计费更贵」这类真实问题。
前置知识
- kp-001(LLM 是什么)
核心概念
- 词表(Vocabulary):模型能输出的全部词元集合,常见规模 3 万至 25 万(量级随模型而异)。
- BPE:从字节级词表出发,反复把语料中最高频的相邻字节对合并成新词元,直至达到目标词表大小。
- 字节级 BPE(Byte-level BPE):以字节而非 Unicode 字符为基元,保证任何文本都能编码,是 GPT 系至今的主流方案。
- WordPiece / Unigram:BERT 与 T5 使用的替代算法,合并或剪枝准则不同但目的一致。
- 特殊词元:如对话起始、结束、系统提示等控制符,是后训练模板的载体(见 kp-017)。
原理与机制
BPE 训练:统计语料中相邻符号对频次,合并最高频对,重复到词表达标。推理:用学得的合并规则贪心切分新文本。高频词保持完整(如「的」),低频词被拆成多个子词甚至单字节。词元序列作为 id 序列送入嵌入层(见 kp-004)。生成端模型输出词元 id,再由分词器解码回文本。
公式或模型
BPE 合并次数与词表关系:初始字节词表 |V0| ≈ 256,执行 M 次合并后:
|V| = |V0| + M
压缩率可用「平均每词元字符数(bytes per token)」衡量,中文通常低于英文,是同等内容中文 token 成本更高的原因之一。
图示
语料: "low low lower newest newest newest widest"
初始: l o w ▁ ... → 频次统计
合并1: l+o → lo → 合并2: lo+w → low
编码 "lowest": low + e + s + t (未整词合并则继续拆)
直观类比
像「成语压缩」:人们把高频的固定表达固化成成语(高频字节对合并成新词元),低频组合仍逐字表达(拆成单字节)。压缩表就是词表,说话时按查表结果念出。
实例或案例
把 "Internationalization" 输入某 GPT 系分词器,常被拆成多个子词如 "Intern/ational/ization"——词表内没有整词则按合并规则拆分;这也是模型在长英文单词拼写任务上容易出错的结构性原因之一。数字方面,若干模型把整数按 2-3 位切开,直接导致「9.11 与 9.9 谁大」式的比较失误。
常见误区
- 「token 等于词或字」:它是子词单元,英文一词多 token 很常见,中文通常一字一 token 到一词多 token。
- 「词表越大越好」:词表越大嵌入层参数越多、低频词元反而训练不充分,需要权衡。
- 「分词器与模型无关」:分词器与模型权重是一体交付的,换分词器等于换了输入空间。
与其他知识点的关系
自测题
- 描述 BPE 的训练循环(两步操作)。答案要点:统计相邻符号对频次;合并当前最高频对;重复至词表达标。
- 为什么字节级 BPE 能处理任意输入?答案要点:任何文本的字节表示都可枚举,基元覆盖全部 256 个字节值,不存在「编不进词表」的字符。
- 举一个由词元化直接导致的模型缺陷。答案要点:拼写计数、大数比较、非主流语言效率低等,任一举例并说明词元拆分如何导致。
延伸阅读
- Neural Machine Translation of Rare Words with Subword Units(Sennrich 等,2016):BPE 用于神经机器翻译的经典论文
- 《Speech and Language Processing》(Jurafsky & Martin):子词分词章节