Karpathy新视频又火了:从头构建GPT Tokenizer

人工智能 新闻
手把手教咱构建一个GPT Tokenizer(分词器),还是熟悉的时长(足足2小时13分钟)。

技术大神卡帕西离职OpenAI以后,营业可谓相当积极啊。

这不,前脚新项目刚上线,后脚全新的教学视频又给大伙整出来了:

这次,是手把手教咱构建一个GPT Tokenizer(分词器),还是熟悉的时长(足足2小时13分钟)

图片

Ps. 上次讲课还是俩月前的大模型科普。

所谓“卡帕西出手,必属精品”,大伙火速码码码:

今晚的约会取消,卡帕西来了我要去上课(狗头)

图片

再说一遍,付费都买不到的这样高质量的课程,冲。

图片

具体都有哪些干货?

“太长不看版”已为大家准备好。

为什么要关注Tokenizer

如大神介绍:

Tokenizer即分词器是大语言模型pipeline中一个完全独立的阶段。

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

为什么我们需要关注它?

卡帕西指出:

因为LLM中的很多奇怪行为和问题都可以追溯到它。

比如:

  • 为什么大模型不能处理简单的字符串处理任务,例如反转?
  • 为什么大模型在非英语语言任务方面的性能更差?
  • 为什么大模型不擅长简单的算术?
  • 为什么我的模型在看到字符串“”后就突然“宕机”了?
  • 为什么大模型实际上并不是端到端的语言建模?
  • ……

图片

所以为了弄清这些问题,便有了今天的课程——尽管大神本人对这部分内容其实也不太喜欢。

上这门课大家会注意到我的表情全程都很凝重。不过,其中的细节真的太重要了(大家还是忍忍吧)

以下为视频主要内容文字版。

图片

从头构建OpenAI大模型中使用的分词器

视频的最开始主要是对分词器的一些介绍。

包括最简单的字符级分词操作(即每个字符是一个token)以及更为复杂和常用的chunk级操作(即多个字符也会组成一个token)

图片

在这之中,业内最常用的算法是BPE,即byte pair encoding,字节对编码,因此我们要想构建自己的分词器,最重要的是了解这个算法。

卡帕西介绍:

BPE可以更好地处理非英语语言、对词汇表大小进行调整,对于模型的性能有显著影响。

比如GPT-4分词器通过改进BPE算法,最终在处理Python代码时更加高效,因为它能够将多个空格合并为单个标记,从而减少序列长度,使得模型能够关注更长更多的代码。

需要注意的是,尽管BPE算法可以处理UTF-8编码的字节序列,但直接使用这些序列会导致词汇表过大、序列过长,从而影响模型的注意力机制和上下文长度,因此需要压缩处理。

理解BPE算法后,如何构建自己的分词器?

简单来说,主要包括以下几个步骤:

1、初始化词汇表

基于UTF-8编码的字节。

2、合并字节对并不断迭代,直到词汇表大小达到预设值

在实际演示中,卡帕西通过20次合并,将文本的token数量减少了约27%。

3、处理特殊字符和不同语言的字符

4、整体优化

词汇表过大可能会导致模型训练困难,过小则可能无法捕捉到足够的语言细节。

5、选择一个包含丰富语言特征的数据集来训练

在此,卡帕西提到了SentencePiece库,它支持多种分词算法包括今天提到的BPE。

我们可以用它进行分词器的训练,包括配置选项和如何处理罕见字符。

训练好的分词器用于编码和解码文本也讲了。

6、最后就是评估+集成到模型中了。

当然,后续我们还需要根据模型的表现进行持续调整。

具体道每一步,大神都给咱配了详细的Python实现,包括如何找到最频繁的字节对、如何合并这些对以及如何构建合并字典等等,具体大家就请参阅视频吧。

图片

在这之中,卡帕西也提醒了n个细节,比如:

在解码过程中,如果遇到无效的UTF-8字节序列,可以使用“errors=’replace’”来替换;使用“end of text”特殊标记来在训练数据中分隔文档等等。

实际远比此复杂

毫无疑问,卡帕西带大家实现的是比较基础的一个分词器版本,实际模型中远比这要复杂得多。

比如OpenAI官方提供的BPE分词器——tiktoken

它用了正则表达式来分割文本,以此来保证某些类型的字符也不会被合并。在GPT-2中,它就在某些方面表现得不错了。

到了GPT-4,官方也对其进行了一些调整。

图片

主要的改变在于:

  1. GPT-4会将空格合并;
  2. 大小写不敏感;
  3. GPT-4最多只合并3位数字,避免了长数字序列token。

不过由于官方并没有公开具体训练细节,所以我们也无法知道其详细的实现。

而除了更复杂的算法,分词器本身在处理长字符串、非英语语言、数字和特殊字符时都可能遇到问题。

因此,讲来讲去,大神在视频中还是表达了一个“朴素的愿望”:

非常希望有一天能够不需要分词,直接将字节流输入到语言模型中。

不过由于这就需要我们对Transfomer架构进行重大修改了,所以现阶段,构建和优化分词器仍然是实现高效大模型的关键步骤。

完整视频见:https://weibo.com/6105753431/O1BQB96Yg

责任编辑:张燕妮 来源: 量子位
相关推荐

2024-02-22 09:51:56

代码AI

2024-02-22 07:29:31

OpenAIKarpathy分词器

2024-03-01 13:49:00

数据训练

2016-09-28 22:04:01

GNUAutotoolLinux

2024-02-26 00:40:00

AIGPT

2021-01-12 09:46:00

深度学习编程神经网络

2023-04-14 11:04:43

2017-07-12 08:33:04

机房数据中心服务器

2024-02-19 00:12:50

AI代码

2023-07-12 13:29:44

2022-05-07 19:51:22

微软WindowsWindows 12

2023-08-11 17:30:54

决策树机器学习算法

2023-05-29 09:48:36

AI李飞飞

2020-08-24 10:20:38

微软开源GitHub

2022-07-01 08:38:56

谷歌AIParti

2024-04-11 12:47:37

AI模型

2023-11-24 14:05:00

AI训练

2019-12-27 08:35:43

GitHub代码开发者

2023-10-11 12:32:26

模型训练

2011-09-20 10:28:03

Google钱包测评
点赞
收藏

51CTO技术栈公众号