我们天天在说 token,token 到底是啥呢?
大语言模型不认识文字,只认识数字。你发给它的每一句话,第一步都要被切成一串数字编号——这些编号就叫 token。
为什么不是一个字一个 token?
最符合直觉的做法:一个字分配一个编号。但有两个问题:
太长了。 一篇 5000 字的文章就有 5000 个 token。模型每生成一个字都要回看前面所有 token,序列越长计算量越大(平方增长)。而且"因为""但是"这种固定搭配,每次都拆成两个字,模型要反复学它们,浪费算力
反过来,一个词一个编号呢?收不完,完全收录不完。 中文几十万词、英语几十万词,还有代码、化学式、人名、错别字……遇到没见过的词就彻底处理不了。
所以需要一个折中方案:最常见的组合合成一个 token
BPE:所有大模型都在用的分词方法
BPE = Byte Pair Encoding,字节对编码。
GPT、Claude、Qwen、Llama、DeepSeek……几乎所有主流大模型的分词都用的这套算法。
核心思想:从最小单位(byte)开始,统计训练语料里哪些相邻对出现得最频繁,把它合并成一个新 token。重复做十几万轮,就得到一张合并规则表。
之后所有输入文字都用这张规则表来切分——从字节出发,逐步合并,直到没有可合并的为止。
用"你好吗"举个例子
"你好吗"三个字,在计算机底层各占 3 个字节,一共 9 个字节。BPE 从这 9 个最小单位开始,逐步合并:
起始:9 个字节 token
第 1-6 轮:把字节逐步拼回汉字
→ [你] [好] [吗] (3 个 token)
第 7 轮:规则表里有 "你"+"好" 的合并规则
→ [你好] [吗] (2 个 token)
停止:"你好"+"吗" 没有合并规则了最终结果:"你好吗" = 2 个 token("你好"一个,"吗"一个)。
几个值得注意的点:
- • "你好吗"三个字没有被合成一个 token——说明在训练数据里它出现的频率不够高,没挤进规则表
- • "你好"够频繁,有自己的独立编号
- • BPE 的规则是能合并就必须合并——只要规则表里有这条规则,遇到就一定焊起来,没有"选择不合并"这回事
根据这个原理
如果两个模型分词所用的训练数据是一样的,那它们的 tokenization 规则就是一样的——因为 BPE 就是"数数 + 合并",纯确定性计算,没有随机性。
区别只在于做了多少轮合并(= 词表多大):
- • 轮数少 → 词表小 → 同一句话被切得更碎(token 多)
- • 轮数多 → 词表大 → 常见组合被合成一个 token(token 少)
比如 GPT-2 的词表是 5 万,Qwen3 是 15 万——同一句中文,Qwen3 切出来的 token 数量会更少,因为它的规则表更大、合并得更彻底。
Y1D17 · 2026-06-07
10 年后再见
夜雨聆风