LESSON 2.7 · 代码 · 140 分钟
BPE:从字节到子词
字节级BPE先把文本表示成UTF-8字节,再反复把训练语料中最常见的相邻token对合并为新token。编码时按照学到的合并规则重放这一过程。因为最底层词表覆盖全部256种字节,即使一个字符、语言或代码片段从未在训练中出现,也仍能退回到字节序列,所以不会产生未知词。
DIRECT ANSWER · VERIFIED SOURCES ·
BPE为什么能用有限词表表示任意文本?
字节级BPE先把文本表示成UTF-8字节,再反复把训练语料中最常见的相邻token对合并为新token。编码时按照学到的合并规则重放这一过程。因为最底层词表覆盖全部256种字节,即使一个字符、语言或代码片段从未在训练中出现,也仍能退回到字节序列,所以不会产生未知词。
关键结论
- 合并次数决定词表大小;词表越大通常序列越短,但模型参数和稀有token也会增加。
- 训练BPE学习的是压缩规则,不是词义边界;一个token不一定对应一个词。
- encode与decode必须严格往返,特殊token需要独立的权限和冲突处理。
边界与常见误解
BPE结果还受Unicode规范化、预分词、正则规则和合并排序影响。比较不同tokenizer时,应同时报告词表、语料、压缩率和特殊token规则。
一手来源
学完你应该能够
- 能不用术语堆砌,解释「BPE:从字节到子词」解决了什么问题。
- 能围绕 UTF-8、pair merge、vocabulary 画出变量与因果关系。
- 能完成「从零实现 BasicTokenizer」,并用证据而不是感觉判断结果。
核心概念
UTF-8
UTF-8位于字符串与模型之间。BPE 反复合并高频相邻单元来换取更短序列,但词表、字节边界和特殊 token 会直接影响多语言、公平性与数字处理。
pair merge
pair merge位于字符串与模型之间。BPE 反复合并高频相邻单元来换取更短序列,但词表、字节边界和特殊 token 会直接影响多语言、公平性与数字处理。
vocabulary
vocabulary位于字符串与模型之间。BPE 反复合并高频相邻单元来换取更短序列,但词表、字节边界和特殊 token 会直接影响多语言、公平性与数字处理。
encode/decode
encode/decode位于字符串与模型之间。BPE 反复合并高频相邻单元来换取更短序列,但词表、字节边界和特殊 token 会直接影响多语言、公平性与数字处理。
实践任务
从零实现 BasicTokenizer
- 预测:在运行代码前,写下你预期的输出、趋势或失败位置。
- 构建:先写接口和 shape 断言,只保留回答核心问题所需的最小组件。
- 验证:使用计数基线、困惑度、encode/decode 往返与未见样本;保存参数、随机种子与原始结果。
- 迁移:更换语言、词表或上下文长度后解释性能变化,说明原结论是否仍成立。