132、Token 与 Tokenization:BPE、SentencePiece 的原理与你为什么要关心 132、Token 与 Tokenization:BPE、SentencePiece 的原理与你为什么要关心上周帮同事排查一个生产环境的问题,模型输出突然出现一堆奇怪的字符,比如“Ġthe”和“Ġa”这种带点前缀的单词。同事一脸懵,说训练数据里明明没有这种符号。我一看就知道,这是 SentencePiece 的 BPE 分词结果被直接暴露出来了——模型在生成时,解码器没有正确调用 detokenizer,导致原始 token 序列被当作文本输出了。这种坑,踩过一次就再也不会忘。今天这篇笔记,就从这个问题出发,聊聊 Token 和 Tokenization 的核心原理,重点讲 BPE 和 SentencePiece 这两个最常用的算法。不是为了背概念,而是为了让你在遇到类似诡异现象时,能一眼看穿问题本质。为什么 Tokenization 值得你花时间很多初学者觉得分词是“预处理”里最无聊的一步,直接调个tokenizer.encode()就完事了。但实际开发中,80% 的模型异常都跟分词有关:模型输出乱码?检查 tokenizer 和 detokenizer 是否匹配。训练 loss 不收敛?看看 OOV(未登录词)比例是不是太高。推理速度慢?可能是 token 序列太长,或者特殊 token 没处理好。更关键的是,大模型的上下文窗口是按 t