Tokenizer 与 BPE
很多人第一次学大模型时会问:为什么模型不直接按“词”来读文本?原因是自然语言里有新词、变形词、复合词和超长尾表达。Tokenizer 的工作,就是把文本拆成更稳定、更可复用的 token;而 BPE 是最经典的子词学习方法之一。
先从字符开始
找最常见相邻对子
反复合并成子词
看 BPE 如何一步步长出子词
下面不是工业级 tokenizer 训练器,而是教学版 BPE 演示。你可以切换语料、逐步播放合并过程,看看“高频字符对”是怎样慢慢变成更长子词的。
每一步都会统计当前词表里最常见的相邻对子。BPE 默认优先合并出现频率最高的那一对。
同一个词,在不同 merge 阶段会被切得不一样
输入一个词或短句,看看当 tokenizer 只学到前几轮合并时,它会怎样切分;再继续播放,你会看到 token 逐渐从“纯字符”变成“更稳定的子词”。
教学提醒: 真正的 tokenizer 还会处理空格、标点、字节级编码、特殊 token 等细节。这里故意把原理压缩到最核心的“统计高频对子并合并”,这样更容易先建立直觉。
为什么大模型喜欢子词,而不是固定词典
更抗新词
就算完整单词没见过,只要它能拆成见过的子词,模型仍然可以处理,而不是直接变成完全陌生的 OOV。
词表更省
如果把所有词都收进词表,词表会极度膨胀。子词让词表大小和表达能力之间取得更好的平衡。
可复用结构更多
像 play / player / playing 这类共享片段,可以让模型更容易复用统计规律。
为后续向量层做准备
Tokenizer 最终产出的是 token 序列。后面的 embedding 层和 attention 层,都是建立在这些 token 之上。
一句话总结: Tokenizer 不是简单切词器,而是大模型和文本世界之间的第一道接口。BPE 的关键思想,就是用少量可复用的子词覆盖尽量多的真实表达。