🟣 Tokenizer 深挖:BPE / Tiktoken / 中文分词
🟣 Tokenizer 深挖:BPE / Tiktoken / 中文分词
同一句中文, GPT-4 吃 30 个 Token, 国产模型吃 12 个。 同样的提问,价格能差 2-3 倍。 这背后是一个被严重低估的组件——Tokenizer。
🟣 AI 深度派专栏 · 第 S2-10 期 📅 2026年10月6日 ✍️ 小敏说 AI
💡 本文要点:本文讲清 Tokenizer 是什么、BPE 算法原理、Tiktoken / SentencePiece 差异、中文 Tokenizer 的进化、它对成本与能力的真实影响。
🎯 本文导读
- 🔹 Tokenizer 在 LLM 里的位置
- 🔹 BPE 算法原理
- 🔹 Tiktoken vs SentencePiece
- 🔹 中文 Tokenizer 的演进
- 🔹 它如何影响成本与能力
一、🧩 Tokenizer 在 LLM 里的位置
"我爱 AI"
↓ Tokenizer
[1234, 5678, 9012] # 数字 ID
↓ Embedding
[向量, 向量, 向量]
↓ Transformer
[预测]
💬 关键观点:Tokenizer 是 LLM 的”翻译官”——把人话变成数字、把数字变回人话。
它的设计直接决定:
- 同一段文字”几个 Token”
- 模型”看到”什么粒度
- 多语言 / 代码 / Emoji 怎么处理
二、🔤 BPE 算法(Byte Pair Encoding)
最主流算法,源自 1994 年压缩算法。
训练流程
1. 初始词表 = 所有字符(含字节)
2. 找出语料里"最常一起出现的两个 Token 对"
3. 合并为新 Token,加入词表
4. 重复,直到词表达到目标大小(如 50000 / 100000 / 200000)
例子(英文)
初始:l, o, w, e, r
高频共现:l+o → "lo"
继续:lo+w → "low"
继续:low+er → "lower"
最终:"lower" 变成 1 个 Token
✅ 效果:高频词整体 = 1 Token;罕见词拆成多个 sub-word。
三、⚖️ Tiktoken vs SentencePiece
| 工具 | 出品 | 谁在用 |
|---|---|---|
| Tiktoken | OpenAI | GPT-3/4/5 |
| SentencePiece | Llama / Qwen / Gemini | |
| HuggingFace Tokenizers | HF | 通用 Rust 实现 |
关键差异
| 维度 | Tiktoken | SentencePiece |
|—|—|—|
| 预处理 | 复杂正则切分 | 直接 byte 级 |
| 空格处理 | 把空格拼到下一个词 | 显式标 ▁ |
| 多语言友好 | 较弱 | 强 |
| 训练简单 | 较难 | 容易 |
🎯 一句话总结:SentencePiece 多语言场景更友好——这就是国产模型选它的核心原因。
四、🇨🇳 中文 Tokenizer 的演进
早期(GPT-3.5 / GPT-4)
- 中文一个字常拆成 2-3 个 Token
- 同样一句话,比英文贵 2-3 倍
- 上下文窗口实际”短一截”
改进路径
| 模型 | 改进 | |—|—| | GPT-4o | 中文 Token 压缩约 1.4× | | Llama 3 | 词表扩到 128K,中文友好 | | Qwen / DeepSeek | 专门为中英双语训练 Tokenizer | | Yi / GLM | 中文优化版 |
实测对比
同一段 1000 字中文文章:
| 模型 | Token 数 |
|---|---|
| GPT-3.5(cl100k_base) | ~1500 |
| GPT-4o(o200k_base) | ~1000 |
| Llama 3 | ~900 |
| Qwen / DeepSeek | ~600 |
💬 关键观点:Token 数差 2-3 倍 = 上下文能力 / 成本差 2-3 倍。
五、💸 它如何影响成本与能力
| 维度 | 解释 |
|---|---|
| API 费用 | 按 Token 计费,少 Token = 便宜 |
| 上下文有效长度 | 128K Token,英文能装 90 页、中文只能 50 页 |
| 训练效率 | 同样语料,Token 少 = 训得快 |
| 生成速度 | Token 少 = 生成快 |
| 代码 / 数学 | 不同 Tokenizer 对代码碎片化程度不同 |
六、🪓 Tokenizer 引发的”奇怪 bug”
bug 1:数字处理
GPT 早期对长数字 Tokenize 怪异,导致数学算错。后来强制”按位拆分”才修。
bug 2:SolidGoldMagikarp
Reddit 早期挖到的”幽灵 Token”——训练数据里只出现一两次,模型对它会异常行为。
bug 3:多语言不公平
非英语用户支付更多 Token 费——这是一种事实上的”语言税”。
七、❌ 常见误区
| 误区 | 真相 |
|---|---|
| ❌ Tokenizer 是次要细节 | ✅ 影响 30% 推理成本 |
| ❌ 1 个 Token = 1 个字 | ✅ 中文常 0.5-2 个字 / Token |
| ❌ 词表越大越好 | ✅ Embedding 表也大 |
| ❌ 训完就完事 | ✅ 新数据出现要更新 |
八、🎁 给非工程读者的”Tokenizer 心法”
🔑 看一个模型对中文友好 → 看 Tokenizer
🔑 同样的钱,国产模型常买到 2× 中文上下文
🔑 用 tiktoken 库可以本地估算 Token 数
🔑 极端格式(JSON / 代码)尤其要看 Token 化效率
📮 今日话题:你算过自己用 AI 一年总共”花在 Token 上”多少钱吗?
🔮 下一篇预告:s2ep11《Embedding 深度:从 word2vec 到 contrastive》
🟣 本系列是「小敏说 AI · AI 深度派专栏」第 S2-10 期。 关注公众号 小敏说 AI,回复「深度派」领取第二季合集。