Karpathy离职OpenAI,首发2小时AI大课!从头开始构建GPT分词器

人工智能 新闻
果不其然,继放出BPE的GitHub代码后,Karpathy终于上线了「从头构建GPT分词器」的课程,引来大波网友关注。

离职OpenAI的技术大神karpathy,终于上线了2小时的AI大课。

——「让我们构建GPT Tokenizer(分词器)」。

图片

其实,早在新课推出两天前,karpathy在更新的GitHub项目中,就预告了这件事。

图片

这个项目是minbpe——专为LLM分词中常用的BPE(字节对编码)算法创建最少、干净以及教育性的代码。

目前,GitHub已经狂揽6.1k星,442个fork。

图片项目地址:https://github.com/karpathy/minbpe

网友:2小时课程含金量,相当于大学4年

不得不说,karpathy新课发布依然吸引了业内一大波学者的关注。

他总是可以把相当复杂的LLM概念,用非常好理解的方式讲出来。

有网友直接取消了晚上的约会,去上课了。

图片

与karpathy的约会之夜。

AI机器学习研究员Sebastian Raschka表示,「我喜欢从头开始的实现,我真的很期待看到这个视频」!

图片

英伟达高级科学家Jim Fan表示,「Andrej的大脑是一个大模型,它能将复杂的事物标记化为简单的token,让我们小型思维语言模型可以理解。

图片

还有UCSC的助理教授Xin Eric Wang表示,「就个人而言,我非常欣赏他多年前发表的关于RL的文章:http://karpathy.github.io/2016/05/31/rl/,这篇文章帮助我进入了RL领域」。

图片

还有人直言这两个小时课程的含金量,堪比4年制大学学位。

图片

「Andrej是最好的AI老师」。

图片

为什么是分词器?

为什么要讲分词器?以及分词器为什么这么重要?

正如karpathy所言,分词器(Tokenizer)是大模型pipeline中一个完全独立的阶段。

它们有自己的训练集、算法(字节对编码BPE),并在训练后实现两个功能:从字符串编码到token,以及从token解码回字符串。

图片

另外,大模型中许多怪异行为和问题,其实都可以追溯到分词器。

就比如:

- 为什么LLM拼不出单词?

- 为什么LLM无法完成超级简单的字符串处理任务,比如反转字符串?

- 为什么LLM不擅长非英语语言方面的任务?

- 为什么LLM不擅长简单算术?

- 为什么GPT-2在用Python编码时遇到了超出必要的麻烦?

- 为什么LLM在看到字符串<lendoftextl>时突然停止?

- 为什么大模型实际上并不是端到端的语言建模

......

图片

视频中,他将讨论许多这样的问题。讨论为什么分词器是错误的,以及为什么有人理想地找到一种方法来完全删除这个阶段。

两小时大课走起

在本讲座中,他将从头开始构建OpenAI GPT系列中使用的Tokenizer。

根据YouTube课程章节介绍,一共有20多个part。

其中包括引言介绍、字节对编码 (BPE) 算法演练、分词器/LLM 图:这是一个完全独立的阶段、minbpe练习时间!编写自己的GPT-4分词器等等。

从讲解到习题演练贯穿了全部课程。

以下是从演讲内容中总结的部分要点。

在视频结尾,Karpathy重新回顾了LLM分词器带来的怪异问题。

首先,为什么LLM又时拼不正确词,或者做不了其他与拼写相关的任务?

从根本上说,这是因为我们看到这些字符被分割成了一个个token,其中有些token实际上相当长。

因此,我怀疑这个单个token中塞进了太多的字符,而且我怀疑该模型在与拼写这个单个token相关的任务方面应该不是很擅长。

当然,我的提示是故意这样做的,你可以看到默认风格将是一个单一的token,所以这就是模型所看到的。

事实上,分词器不知道有多少个字母。

那么,为什么大模型在非英语任务中的表现更差?

这不仅是因为LLM在训练模型参数时,看到的非英语数据较少,还因为分词器没有在非英语数据上得到充分的训练。

就比如,这里「hello how are you」是5个token,而它的翻译是15个token,相当与原始的3倍大。

「안녕하세요」在韩语中代表着「你好」,但最终只有3个token。

事实上,我对此感到有点惊讶,因为这是一个非常常见的短语,只是典型的问候语,如你好,最终是三个token。

而英语中的「你好」是一个单一的token。这是我认为LLM在非英语任务中表现差的原因之一便是分词器。

另外,为什么LLM会在简单的算术上栽跟头,也是与数字的token有关。

比如一个类似于字符级别的算法来进行加法,我们先会把一加起来,然后把十加起来,再把百加起来。

你必须参考这些数字的特定部分,但这些数字的表示完全是任意的,主要是基于在分词过程中发生的合并或不合并。

你可以看看,它是一个单一的token,还是2个token,即1-3、2-2、3-1的组合。

因此,所有不同的数字,都是不同的组合。

不幸的是,有时我们会看到所有四位数字的四个token,有时是三个,有时是两个,有时是一个,而且是以任意的方式。

但这也并不理想。

所以这就是为什么我们会看到,比如说,当训练Llama 2算法时,作者使用句子片段时,他们会确保把所有的数字都分割开来,作为Llama 2的一个例子,这部分是为了提高简单算术的性能。

最后,为什么GPT-2在Python中的表现不佳,一部分是关于架构、数据集和模型强度方面的建模问题。

但也有部分原因是分词器的问题,可以在Python的简单示例中看到,分词器处理空格的编码效率非常糟糕。

每个空格都是一个单独的token,这大大降低了模型可以处理交叉的上下文长度,所以这几乎是GPT-2分词的错误,后来在GPT-4中得到了修复。

图片

课后习题

在课程下方,karpathy还给在线的网友们布置了课后习题。

快来打卡吧。

责任编辑:张燕妮 来源: 新智元
相关推荐

2024-02-26 00:40:00

AIGPT

2024-02-22 07:29:31

OpenAIKarpathy分词器

2024-02-21 14:07:00

2024-03-01 13:49:00

数据训练

2013-01-08 11:02:26

IBMdW

2023-08-11 17:30:54

决策树机器学习算法

2013-05-23 10:10:53

PHP5.5PHP编译php

2022-07-22 07:18:53

代码DeepMind

2022-11-14 10:49:33

Linux发行版

2009-05-08 09:40:07

网易魔兽暴雪

2021-06-04 22:43:32

Python本地搜索

2023-05-24 16:20:39

DevOpsCI/CD 管道软件开发

2022-06-01 23:21:34

Python回归树数据

2020-11-17 08:09:01

webpack配置项脚手架

2022-11-23 16:20:12

GPU编程流和事件开发

2017-02-23 08:45:36

Python决策树数据集

2020-06-11 08:32:50

Python遗传算法代码

2023-02-06 16:01:26

数据中心服务器

2021-02-20 21:29:40

GitHub代码开发者

2021-09-03 11:26:39

分词器ElasticSear
点赞
收藏

51CTO技术栈公众号