EP09. "Token 是怎么切出来的:从字符到向量空间"
🔒 登录后可标记已读- 同样字数长度的一句话跟一个网址(URL),丢给 AI 烧掉的 token 数完全不一样——这背后是 tokenizer(分词器)怎么切字的问题
- 官方标注 15 分钟,拆两件事:文字怎么变成模型看得懂的 token(tokenization),以及 token 怎么变成带"意思"的数字(embeddings)
- 前置知识:不需要,建议搭配 EP05《答案从哪来》一起看——那篇讲 token 怎么被"吃掉"(上下文窗口、成本),这篇讲 token 本身是怎么切出来的
- 核心方法叫 Byte-Pair Encoding(BPE):从单个字节开始,不断把最常见的相邻组合合并成新 token——常见的字/词自然会被合并成一个 token,生僻字/词则被拆得比较碎
- 学完能大致预估一段文字会被切成几个 token,并且能解释为什么长得差不多长的一句话跟一个 URL,消耗的 token 数完全不一样
重点内容
文字变成 token 的四个阶段
以 "Hi!" 为例,模型处理文字要经过四层转换:
- 字符串:你眼睛看到的
"Hi!" - 字符列表:拆成单个字符
['H', 'i', '!'] - 字符转数字:每个字符对应一个 ASCII 码
[72, 105, 33] - token:从一个训练时学出来的词表里,每个"文字片段"对应一个数字 ID——「带着数字 ID 的一段文字片段,就叫一个 token」
三种切法的取舍:字符级 / 词级 / 子词级
用「The tokenizer rocks.」这句话示范三种切法:
| 切法 | 结果 | token 数 | 问题 |
|---|---|---|---|
| 字符级 | [T][h][e][ ][t][o]... 一个字母一个 token | 20 个 | 处理起来又慢又贵 |
| 词级 | [The][tokenizer???][rocks][.] 一个词一个 token | 4 个 | 遇到生僻词/专业术语,词表会大到不现实 |
| 子词级(sweet spot) | [The][token][izer][rocks][.] | 5 个 | 兼顾效率,不用堆一个巨大到覆盖所有专业词汇的词表 |
目前主流 tokenizer 用的都是子词级,也就是下面讲的 BPE。
Byte-Pair Encoding 具体怎么运作
- 从单个字节开始,保证每个字符都被覆盖到
- 扫描训练文本,找出出现频率最高的相邻组合
- 把这个组合合并成一个新 token,加进词表
- 重复以上步骤,直到词表大小达到设定目标
- 结果:常见的词自然会被合并成一个 token,生僻词因为出现频率不够高、合并不了,会被拆得比较碎
为什么 URL 比句子贵
URL 里一大堆特殊字符和不像自然语言的片段(比如随机的路径、参数字串),BPE 训练时这些组合出现频率不够高,合并不起来,结果只能被迫一个字符一个字符地切。所以字数看起来差不多的一段 URL,实际消耗的 token 数会明显比一句正常的话要多——这也是 EP05 提到「system prompt/搜索结果吃掉的 token 比想象中多」背后的部分原因。
Embeddings:token 怎么变成带"意思"的数字
Token 切出来之后,每个 token 会被赋予一组数字(多维度的"分数"),让模型能识别语义上的关联。以 "cat" 这个词示范维度怎么累加:
| 维度数 | 数值示例 | 代表的意思 |
|---|---|---|
| 2 维 | [8.0, 3.5] | 可爱程度、体型大小 |
| 3 维 | [8.0, 3.5, 1.0] | 再加上"危险程度" |
| 4,096 维(真实模型常用规模) | [0.031, -0.184, 0.772, …, -0.094] | 每一维具体代表什么,没有人类可读的标签 |
📌 关键认知:单一维度捕捉到的意义没有标注名字——像"可爱程度"这种概念,很可能确实藏在几千维里的某个维度组合里,只是没有被明确标成一根轴。意思相近的 token,会在这个几千维的空间里,落在彼此靠近的位置——这就是 embedding 的核心作用。
学完你会
- ✅ 能解释为什么 URL 比字数差不多的一句话消耗更多 token
- ✅ 能大致预估一段文字会被切成几个 token
- ✅ 懂为什么模型训练好之后会"锁死"在特定的 tokenizer 上,以及为什么生僻字词切得比较碎
- ✅ 能用「分数(score)」「维度(dimension)」「距离相近(nearby)」这几个词,说清楚什么是 embedding
Sources
官方文档:
- Tokens: Why Some Inputs Cost More Than Others — https://academy.claude.com/tutorials/tokens-and-embeddings