堂前燕
计算机 / 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(字节对编码):

  1. 从字符级别开始,词表 = 所有字符
  2. 统计语料里最常见的相邻字符对,比如 “th” 出现 1000 万次
  3. 把这对合并成新 token “th”,加进词表
  4. 重复几万次,直到词表达到目标大小

最常见的搭配(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;日文、韩文更贵;俄文、阿拉伯文也更贵 —— 因为这些训练数据少,词表不友好。

工程上的影响

  1. 上下文窗口:GPT-4 Turbo 128K token ≈ 50 万字符英文 ≈ 20 万字中文
  2. prompt 工程:相同语义,英文 prompt 通常更短,运行更便宜
  3. 多语言能力:训练时小语种数据少 → token 化粗糙 → 模型对小语种掌握不如英文
  4. emoji / 特殊字符:每个表情符号通常是 2-4 个 token,比一个汉字还贵

注意

这个演示是结构示意

  • “BPE 模拟”只用了几十个最常见的英文子词碎片
  • 真实 GPT 用的是 OpenAI 自己的 cl100k_base 词表,5 万多 token
  • 真实分词器更精细(处理大小写、连字符、标点等细节)

但你能看到的核心规律和真实情况完全一致 —— 这就是 token 化对效率和成本的根本影响。