开源推荐
morning
GitHub 热门项目:minbpe
2026-05-27
1 阅读
GitHub Trending
GitHub 项目:minbpe
仓库地址:https://github.com/karpathy/minbpe
星级:10503 | 作者:卡帕蒂
项目描述:LLM 标记化中常用的字节对编码 (BPE) 算法的最小、干净的代码。
===================================================
自述文件内容:
# 最小bpe
LLM 标记化中常用的(字节级)字节对编码 (BPE) 算法的最小、干净的代码。 BPE 算法是“字节级”的,因为它在 UTF-8 编码的字符串上运行。
该算法通过 OpenAI 的 [GPT-2 论文](https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) 和相关的 GPT-2 [代码发布](https://github.com/openai/gpt-2) 在法学硕士中得到推广。 [森里奇等人。 2015](https://arxiv.org/abs/1508.07909) 被引用为在 NLP 应用中使用 BPE 的原始参考。如今,所有现代法学硕士(例如 GPT、Llama、Mistral)都使用此算法来训练其标记器。
该存储库中有两个 Tokenizer,它们都可以执行 Tokenizer 的 3 个主要功能:1)训练 tokenizer 词汇并合并给定文本,2)从文本编码到令牌,3)从令牌解码到文本。存储库的文件如下:
1. [minbpe/base.py](minbpe/base.py): 实现`Tokenizer`类,它是基类。它包含“train”、“encode”和“decode”存根、保存/加载功能,还有一些常见的实用函数。这个类不应该直接使用,而是要继承。
2. [minbpe/basic.py](minbpe/basic.py):实现“BasicTokenizer”,这是直接在文本上运行的 BPE 算法的最简单实现。
3. [minbpe/regex.py](minbpe/regex.py):实现“RegexTokenizer”,通过正则表达式模式进一步拆分输入文本,这是在标记化之前按类别(例如:字母、数字、标点符号)拆分输入文本的预处理阶段。这确保不会发生跨类别边界的合并。这是在 GPT-2 论文中引入的,并从 GPT-4 开始继续使用。此类还处理特殊标记(如果有)。
4. [minbpe/gpt4.py](minbpe/gpt4.py):实现`GPT4Tokenizer`。该类是“RegexTokenizer”(上面的 2)的一个轻量级包装器,它精确地再现了 [tiktoken](https://github.com/openai/tiktoken) 库中 GPT-4 的标记化。包装处理有关恢复标记生成器中的精确合并的一些细节,以及处理一些不幸的(并且可能是历史的?)1 字节标记排列。
最后,脚本 [train.py](train.py) 在输入文本 [tests/taylorswift.txt](tests/taylorswift.txt)(这是她的 kek 的维基百科条目)上训练两个主要分词器,并将词汇保存到磁盘以进行可视化。该脚本在我的 (M1) MacBook 上运行大约需要 25 秒。
上面的所有文件都非常短且注释详尽,并且在文件底部还包含使用示例。
## 快速开始
作为最简单的例子,我们可以重现[关于 BPE 的维基百科文章](https://en.wikipedia.org/wiki/Byte_pair_encoding),如下所示:
````蟒蛇
从 minbpe 导入 BasicTokenizer
分词器 = BasicTokenizer()
文本=“aaabdaaabac”
tokenizer.train(text, 256 + 3) # 256 是 t