AI认知篇6:详解Token

这是我的agent系列文章的第5篇,该系列分为三部分:

  • AI认知篇:详细讲解相关基础概念
  • AI实践篇:分享诸如skills怎么写、怎么ai coding、怎么写好prompt等的最佳实践
  • AI八股篇:分享我自己整理的应付大模型应用开发岗位必备的八股笔记(后端与agent2手抓学习专栏

一、巴别塔困境:为什么大模型看不懂人话?

要理解 Token,首先得明白大模型到底是个什么东西。

尽管现在的 AI 能写诗、 coding、做数学题,表现得像个人类,但它的“大脑”本质上是一个巨大的数学函数。它只认识数字(向量),完全不认识文字、图片或声音。如果你直接把一段中文或英文文本扔给大模型,对它来说,这就像是一堆毫无意义的乱码,无法进行任何矩阵运算。

这就产生了一个根本性的矛盾:人类用自然语言交流,而机器只处理数字。

为了解决这个“巴别塔”式的沟通障碍,我们需要一个中间的“翻译官”。这个翻译官负责两件事:

  1. 编码(Encoding):把人类看得懂的文本,切分成最小的单元,并转换成机器看得懂的数字 ID。
  2. 解码(Decoding):把模型计算出来的数字 ID,还原回人类看得懂的文本。

这个“翻译官”就是 Tokenizer(分词器),而被切分出来的最小单元,就是 Token

核心结论:大模型从未真正“阅读”过文字。它看到的永远是一串类似 [45, 1024, 89, 332] 这样的数字序列。它生成的每一个字,本质上都是在预测下一个数字是什么。Token,就是连接人类语义世界与机器数学世界的唯一桥梁。

二、Token 是如何诞生的?BPE 算法的魔法

Token 不是程序员手动定义的字典(比如规定 "apple" 是一个 Token,"banana" 是一个 Token)。如果是手动定义,面对人类海量的词汇和新造词,这本字典将无穷大且永远无法维护。

现代主流大模型(如 GPT-4, Llama 3, Qwen 等)的 Tokenizer,大多是基于一种名为 BPE(Byte Pair Encoding,字节对编码) 的算法训练出来的。

BPE 的核心思想非常朴素且优雅:统计频率,合并高频。它通过不断寻找数据中出现频率最高的字符组合,将它们“粘合”成一个新的单元,从而实现对文本的高效压缩。

1. 从零开始的训练过程

让我们通过一个极简的例子,模拟 BPE 算法是如何“炼”成一个分词器的。

假设我们的训练语料库只有这么几个单词:"hug", "pug", "pun", "bun", "hugs"

第一步:字符级初始化

最初,词汇表里只有单个字符。算法先把所有单词拆成单字列表:

  • h, u, g
  • p, u, g
  • p, u, n
  • b, u, n
  • h, u, g, s

此时,表示 "hug" 需要 3 个 Token。

第二步:统计频率,寻找“最佳搭档”

算法遍历整个语料,统计相邻字符对出现的次数:

  • "u" + "g":出现了 3 次(在 hug, pug, hugs 中)
  • "u" + "n":出现了 2 次(在 pun, bun 中)
  • "h" + "u":出现了 2 次
  • ...

显然,"u" 和 "g" 是出现频率最高的搭档。

第三步:合并,创造新 Token

算法决定将 "u" 和 "g" 合并成一个新的单元 "ug",并将其加入词汇表。现在,单词的表示变成了:

  • h, ug (2 个 Token)
  • p, ug (2 个 Token)
  • p, u, n (3 个 Token,未变)
  • b, u, n (3 个 Token,未变)
  • h, ug, s (3 个 Token)

看,"hug" 和 "pug" 的表示长度缩短了,压缩效率提升。

第四步:迭代,直到满足条件

算法不会停歇。基于新的单元列表,它再次统计频率。这次可能会发现,"h" + "ug" 经常一起出现(在 "hug" 和 "hugs" 的开头)。于是,算法将 "h" 和 "ug" 合并成 "hug",加入词汇表。

现在的表示:

  • hug (1 个 Token!)
  • p, ug (2 个 Token)
  • hug, s (2 个 Token)

这个过程会重复成千上万次。

  • 常见的短单词(如 "the", "is", "a")会很快被合并成一个 Token。
  • 常见的词根(如 "ing", "tion", "pre")也会成为独立 Token。
  • 最终,我们会得到一个包含 3 万到 10 万个单元的词汇表。这个词汇表就是大模型的“世界观”。

关键洞察:BPE 算法是一种有损压缩。它优先保证高频内容的压缩率(常用词变短),而低频内容(生僻词、乱码)则保留为多个字符。这也解释了为什么大模型对常用语理解深刻,而对生僻怪诞的内容反应迟钝——因为在它的“词汇表”里,后者只是零散的碎片。

三、实战现场:当你输入一句话时发生了什么?

当训练好的 Tokenizer 面对用户的新输入时,它不再进行统计合并,而是执行最大匹配原则(Longest Match First)。它会拿着那本厚厚的词汇表,试图在输入文本中找到最长的匹配项。

场景演示

假设我们的词汇表里有以下单元(注意空格的处理):["I", " love", " AI", " lo", "ve", "r", " art", "ist"]注:在英文 BPE 中,空格通常作为前缀附着在单词前面,以区分 "love"(动词)和 "love"(名词后缀等情况),这里简化演示。

案例 A:完美匹配

输入:"I love AI"

  1. 扫描 "I" -> 匹配成功。
  2. 扫描 " l

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

内容包含: 1.后端八股大全:多一句没有少一句不行的最精简八股整理,完全可以应付校招八股拷打! 2.速成项目话术:目前有魔改苍穹外卖项目话术(额外扩展了很多技术亮点),能速成拿去面试,后面会更新agent开发等等热门高质量项目话术 3.智力题超详细题解汇总; 4.面试时非技术问题话术整理,绝对震惊面试官一年; 5.算法lc hot100全题系列题解:绝对通俗易懂。 欢迎订阅!

全部评论

相关推荐

评论
6
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务