计算机 / AI · 初中 /高中 · NLP · 分词 · LLM · BPE
LLM 分词演示
大语言模型不读字符 —— 它读 token。同样一句话,英文短词最便宜,罕见词最贵,中文居中。
0 tokens · 0 chars — chars/token
大语言模型怎么”看”文字
你以为 GPT-4 读到的是字符(‘H’, ‘e’, ‘l’, ‘l’, ‘o’)。不是。 它读到的是 token —— 一种”子词”单位。
"Hello world" 在 GPT 的眼里大致是 ["Hello", " world"] 两个 token;
"Antidisestablishmentarianism" 会被拆成大约 5-6 个 token;
中文 "人工智能" 可能是 3-4 个 token(每个字大致 1-2 个)。
为什么不用字符或词
用字符:
- 优点:词表小(英文 ~100 个字符)
- 缺点:序列长,模型要看更多步骤;丢失了”单词”作为一个语义单位
用整词:
- 优点:词表对应直觉
- 缺点:词表会爆炸(数百万),永远遇到没见过的”新词”
- 中文更麻烦:没有空格分隔
用 token(BPE / WordPiece / SentencePiece):
- 词表 5 万 ~ 10 万左右
- 常见词整词收进词表(“the”、“world”、“hello”)
- 罕见词拆成子词(“Anti” + “dis” + “establish” + “ment” + “arianism”)
- 永远不会有”完全没见过”的输入
BPE 算法的核心思想
Byte Pair Encoding(字节对编码):
- 从字符级别开始,词表 = 所有字符
- 统计语料里最常见的相邻字符对,比如 “th” 出现 1000 万次
- 把这对合并成新 token “th”,加进词表
- 重复几万次,直到词表达到目标大小
最常见的搭配(the、ing、ed)会成为一个 token;罕见的组合还原成字符级别的 token。
为什么”chars/token 比”很重要
这个比值反映模型处理这段文字的效率:
- 英文常规文本:~4 chars/token(每 4 个字符 1 个 token)
- 中文:~1.5 chars/token(每 1.5 个字 1 个 token,因为中文 token 化更碎)
- 代码:~3 chars/token(关键字成 token,标识符拆碎)
- 罕见语言或生僻字:可能 < 1 chars/token
调用 API 是按 token 计费。同样的内容,中文比英文贵 ~2.5 倍 token;日文、韩文更贵;俄文、阿拉伯文也更贵 —— 因为这些训练数据少,词表不友好。
工程上的影响
- 上下文窗口:GPT-4 Turbo 128K token ≈ 50 万字符英文 ≈ 20 万字中文
- prompt 工程:相同语义,英文 prompt 通常更短,运行更便宜
- 多语言能力:训练时小语种数据少 → token 化粗糙 → 模型对小语种掌握不如英文
- emoji / 特殊字符:每个表情符号通常是 2-4 个 token,比一个汉字还贵
注意
这个演示是结构示意:
- “BPE 模拟”只用了几十个最常见的英文子词碎片
- 真实 GPT 用的是 OpenAI 自己的
cl100k_base词表,5 万多 token - 真实分词器更精细(处理大小写、连字符、标点等细节)
但你能看到的核心规律和真实情况完全一致 —— 这就是 token 化对效率和成本的根本影响。