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>

相邻词对频次 (排名)
PairCount来源构成
p u17pug(5)+pun(12)
u n16pun(12)+bun(4)
n </w>16pun(12)+bun(4)
u g15hug(10)+pug(5)
g </w>15hug(10)+pug(5)
h u10hug(10)
b u4bun(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未变)

重新计算频次表
PairCount变化说明
n </w>16-
g </w>15-
pu n12新出现!
h u10-
u g10 (📉原为15)pug贡献消失
pu g5新出现!
u n4 (📉原为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>

重新计算频次表
PairCount备注
g </w>15hug(10)+pug(5)
pu n</w>12新出现!
h u10-
u g10-
pu g5-
u n</w>4新出现!

🚀 执行动作: 合并 (g, </w>) -> 生成新 Token g</w>

最终词表快照 (Vocab Snapshot)

pun</w>g</w>…剩余基础字符…

BPE算法步骤

🛠️ BPE Playground

准备就绪