离开OpenAI待业的Karpathy做了个大模型新项目,Star量一日破千

人工智能 新闻
过去几天,OpenAI 非常热闹,先有 AI 大牛 Andrej Karpathy 官宣离职,后有视频生成模型 Sora 撼动 AI 圈。

闲不下来的 Andrej Karpathy 又有了新项目!

过去几天,OpenAI 非常热闹,先有 AI 大牛 Andrej Karpathy 官宣离职,后有视频生成模型 Sora 撼动 AI 圈。

在宣布离开 OpenAI 之后,Karpathy 发推表示「这周可以歇一歇了。」

图片

图源:https://twitter.com/karpathy/status/1757986972512239665

这种无事要做的状态让马斯克都羡慕(I am envious)了。

图片

但是,如果你真的认为 Karpathy 会闲下来,那就有点「too young, too navie」了。

这不,有眼尖的网友发现了 Karpathy 的新项目 ——minbpe,致力于为 LLM 分词中常用的 BPE(Byte Pair Encoding, 字节对编码)算法创建最少、干净以及教育性的代码

仅仅一天的时间,该项目的 GitHub 标星已经达到了 1.2 k。

图源:https://twitter.com/ZainHasan6/status/1758727767204495367

有人 P 了一张图,表示 Karpathy 为大家「烹制了一顿大餐」。

图片

图源:https://twitter.com/andrewcyu/status/1758897928385561069

更有人欢呼,Karpathy is back。

图源:https://twitter.com/fouriergalois/status/1758775281391677477

我们来看一看「minbpe」项目具体讲了些什么。

项目介绍

图片

GitHub 地址:https://github.com/karpathy/minbpe

我们知道,BPE 算法是「字节级」的,在 UTF-8 编码的字符串上运行。该算法通过 GPT-2 论文和 GPT-2 相关的代码在大语言模型(LLM)中得到推广。

现如今,所有现代的 LLM(比如 GPT、Llama、Mistral)都使用 BPE 算法来训练它们的分词器(tokenizer)。

Karpathy 的 minbpe 项目存储库中提供了两个 Tokenizer,它们都可以执行分词器的 3 个主要功能:1)训练 tokenizer 词汇并合并给指定文本,2)从文本编码到 token,3)从 token 解码到文本。

详细的存储库文件分别如下:

  • minbpe/base.py:实现 Tokenizer 类,是基类。它包含了训练、编码和解码存根、保存 / 加载功能,还有一些常见的实用功能。不过,该类不应直接使用,而是要继承。
  • minbpe/basic.py:实现 BasicTokenizer,这是直接在文本上运行的 BPE 算法的最简单实现。
  • minbpe/regex.py:实现 RegexTokenizer,它通过正则表达式模式进一步拆分输入文本。作为一个预处理阶段,它在分词之前按类别(例如字母、数字、标点符号)拆分输入文本。这确保不会发生跨类别边界的合并。它是在 GPT-2 论文中引入的,并继续在 GPT-4 中使用。
  • minbpe/gpt4.py:实现 GPT4Tokenizer。此类是 RegexTokenizer 的轻量级封装,它精确地复现了 tiktoken(OpenAI 开源分词神器)库中 GPT-4 的分词。封装处理有关恢复 tokenizer 中精确合并的一些细节,并处理一些 1 字节的 token 排列。需要注意,奇偶校验尚未完全完成,没有处理特殊的 token。

脚本 train.py 在输入文本 tests/taylorswift.txt 上训练两个主要的 tokenizer,并将词汇保存到磁盘以进行可视化。Karpathy 称,该脚本在他的 MacBook (M1) 上运行大约需要 25 秒。

Karpathy 还表示,所有文件都非常短且注释详尽,并包含使用示例。如下为 BPE 维基百科文章的复现例子。

from minbpe import BasicTokenizer
tokenizer = BasicTokenizer()text = "aaabdaaabac"
tokenizer.train(text, 256 + 3) # 256 are the byte tokens, then do 3 merges
print(tokenizer.encode(text))# [258, 100, 258, 97, 99]
print(tokenizer.decode([258, 100, 258, 97, 99]))# aaabdaaabac
tokenizer.save("toy")# writes two files: toy.model (for loading) and toy.vocab (for viewing)

此外还提供了如何实现 GPT4Tokenizer,以及它与 tiktoken 的比较。

text = "hello123!!!? (안녕하세요!) 😉"
# tiktoken
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")print(enc.encode(text))# [15339, 4513, 12340, 30, 320, 31495, 230, 75265, 243, 92245, 16715, 57037]
# ours
from minbpe import GPT4Tokenizer
tokenizer = GPT4Tokenizer()print(tokenizer.encode(text))# [15339, 4513, 12340, 30, 320, 31495, 230, 75265, 243, 92245, 16715, 57037]

当然,Karpathy 不满足只推出 GitHub 项目,他表示视频很快就会发布。

图片

责任编辑:张燕妮 来源: 机器之心
相关推荐

2022-06-23 15:48:02

AI开源GitHub

2023-11-05 10:01:37

AI模型

2024-02-19 13:45:14

OpenAIGPT-2模型

2020-08-18 14:48:00

AI 数据人工智能

2019-11-26 14:47:59

机器学习人工智能计算机

2023-03-02 14:00:03

AI绘画

2021-04-12 21:19:01

PythonMakefile项目

2024-08-27 22:08:13

2024-10-16 21:47:15

2023-11-24 14:05:00

AI训练

2024-09-05 12:11:25

大模型抓取列表页

2023-04-25 11:31:33

智能AI

2021-09-14 21:29:01

项目环境变量

2021-04-27 22:15:02

Selenium浏览器爬虫

2024-07-08 08:15:00

2020-11-11 18:25:21

GitHub代码 jQuery

2022-05-07 10:09:01

开发Java日志

2022-06-28 09:31:44

LinuxmacOS系统

2021-04-05 14:47:55

Python多线程事件监控

2024-11-13 09:18:09

点赞
收藏

51CTO技术栈公众号