BPE 训练
BPE 训练从语料学习子词词表。本例先将词拆成字符,按词频累计相邻符号对,合并最高频对,把规则按学习顺序保存。随后分词器用这些优先级编码新文本。
像书写者将常见相邻字母合成连字,频率决定值得合并的片段。这里先看规则从哪来,再到分词用真实 GPT-2 的 50,257 项词表应用规则。本课缩小语料以便显示全表;生产实现还有字节、边界、并列和重叠处理等细节。
计数、选择、合并
语料由词与频率组成,初始每词一行字符。每轮:
- 计数:累计各词中相邻符号对,每次出现乘词频。频率 12 的词中出现一次,贡献 12 而非 1。
- 选择:选最高计数的对,并按固定规则打破并列。
- 合并:对语料所有词应用该规则,记录为新符号和有序规则。
先学的规则优先级更高,顺序是分词器的一部分。本课按合并次数停止;实际可按目标词表大小或没有可合并候选停止。
逐步演示
默认学习四次合并:
| 词 | 频率 |
|---|---|
hug | 10 |
pug | 5 |
pun | 12 |
bun | 4 |
hugs | 5 |
- 初始为
h u g、p u g、p u n、b u n、h u g s。 (u,g)来自hug×10 + pug×5 + hugs×5 = 20,最高。合并后为h ug、p ug、p u n、b u n、h ug s。- 重新计数,
(u,n)来自pun×12 + bun×4 = 16,胜过(h,ug)的 15。结果h ug、p ug、p un、b un、h ug s。 - 第三次
(h,ug)以 15 胜出,第四次(p,un)以 12 胜出。语料变成hug、p ug、pun、b un、hug s。 - 规则顺序为
ug、un、hug、pun,加七个基础字符b g h n p s u,词表共 11 项。
中间计数面板每轮排序并点亮赢家,下一节拍在所有含该对的词中合并;右侧累计规则表。合并过的 ug 随即能参与下一轮 (h,ug),规则会组合。
合并次数与并列
设为 5 次,下一轮 (hug,s) 与 (p,ug) 都是 5。面板先同时点亮,再按本实现的字母序选 (hug,s),第五条规则得到 hugs。固定、公开的并列规则让训练可复现;不同实现不必采用相同约定。
实际常先定词表预算,基础符号加新符号达到预算后停止,次数由此产生。太少会让常见词碎成小片,太多可能包含语料特有的罕见片段。实际系统可用更大语料、字节或字符等基础符号、预切分边界与保留特殊符号,不是所有 BPE 都只用原始字节。
边界情况
- 计数并列:第五轮的两个 5 必须有固定决策,不能任意依赖不稳定遍历。
- 跨多个词累计:
(u,g)的 20 来自三个词,不只看一个词。 - 全局应用:规则在所有词应用,不只改第一处;若出现重叠,如相邻三次同符号,实际还需确定非重叠替换顺序,本例未触及。
- 顺序属于模型:同样的合并集合,优先级不同可能产生不同编码,不能只存无序词表。
- 新符号继续参与:合并结果是下一轮普通候选的一部分。
常见错误
- 不乘词频。第二轮不加权时
(u,n)与(h,ug)都出现在两个词中,真正的16 > 15决策会丢失。 - 只在某个词合并,导致下一轮语料计数不一致。
- 混淆训练与编码。训练从语料产生排序规则,编码在新输入应用已有规则,不重新按当前输入频率训练。
- 期待所有完整词都成为 token。四次预算下
hugs仍为hug + s;第五次才成为一个。
模型范围
五种词、共 36 次出现,字符基础符号、字母序破并列、小预算。核心为计数、选择、合并、记录。生产规模还需考虑基础符号、词边界、重叠替换、特殊 token 和高效计数结构,不能把课堂表当完整的字节级 GPT-2 训练复现。