Token 与 Embedding
可复习 · 原问题出处待确认本章材料
重点
- 文字先被切成 Token。 Token 可以是单词、单词的一部分、标点等。每个 Token 对应词表里的一个编号。
- Embedding 矩阵给词表里的每个 Token 存一个向量。 以 GPT-3 为例:词表约 50,257 个 Token,每个向量有 12,288 个数字。
- 这些向量是训练中学出来的。 向量空间里的某些方向可以对应意义上的差别,视频里用“king − man + woman ≈ queen”举例。
- 刚查出来的向量只代表这个 Token 本身,还不带上下文。 后面的 Attention 等层会根据上下文不断更新它。
- 模型一次能处理的 Token 数有上限,这叫上下文长度。 GPT-3 是 2,048 个 Token。
由 Claude 根据 3Blue1Brown《Deep Learning》第 5 章整理。读的时候哪一条看不懂,就把它记到「复习」的“我卡在哪里”。
难点
- Token 不等于字或词。 常见词通常是一个 Token,少见的词会被拆成好几块。
- Token 编号的大小没有意义。 编号相邻不代表意思相近,意思的远近体现在向量里。
- “方向有意义”是一种近似的观察。 不是每一维都对应一个能说出名字的特征,king − man + woman 也只是大致接近 queen。
- 同一个 Token 在不同句子里,查到的初始向量完全一样。 区分词义发生在后面的层,不在查表这一步。
由 Claude 根据 3Blue1Brown 第 5 章整理。读的时候哪一条看不懂,就把它记到「复习」的“我卡在哪里”。
动手看
先看文字怎样变成 Token 和编号:
再看为什么不能直接用编号。点“猫”试试:
容易混淆的几个概念
| 概念 | 是什么 | 例子 | 有没有“意思” |
|---|---|---|---|
| Token | 分词器切出来的文本片段 | “un”“believ”“able” | 是文字,但还没变成模型能算的东西 |
| Token ID | Token 在词表里的编号 | #3810 | 没有,只是座位号 |
| Embedding 矩阵 | 词表大小 × 向量长度的一张大表,训练中学出来 | 约 5 万行 × 12,288 列(GPT-3) | 整张表编码了所有 Token 之间的关系 |
| Embedding 向量 | 用 Token ID 查表得到的那一行 | 一串几千个数字 | 有,但还不带上下文 |
| 经过 Attention 后的向量 | 吸收了上下文信息后的表示 | “river bank”里的 bank | 有,而且带上了上下文 |
一个记法:Token 是切出来的片段,ID 是它的座位号,Embedding 是查座位号拿到的那串数字。
为什么设计师也该知道
Token 不只是模型内部的概念,它会直接影响产品:
- 上下文窗口和价格都按 Token 计算。 “能读 20 万 Token”不等于“能读 20 万字”。同样意思的中文和英文,Token 数可能差很多,具体取决于分词器。
- 模型看到的是 Token,不是字母。 所以“strawberry 里有几个 r”这类问题,模型曾经经常答错。它可能从来没有“看到”过单独的字母。
- 少见的名字和新词会被拆得很碎。 品牌名、人名、行业术语占用的 Token 更多,也更容易被模型处理得不准。
来源
- 原问题的出处待确认,见本页开头的说明。
- 参考解释、交互实验和测验由 Claude 编写。分词结果、Token 编号和二维向量都是示意,不来自真实的分词器或模型。
- 学习材料:3Blue1Brown · Transformers, the tech behind LLMs(Deep Learning 第 5 章,讲到了 Token、Embedding 矩阵和 GPT-3 的 12,288 维)。