① 分词器不是 AI 发明的
它原本是个压缩文件的小技巧,1994 年发在一本程序员杂志上,图的是解压快、占内存小。隔了 20 年被做翻译的人借走,才成了大模型的入口。现在你教材附录让你手写的那个「合并顺序表」,就是当年那张压缩表。
不是一堆散名词,是一条主线。全程只用同一句话举例。
它们压根不是同一类东西。认清这个,后面就不会记混了。
| 名字 | 它是什么类型 | 一句话 |
|---|---|---|
| BPE | 算法 · 做法 | 数谁最常挨着,就把这俩粘成一块 |
| Byte-Level BPE / BBPE | 算法的变种 | 还是 BPE,只是起点从「字符」降到「字节」 |
| WordPiece | 算法 · 做法 | 也粘,但挑「粘了最划算」的那一对 |
| Unigram | 算法 · 做法 | 反过来:先摆一大堆候选,再删掉没用的 |
| SentencePiece | 工具库 · 不是算法 | 一个软件包,里面能跑上面两种做法 |
| tiktoken | 具体实现 | OpenAI 家那个包,GPT 系列在用 |
| UL2 | 模型名 | 教材表格里出现的一个 Google 模型,跟分词算法无关 |
| UniLM | 模型名 | 微软一个模型,跟分词器无关。你大概把它和 UL2、Unigram 揉一起了 |
| DeepSeek Tokenizer | 产品实现 | 字节级 BPE 的一个具体做法,不是新算法 |
每一站都是「上一代出了什么事 → 有人怎么改 → 留下了什么」。
英文更惨:一个词的各种变体各占一个编号,词表动辄几十万。中文还要先决定「哪儿算一个词」,本身就说不清。
另一个问题:单看「温」这个字,基本没意义,模型得自己把几个字拼出意思来,学起来更费劲。
做法特别朴素:从单个字起步,数一数哪两个相邻的字最常挨在一起,把它俩粘成一块,写进表里;然后重新数,再粘下一对,重复几千次。
WordPiece(Google,2012,最早是给日语/韩语语音搜索做的):还是从小往大粘,但不挑「最常挨着」的,挑「粘了以后最划算」的那一对。后来 BERT 用了它,你看到的 ## 前缀就是它的记号。
Unigram(Taku Kudo,2018):整个反过来。先摆一大堆候选块,给每块一个「有用程度」,然后一次次把最没用的丢掉,丢到词表大小合适为止。
SentencePiece(Kudo 和 Richardson,2018,EMNLP)不是新算法,是一个工具库:直接吃原始文本,把空格也当成一个普通字符(常见记法是 ▁),内部可以选 BPE 或 Unigram 来跑。教材说「用它可以不额外预分词」,就是这个意思。
2019 年 GPT-2 又往前一步:起点干脆用字节。任何文字在电脑里都是字节,所以再也没有「这个字我没见过」——emoji、任何语言、代码,统统能编码,再靠 BPE 把常用字节组合粘回来。
Meta 在 2024 年 12 月提出 BLT(一个直接读字节、不要固定词表的模型架构),8B 规模上做到跟同类模型相当,抗拼写错误和噪声更好。2025–2026 有一批后续研究在解决「一个字节一个字节吐字太慢」的问题(例如 2026 年 5 月被 ICML 接收的 Fast BLT),还有改进 BPE 本身的 SuperBPE、BoundlessBPE 等。
这几件事比年份更值得记住。
它原本是个压缩文件的小技巧,1994 年发在一本程序员杂志上,图的是解压快、占内存小。隔了 20 年被做翻译的人借走,才成了大模型的入口。现在你教材附录让你手写的那个「合并顺序表」,就是当年那张压缩表。
不是模型笨,是它压根看不到字母——它看到的是切好的整块。让它数一个词里有几个 r,等于让一个只看得见包装箱的人猜箱里有几颗糖。同理,拼写、倒着念、精确改字符这类活儿天生吃亏。
同一段意思,英文常被切成较少的块,中文、印地语等往往被切得更碎。API 按块计费、上下文按块算长度,于是同样内容,非英语要多付钱、还更占窗口。这不是模型偏心,是词表训练语料里英文占多数。对你做企业 AI 交付,这条直接关系到成本和方案选型。
2023 年有人发现,某些极罕见的词块(网上流传最广的是 SolidGoldMagikarp)会让模型突然胡言乱语。原因是训练时几乎没见过它,对应的编号几乎没被学好。词表不是中性的字典,它是有脾气的历史遗留物。
我把你给的 GitHub 那一节抓下来核对过了:它没讲历史,讲的是训练四步、四种分词器对比、动手实现、以及 DeepSeek 分词器分析。
所以你记不住不是记性问题,是教材把四类不同的名字放进了同一张「算法对比表」:SentencePiece 根本不是算法,UL2 是模型名,tiktoken 是实现名,只有 BPE / WordPiece / Unigram 是做法。先按上面第 0 节分好类,再看那张表就不乱了。
你教材末尾的参考资料,其实就是这条时间线的路标:
arXiv 1508.07909 — 2015,把压缩算法借进翻译,BPE 的跨界时刻arXiv 1804.10959 — 2018,SentencePiece 那个工具库arXiv 1808.06226 — 2018,Kudo 的 Unigram 与「一句话可以有多种切法」读这一章时带着三个问题就够:① 表里哪个根本不是算法?② 附录让你手写的 merges,是不是就是那张「先粘哪对、后粘哪对」的顺序表?③ DeepSeek 为什么要绕一道 latin1 才能把字节当字符处理?