BPE演示
NLP
BPE
分词
Published on
什么是BPE?
Byte Pair Encoding,字节对编码
基础单位不是 Unicode 字符(如中文“你”),而是 UTF-8 编码后的 字节 (Byte)。通常 BPE 贪心地合并全局最高频
- 准备语料: 拿一段大量的文本。
- 拆分字符: 把所有单词拆成最小的字母,并在单词末尾加个结束符
</w>(用于区分单词边界)。 - 统计频率: 统计所有相邻字符对(Pair)出现的次数。
- 合并 (Merge): 找到出现次数最多的那一对,把它变成一个新的 Token。
- 循环: 重复步骤 3 和 4,直到达到预设的词表大小(例如 GPT-4 的词表大概是 10 万个 Token)。
流程示意图
BPE 算法演示
📊 初始语料: hug(10), pug(5), pun(12), bun(4)
Step 0: 初始化阶段 (Initialization)
当前词表: 7个基础字符语料库物理状态
10: h u g </w>
05: p u g </w>
12: p u n </w>
04: b u n </w>
相邻词对频次 (排名)
| Pair | Count | 来源构成 |
|---|---|---|
| p u | 17 | pug(5)+pun(12) |
| u n | 16 | pun(12)+bun(4) |
| n </w> | 16 | pun(12)+bun(4) |
| u g | 15 | hug(10)+pug(5) |
| g </w> | 15 | hug(10)+pug(5) |
| h u | 10 | hug(10) |
| b u | 4 | bun(4) |
🚀 执行动作: 合并 (p, u) -> 生成新 Token pu
Step 1: 第一次合并后
新增 Token: [pu]语料库更新情况
10: h u g </w> (u未变)
05: pu g </w>
12: pu n </w>
04: b u n </w> (u未变)
重新计算频次表
| Pair | Count | 变化说明 |
|---|---|---|
| n </w> | 16 | - |
| g </w> | 15 | - |
| pu n | 12 | 新出现! |
| h u | 10 | - |
| u g | 10 (📉原为15) | pug贡献消失 |
| pu g | 5 | 新出现! |
| u n | 4 (📉原为16) | pun贡献消失 |
🚀 执行动作: 合并 (n, </w>) -> 生成新 Token n</w>
Step 2: 第二次合并后
新增 Token: [n</w>]语料库更新情况
10: h u g </w>
05: pu g </w>
12: pu n</w>
04: b u n</w>
重新计算频次表
| Pair | Count | 备注 |
|---|---|---|
| g </w> | 15 | hug(10)+pug(5) |
| pu n</w> | 12 | 新出现! |
| h u | 10 | - |
| u g | 10 | - |
| pu g | 5 | - |
| u n</w> | 4 | 新出现! |
🚀 执行动作: 合并 (g, </w>) -> 生成新 Token g</w>
最终词表快照 (Vocab Snapshot)
pun</w>g</w>…剩余基础字符…
BPE算法步骤
🛠️ BPE Playground
准备就绪