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