AIUnlimited
🌳

AI基础

🌱
AI 种子

从零开始

🌿
AI 萌芽

打好基础

🌳
AI 枝干

付诸实践

🏕️
AI 树冠

深入探索

🌲
AI 森林

精通AI

🔨

AI精通

✏️
AI 草图

从零开始

🪨
AI 雕刻

打好基础

⚒️
AI 匠心

付诸实践

💎
AI 打磨

深入探索

🏆
AI 杰作

精通AI

📘

AI实战

📖
理解开源模型

开源模型的基础知识和资源

🎯
问题到模型任务

将业务问题转化为模型任务

⚡
跑通第一个模型

30分钟快速看到第一个结果

🔧
微调与评测

微调模型并评估性能

🚀
应用系统

构建实际AI应用系统

🎨
生成式AI

探索AIGC的开源模型

🤖
Agent智能体

学习Agent框架和MCP工具

📐
基础补充

LLM基础知识和评测

🎓

Claude 学院

🤖
Claude 101 入门

用 Claude 学习 AI 基础知识

💻
Claude Code 101 入门

让 Claude 成为你的结对编程伙伴

🤝
Claude Cowork 入门

与 Claude 协作完成复杂项目

⚙️
Claude 平台 101

使用 Claude API 构建应用

实验室

已加载 7 个实验
🧬神经网络沙盒🤖AI 还是人类?🥋提示工程道场🏁算法竞速🧠AI 知识挑战🏗️系统设计画布
🎯模拟面试进入实验室→
🚀

职业发展

🚀
面试发射台

开启你的旅程

🌟
行为面试精通

掌握软技能

💻
技术面试

通过编程轮次

🤖
AI与ML面试

ML面试精通

🏆
Offer与未来

拿下最好的Offer

立即开始
AIUnlimited

AI 教育平台

沪ICP备18025655号-11

学习

  • AI基础
  • AI实战
  • Claude学院
  • 实验室
  • 职业发展

社区

  • 关于
  • 常见问题

支持

  • 服务条款
  • 隐私政策
  • 联系我们
AI & 工程学习计划›🌿 AI 萌芽›课程›分词
🔤
AI 萌芽 • 中级⏱️ 14 分钟阅读

分词

标记化 - AI 如何读取文本

神经网络与数字一起工作。他们无法像您那样读“你好”这个词。在任何语言模型可以处理文本之前,必须将其分解为称为“令牌”的小数字片段。这个看似简单的步骤对人工智能如何理解和误解语言产生了深远的影响。

为什么 AI 不能直接读取字符?

最简单的方法:将每个字符视为一个标记。 “Hello”变成 ['H', 'e', 'l', 'l', 'o'] - 五个标记。

问题?单词变成了荒谬的长序列。一篇 500 字的文章可能会变成 2,500 多个字符。由于 Transformer 模型随序列长度呈二次方缩放,因此这在计算上是残酷的。更糟糕的是,单个字符几乎没有任何意义 - 模型必须知道“c”、“a”、“t”一起表示毛茸茸的动物。

字级标记化

相反的极端:每个单词都是一个标记。 “The cat sat”变成了['The', 'cat', 'sat']——紧凑而有意义。

但这产生了一个不同的问题:词汇量爆炸。仅英语就有数十万个单词。添加拼写错误、技术术语和代码,词汇量就会变得难以管理。词汇表中没有的任何单词都会成为未知的 [UNK] 标记 - 理解的死胡同。

🤔
Think about it:

如果使用单词级标记的模型第一次遇到“ChatGPT”并且它不在词汇表中,则它变为[UNK]。这可能会如何影响模型讨论新技术的能力?

最佳点 - 子词标记化

现代语言模型使用子词标记化,它位于字符和单词之间。常见的单词保持完整(“the”、“and”),而罕见的单词则被分成有意义的部分(“un”+“belief”+“able”)。

这为我们提供了可管理的词汇量(通常为 32,000-100,000 个标记),同时处理任何文本 - 甚至是模型以前从未见过的单词。

”令人难以置信”一词分为三个子词标记:”不”、”相信”和”能够”,箭头显示了它们如何重新组合
子词标记化将罕见单词分割成可重复使用的片段,同时保持常用单词的完整性。

字节对编码 (BPE) - 一步一步

BPE 是 GPT 模型背后的算法。以下是它构建词汇表的方式:

  1. 以单个字符开始:{'h', 'e', 'l', 'o', 'w', 'r', 'd', ' '}。
  2. 计算哪些相邻标记对在训练文本中出现最频繁。
  3. 将最频繁的对合并成新的令牌。如果“l”+“o”出现最多,则创建“lo”。
  4. 重复步骤 2-3,直到达到所需的词汇量。

工作示例,文本为“低下最低”:

|步骤|最常见的配对 |新代币 |词汇量增长 | |------|--------------------|------------|------------------| | 1 |左+右|瞧| ...瞧... | | 2 |洛 + w |低| ...低... | | 3 | e + r |呃| ...呃... | | 4 |低 + e |洛| ...洛威...|

经过足够的合并后,常见单词和单词片段会自然地从数据中出现。

🤯

BPE 最初于 1994 年作为一种数据压缩算法发明。 Sennrich 等人于 2015 年将其重新用于 NLP。 - 跨学科思想的一个美丽例子。

其他标记化方法

文字片段

由 BERT 和相关模型使用。与 BPE 类似,但它不是合并最频繁的对,而是合并最大化训练数据的似然的对。子词片段以 ## 为前缀(例如,“演奏”→ )。

第 8 课,共 16 课已完成 0%
←损失函数与优化器

讨论

登录 参与讨论

['play', '##ing']

句子片段

将输入视为原始字节流 - 没有空格的预标记。这对于日语和中文等不使用单词之间空格的语言至关重要。 GPT-4 和 LLaMA 使用 SentencePiece 风格的方法。

GPT-4 如何标记文本

GPT-4 使用名为 cl100k_base 的 BPE 变体,其词汇表中包含大约 100,000 个标记。一些令人惊讶的行为:

  • “Hello world” → 2 个代币(Hello、 world - 请注意附有空格)。
  • “不可分割性” → 4 个标记(ind、iv、isibility - 分割稀有单词)。
  • 单个表情符号 🎉 → 通常有 1-3 个符号。
  • Python 代码 def hello(): → 每个关键字和符号通常都是其自己的标记。
🧠小测验

为什么语言模型使用子词标记而不是整个单词?

词汇量大小的权衡

|词汇量|优点 |缺点 | |----------------|------|------| |小 (8k) |更小的模型,更少的嵌入 |序列越长,处理速度越慢 | |大(100k+)|更短的序列,更丰富的标记 |更大的嵌入表,更多的内存 |

找到正确的平衡是一项影响模型速度、内存和功能的工程决策。

多语言挑战

主要针对英文文本训练的分词器是有偏见的。印地语或阿拉伯语中的同一个句子可能比英语中的对应句子需要多 3-5 倍的标记,因为这些脚本在训练数据中的代表性不足。这意味着:

  • 非英语用户更快地达到上下文限制。
  • 对于非英语文本,每个单词的 API 成本较高。
  • 该模型对于非英语推理的“思维空间”较小。
🧠小测验

为什么同一个句子在印地语中比在英语中花费更多的 API 令牌?

代币计数和成本影响

对 GPT-4、Claude 或 Gemini 的每次 API 调用均按令牌计费。了解标记化可以帮助您:

  • 在运行大型作业之前估算成本。
  • 优化提示 - 具有相同含义的较短提示可以省钱。
  • 尊重上下文窗口 - GPT-4 Turbo 接受 128k 令牌;超过此值会默默地截断您的输入。

英语的粗略经验法则:1 个标记 ≈ 一个单词的 3/4,或大约 4 个字符。

🧠小测验

一篇1000字的英语作文大约需要多少个token?

🤯

OpenAI 的开源 tiktoken 库可让您使用与 GPT-4 使用的完全相同的算法在本地对文本进行标记。尝试自己写作,看看您的消息真正花费了多少代币。

🤔
Think about it:

如果您正在为威尔士语等低资源语言构建语言模型,您将如何进行标记化以确保公平且高效的编码?

要点

  • 标记化将原始文本转换为模型可以处理的数字标记。
  • BPE 通过迭代合并最常见的字符对来构建词汇表。
  • 子词标记化平衡了词汇量大小和处理任何文本的能力。
  • 分词器偏差使非英语语言在成本和功能上处于劣势。
  • 了解令牌可以帮助您估算成本并优化提示。

📚 进一步阅读

  • Andrej Karpathy - nn-zero-to-hero(Tokenizer 讲座) - 与 Karpathy 一起从头开始构建 BPE 标记器
  • OpenAI Tokenizer Tool - 查看 GPT 模型如何对文本进行标记的交互式工具
  • 拥抱脸 - 分词器总结 - BPE、WordPiece 和 SentencePiece 的清晰比较