一、BPE(Byte-Pair Encoding)
1.基本逻辑
BPE 的核心思想是:
从最小的单位(字符)开始,迭代地合并语料中最频繁出现的相邻符号对(pair),逐步形成更大的子词单元。
这种方式能在 词粒度和字符粒度之间取得平衡,有效缓解 OOV(未登录词)问题。
2.算法流程(两阶段)
训练阶段(Learning Merge Rules)
目标:学习最优的“合并规则”列表。
输入: 大型语料库
输出: 合并规则列表 + 最终词表
步骤:
-
预处理:将每个词拆为单个字符,末尾加结束符
</w>
例:hug→[h, u, g, </w>] -
统计频率:统计每个单词的出现次数。
-
统计符号对频率:找出所有相邻符号对(pair)出现的次数。
-
选择最频繁的符号对:如
(u, g)。 -
合并该符号对:生成新token(如
ug),更新语料。 -
重复3~5步,直到:
-
达到设定的合并次数;
-
或词表大小达到上限。
-
例子中,合并顺序为:
(1) u+g→ug
(2) u+n→un
(3) un+</w>→un</w>
(4) h+ug→hug
编码阶段(Tokenization)
目标:使用已学到的规则对新文本进行分词。
步骤:
-
将输入单词拆为字符 +
</w>; -
按训练时的顺序依次应用合并规则;
-
若某条规则可应用则执行合并;
-
最终输出子词序列。
例:
bug → [b, u, g, </w>]
合并规则① (u,g)→ug → [b, ug, </w>]
最终Token序列:b, ug, </w>
3.特点与优势
- 语义合理的子词划分(unhappy → [un, happy])
- 平衡词表规模与序列长度
- 显著减少 OOV 问题
- 支持泛化能力(见过 happy 就能理解 unhappiness)
4.局限
-
不同语言(尤其是多字节字符如中文)导致字符集过大;
-
对罕见字符仍可能出现
<UNK>; -
合并规则固定,不具上下文适应性。
二、BBPE(Byte-Level BPE)
1.核心逻辑
BBPE 是 BPE 的 字节级版本。
区别在于:它不是在字符上操作,而是在 UTF-8 字节流上运行。
这样能确保:
任何可编码的文本(包括 emoji、多语言文字)都能被一致地分词。
2.算法思想
-
初始token单位:256个字节(0–255);
-
在字节层面统计相邻字节对的共现频率;
-
与BPE相同,迭代合并最高频字节对;
-
每次合并后新建一个虚拟ID(如256, 257, 258...)代表新token;
-
合并直到词表达到目标大小。
3.算法步骤
训练阶段
-
将文本转为 UTF-8 字节序列;
-
统计所有相邻字节对出现频率;
-
找出频率最高的字节对;
-
合并该对,生成新token(如256);
-
更新语料并重复;
-
最终得到:基础字节 + 若干合并token。
例子:
hug → [104,117,103] pug → [112,117,103]
(117,103)出现频率最高 → 新token 256 = (117,103)
编码阶段
-
输入新词转为字节序;
-
按已学习的合并规则贪婪匹配;
-
输出token序列。
例子:
bug → [98,117,103]
→ [98,256]
结果:b, ug
4.特点与优势
- 统一字节词表(256+N),覆盖所有语言
- 完全无
<UNK> - 高度鲁棒:连emoji、符号、稀有字符都能分解
- GPT系列(GPT-2/3/4)采用该技术
5.BPE vs BBPE 对比总结
| 特性 | BPE | BBPE |
|---|---|---|
| 操作单位 | 字符或子词 | 字节 |
| 语言支持 | 需语言特化 | 通用(多语言友好) |
| 词表大小 | 小 | 稍大(256+合并数) |
| OOV风险 | 有 | 无 |
| 实现复杂度 | 简单 | 稍高(需编码转换) |
| 典型模型 | GPT-1 | GPT-2、GPT-3、GPT-4 |
三、总结理解
| 项目 | BPE | BBPE |
|---|---|---|
| 思想 | 从字符开始,迭代合并高频字符对 | 从字节开始,迭代合并高频字节对 |
| 目标 | 得到稳定子词词表 | 得到跨语言统一词表 |
| 关键操作 | 统计pair频率 → 合并最高频 → 更新语料 | 同BPE但单位为byte |
| 效果 | 平衡词表与语义 | 完全消除OOV |
| 应用模型 | GPT-1、RoBERTa | GPT-2/3/4、DeepSeek |

1095

被折叠的 条评论
为什么被折叠?



