本文是《Karpathy神经网络零基础课程》系列文章
← 上一篇:Karpathy神经网络07:GPT – 从零实现ChatGPT | → 下一篇:无
这是一个关于大语言模型(LLM)幕后功臣——Tokenizer(分词器)的硬核科普视频。
Andrej Karpathy(OpenAI 前核心成员)在视频中手把手教大家从零编写一个 GPT 级别的分词器。为了让你轻松读懂,我把它总结成了一篇适合初中生阅读的趣味技术文章。
🤖 为什么聪明的 AI 有时候连单词都不会拼?
——带你亲手拆解 GPT 的“翻译官”
你好!你有没有发现一个奇怪的现象:像 ChatGPT 这样的人工智能,能写出莎士比亚风格的诗,能做复杂的物理题,但有时候你问它“’Strawberry’这个词里有几个 r?”它居然会数错!或者让它翻转一个单词,它也会乱码。
难道是 AI“偏科”了吗?Andrej Karpathy 告诉我们:这不一定是 AI 脑子笨,很可能是它的“耳朵”——也就是【分词器 (Tokenizer)】出了问题。
今天我们就来拆解这个神秘的零件,看看 AI 是怎么“听懂”人类语言的。
1. 什么是 Tokenizer?(AI 的翻译官)
电脑其实看不懂中文或英文,它只认识数字。所以,当我们把一句话发给 AI 时,中间必须有一个“翻译官”把文字变成数字。
- 最笨的方法:把每个字母变成一个数字。比如 a=1, b=2。
-
缺点:一句话会变得超级长,AI 处理不过来。
-
聪明的方法(分词):把经常出现的“组合”打包成一个数字。
- 比如单词
the经常出现,我们就给它一个专门的代号,比如99。 - 像
ing、tion这种常见的词尾,也都有自己的代号。
这些被打包好的小方块,就叫 Token。对于 AI 来说,Token 就是语言的“原子”或“乐高积木”。
2. 核心魔法:BPE 算法(拼积木游戏)
现在的 GPT-4 是怎么决定哪些字母该打包在一起的呢?它用了一种叫 Byte Pair Encoding (BPE) 的算法。听起来很高大上,其实原理像玩游戏一样简单:
- 找朋友:把所有的训练数据拿来,看哪两个字符挨在一起出现的次数最多。
- 合体:比如发现
e和空格经常挨在一起(因为很多英文单词以 e 结尾),那就把它们俩粘起来,变成一个新的 Token。 - 循环:重复上面的步骤,不断把最常见的组合粘在一起,直到我们收集了几万个常用的 Token。
在视频中,Karpathy 真的写了 Python 代码演示了这个过程:从一堆乱糟糟的字符,通过不断的“合并”,最后变成了整齐的 Token 列表。
3. 分词器带来的“奇葩”问题
既然分词器是把字打包,那如果包打得不好,就会出大问题。视频里展示了很多好玩的 Bug:
- 为什么 AI 不识数?
-
因为数字也被随机打包了。比如
123可能是一个 Token,但1234可能会被拆成1和234。AI 就像在看乱码,所以做算术题特别费劲。 -
为什么 AI 对某些词“过敏”?
- 神奇的“SolidGoldMagikarp”事件:有一个 Reddit 论坛的用户名叫
SolidGoldMagikarp,因为它在分词器的训练数据里出现了很多次,所以拥有了一个专属 Token。但是!在训练 AI 大脑的数据里,这个词却没怎么出现。 -
结果就是:AI 的“翻译官”认识这个词,但 AI 的“大脑”对它一脸懵逼。当你问 AI 这个词时,它就会开始胡言乱语,甚至报错。
-
为什么中文比英文贵?
- 因为目前的 Tokenizer 主要是针对英文训练的。一句英文可能只要几个 Token,但一句中文可能需要很多个 Token 才能拼凑出来。这就导致处理中文时,AI 需要计算更多的步骤,所以更慢、更贵。
4. 动手时刻:我们也能造一个!
Andrej Karpathy 在视频里不仅讲理论,还带大家用 Python 写了一个迷你的分词器。
- 第一步:把文字转成最基础的字节(UTF-8 编码)。
- 第二步:写一个循环,不断寻找出现频率最高的那一对字节,把它们合并。
- 第三步:处理特殊情况,比如不让 GPT 把标点符号和单词粘在一起。
虽然代码有点复杂,但核心思想就是“压缩”——用最少的数字代表最多的信息。
💡 总结与思考
看完这个视频,你可能会觉得 Tokenizer 像是一个为了让电脑读懂文字而不得不做的“补丁”。
- 好消息:它让 GPT 能够高效地处理海量文字。
- 坏消息:它并不完美,它是导致 AI 拼写错误、算术差、对非英语语言不友好的罪魁祸首之一。
未来的 AI 会怎样?
Karpathy 预测,也许未来的 AI 模型会强大到不需要 Tokenizer,直接就能读懂最原始的字节甚至像素(就像人眼看书一样)。但在那一天到来之前,理解 Tokenizer 是我们通过编程与 AI 对话的必修课!
课后小挑战:下次当你看到 ChatGPT 犯蠢(比如数不清单词里的字母),试着想一想:是不是它的“翻译官”把这个单词切成了奇怪的碎片,让它看走眼了呢?






程序员数学扫盲课
AI周刊:大模型、智能体与产业动态追踪
Claude Code 全体系指南:AI 编程智能体实战
Karpathy神经网络零基础课程
最新评论
开源的AI对话监控面板很实用,正好团队在找这类工具。准备试用一下。
折叠屏市场确实在升温,不过售罄也可能是备货策略。期待看到实际销量数据。
从磁盘I/O角度解释B树的设计动机,这个切入点很好。终于理解为什么数据库不用二叉树了。
IT术语转换确实是个痛点,之前用搜狗总是把技术词汇转成奇怪的词。智谱这个方向值得期待。
这个工具结合LLM和搜索API的思路很有意思,正好解决了我在做知识管理时遇到的问题。请问有没有部署文档?
这个漏洞确实严重,我们团队上周刚遇到类似问题。建议补充一下如何检测现有项目是否受影响的方法。
从简单规则涌现复杂性这个思路很有意思,让我想起元胞自动机。不过数字物理学在学术界争议还挺大的。
我也遇到了指令跟随变差的问题,特别是多轮对话时容易跑偏。不知道是模型退化还是负载优化导致的。