🧩 什么是 Token?—— LLM 的“语言原子”
在大语言模型(LLM)中,Token 是模型处理文本时的最小单位。
你可以把它理解为:模型“读”和“写”语言时所用的基本“积木块”。
💡 模型并不直接理解“字”或“词”,它只认识 Token ID(一串数字)。
所有输入输出都必须先被转换成 Token 序列,才能被模型处理。
🔍 Token 不等于“字”,也不等于“词”
这是最容易误解的地方!
-
英文:一个 token 可能是整个单词(如
"cat")、词根(如"un")、后缀(如"ing"),甚至标点。 - 中文:一个 token 通常是单个汉字,但有时也会是常见词(取决于模型)。
-
代码/符号:
"{"、"//"、"numpy"都可能是独立 token。
✅ 关键结论:
Token 的划分方式完全由模型的 Tokenizer(分词器)决定,而分词器是在训练时根据数据统计学规则学出来的。
⚙️ Tokenizer 是怎么工作的?(以主流 BPE 为例)
大多数 LLM(如 GPT、Llama、Claude)使用 BPE(Byte Pair Encoding) 算法:
- 把所有文本拆成字符(包括空格);
- 统计哪些相邻字符组合出现最频繁;
- 把高频组合“合并”成新 token;
- 重复这个过程,直到达到预设的词表大小(通常 30,000–128,000 个 token)。
🌰 举个例子(简化版):
原始句子:"I love apples."
- 初始:
["I", " ", "l", "o", "v", "e", " ", "a", "p", "p", "l", "e", "s", "."] - 合并高频对:
"lo","ve","ap","pl"... - 最终可能变成:
["I", " love", " apple", "s", "."]→ 5 tokens
而中文因为每个字本身已是语义单元,且在英文主导的训练语料中出现频率相对分散,很少被合并,所以常被切成单字。
🌍 中文 vs 英文:Token 效率差异真相
| 项目 | 英文(在 GPT 等模型中) | 中文(在 GPT 等模型中) |
|---|---|---|
| 典型 token 粒度 | 单词或子词(subword) | 多为单字 |
| 例句 |
"Artificial intelligence" → 2 tokens |
"人工智能" → 通常 4 tokens(“人”“工”“智”“能”) |
| 原因 | BPE 在海量英文数据上训练,高频词被整体保留 | 中文在训练语料中占比低,缺乏足够合并机会 |
| 结果 | 表达相同语义,英文通常用更少 token | 中文用户可能花更多 token 成本 |
✅ 但注意:这不是语言本身的“优劣”,而是模型设计偏向的结果。
🇨🇳 国产模型的改进
像 通义千问(Qwen)、GLM、DeepSeek 等国产 LLM:
- 用大量中文语料训练 tokenizer;
- 将“人工智能”、“北京大学”、“Transformer”等常见词整体编码为 1 个 token;
- 因此在中文任务中 token 更少、速度更快、成本更低。
例如 Qwen 可能将:
-
"我喜欢吃苹果。"→["我", "喜欢", "吃", "苹果", "。"](5 tokens) - 而 GPT-4 可能切为:
["我", "喜", "欢", "吃", "苹", "果", "。"](7 tokens)
💰 为什么 Token 数量如此重要?
-
计费依据:API 服务(如 OpenAI、Azure)按 输入 + 输出的总 token 数收费。
- 你发 100 tokens,AI 回 200 tokens → 收你 300 tokens 的钱。
-
上下文限制:模型有最大上下文长度(如 8,192 或 128,000 tokens)。
- 超出部分会被截断,导致信息丢失。
- 推理成本:token 越多,计算越慢,显存占用越高。
🔧 实用建议
| 场景 | 建议 |
|---|---|
| 主要用中文 | 优先选择 Qwen、GLM、DeepSeek 等国产模型,token 效率更高 |
| 使用 GPT/Claude | 尽量精简中文输入,避免冗余;长文档可分段处理 |
| 开发应用 | 用官方 tokenizer 工具提前估算 token 消耗(如 tiktoken for GPT) |
| 写 Prompt | 用简洁清晰的语言,减少不必要的修饰词 |
✅ 一句话终极总结:
Token 是 LLM 理解语言的“基本单元”,其划分方式由模型的分词器决定;由于主流模型以英文为中心设计,中文在这些模型中通常被切得更碎、消耗更多 token,但国产大模型正在优化这一问题。