ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
Karpathy新视频又火了:从头构建GPT Tokenizer
8886点击    2024-02-21 16:34

技术大神卡帕西离职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


传送门:

[1]https://www.youtube.com/watch?v=zduSFxRajkE

[2]https://twitter.com/karpathy/status/1759996549109776702/quotes


文章来自于微信公众号“量子位”(ID: QbitAI),作者 “丰色 、鱼羊”