每天5分钟搞懂大模型的分词器tokenizer(二):BPE (Byte-Pair Encoding)

BPE (Byte-Pair Encoding)

字节对编码 (BPE) 最初是作为一种压缩文本的算法开发的,最早是由Philip Gage于1994年在《A New Algorithm for Data Compression》一文中提出,后来被 OpenAI 在预训练 GPT 模型时用于分词器(Tokenizer)。它被许多 Transformer 模型使用,包括 GPT、GPT-2、RoBERTa、BART 和 DeBERTa。

本文尝试用最直观的语言和示例来解释 BPE 算法。

本文的分词是在英文(拉丁语系)状态下进行的,中文状态下的分词会在后续的文章中讨论。

1. 直觉式理解

假设我们有一份语料,其中包含以下单词:

plaintext 复制代码
faster</ w>: 8, higher</ w>:6, stronger</ w>:7

其中,数字表示单词出现的次数。

注: </ w> 表示单词的结束,使用 "w" 是因为它是 "word" 的首字母,这是一种常见的命名约定。然而,具体的标记token可能会根据不同的实现或者不同的分词方法有所不同。

首先,我们将其中的每个字符作为一个 token,得到的 token 如下:

plaintext 复制代码
f a s t e r</ w>: 8, h i g h e r</ w>: 6, s t r o n g e r</ w>: 7

对应的字典如下:

plaintext 复制代码
'a', 'e', 'f', 'g', 'h', 'i', 'n', 'o', 'r', 's', 't', 'r</ w>'

第二步,我们统计每两个token相邻出现的次数,得到如下结果:

plaintext 复制代码
'fa':8,'as':8,'st':15,'te':8,'er</ w>':21,'hi':6,'ig':6,'gh':6,'he':6,'tr':7,'ro':7,'on':7,'ng':7,'ge':7

8+8+15+8+21+6+6+6+6+7+7+7+7+7=115

我们将出现次数最多的字符'e'和'r</ w>'对合并'er</ w>'【这就是byte pair 字节对的名称由来】,token变为:

plaintext 复制代码
f a s t er</ w>: 8, h i g h er</ w>: 6, s t r o n g er</ w>: 7

对应的字典变化为:

plaintext 复制代码
'a', 'f', 'g', 'h', 'i', 'n', 'o', 's','r', 't', 'er</ w>'

注意: 此时的'e'和'r</ w>'被'er'消融了,因为在token中除了'er'中有'e'和'r</ w>'其他地方都没有。

第三步,现在'er</ w>'已经是一个token了,我们继续统计相邻token出现的次数,得到如下结果:

plaintext 复制代码
'fa':8,'as':8,'st':15,'ter</ w>':8,'hi':6,'ig':6,'gh':6,'her</ w>':6,'tr':7,'ro':7,'on':7,'ng':7,'ger</ w>':7

我们将出现次数最多的字符't'和'er</ w>'对合并'ter</ w>',token变为:

plaintext 复制代码
f a s ter</ w>: 8, h i g h er</ w>: 6, s t r o n g er</ w>: 7

对应的字典变化为:

plaintext 复制代码
'a', 'f', 'g', 'h', 'i', 'n', 'o', 's','r', 't', 'er</ w>', 'ter</ w>'

注意: 此时的'er</ w>'和't'都没有被'ter</ w>'消融了,因为在token中除了'ter</ w>'中有'er</ w>',其他地方也有'er</ w>'和't'

重复上述步骤,直到达到预设的token数量或者达到预设的迭代次数;

这两个就是BPE算法的超参数,可以根据实际情况调整。

搞清楚了BPE,后续我们再来看wordpiece和sentencepiece。

参考

[1] A New Algorithm for Data Compression

[2] wiki:BPE

[3] Byte-Pair Encoding tokenization

欢迎关注我的GitHub和微信公众号,来不及解释了,快上船!

GitHub: LLMForEverybody

仓库上有原始的Markdown文件,完全开源,欢迎大家Star和Fork!

相关推荐
15年网络推广青哥3 分钟前
国际抖音TikTok矩阵运营的关键要素有哪些?
大数据·人工智能·矩阵
AI莫大猫3 分钟前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
taoyong0015 分钟前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
Uu_05kkq15 分钟前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
weixin_3875456421 分钟前
探索 AnythingLLM:借助开源 AI 打造私有化智能知识库
人工智能
TodoCoder1 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
engchina1 小时前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
清梦20202 小时前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
paixiaoxin2 小时前
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
人工智能·深度学习·机器学习·生成对抗网络·计算机视觉·ocr·.net
Wyang_XXX2 小时前
CSS 选择器和优先级权重计算这么简单,你还没掌握?一篇文章让你轻松通关面试!(下)
面试