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规则。

一手来源

学完你应该能够

  1. 能不用术语堆砌,解释「BPE:从字节到子词」解决了什么问题。
  2. 能围绕 UTF-8、pair merge、vocabulary 画出变量与因果关系。
  3. 能完成「从零实现 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 往返与未见样本;保存参数、随机种子与原始结果。
  • 迁移:更换语言、词表或上下文长度后解释性能变化,说明原结论是否仍成立。

进入完整互动课程