Skip to content

Tokenization

将文本分割成模型可处理的基本单元(Token)的过程。这是所有 LLM 的第一步,也是最容易被忽视的关键环节。

概述

Tokenization 将原始文本字符串映射为整数 ID 序列,是 NLP 管线的最前端。一个 Token 可以是一个词、子词、或单个字符。Tokenization 策略直接影响模型的词汇量、上下文窗口的有效利用率、多语言能力、以及推理成本。

主流 Tokenization 方法

BPE (Byte-Pair Encoding)

由 Sennrich et al. 于 2016 年提出,GPT 系列使用的标准方法。

原理:

  1. 从字符级别开始
  2. 反复统计并合并最频繁的相邻 token 对
  3. 直到达到预定的词汇表大小

特点:

  • 数据驱动的子词分割
  • 可以处理未见过的词(通过回退到子词/字符)
  • GPT-2/3/4、GPT-4o、BART 等使用
  • o200k_base (GPT-4o) 词汇表约 200K

WordPiece

由 Schuster & Nakajima 于 2012 年提出,BERT 家族使用。

原理:

  • 类似 BPE,但合并标准是最大化训练数据的似然
  • 使用贪心的"最可能"合并策略

特点:

  • BERT、DistilBERT、ELECTRA 使用
  • 通常词汇量较小(30K-50K)
  • 对形态丰富的语言处理较好

SentencePiece (Unigram LM)

由 Kudo & Richardson 于 2018 年提出,许多现代开源模型使用。

原理:

  • 不预先假设词边界(直接从原始文本训练)
  • 使用 Unigram 语言模型 + EM 算法
  • 支持 BPE 和 Unigram 两种训练模式

特点:

  • 不需要预先分词(特别适合中文、日文等无空格语言)
  • Llama 系列、Mistral、Gemma、Qwen 使用
  • 通常配合 byte-level 回退处理稀有字符

Tokenization 对模型的影响

上下文窗口的实际利用

不同分词器对同一段文本产生不同数量的 token:

语言文本GPT-4 (o200k)Llama 3 (tiktoken)Qwen (QwenTokenizer)
英文"Hello, world!"~4 tokens~4 tokens~4 tokens
中文"人工智能正在改变世界"~8 tokens~12 tokens~5 tokens
代码"def fibonacci(n):"~7 tokens~5 tokens~6 tokens

多语言公平性

  • 英文优势: BPE 在英文上效率最高,因为训练数据以英文为主
  • 中文劣势: 中文字符作为 token 浪费上下文窗口
  • 代码优化: 空格/缩进处理方式影响代码 token 效率

主流模型的分词器

模型分词器词汇量特点
GPT-4oo200k_base~200K高词汇量,对非英文优化
GPT-4cl100k_base100K广泛兼容
Llama 3tiktoken (Llama 3)128K大词汇表优化多语言
Llama 2sentencepiece (BPE)32K词汇量较小
Mistralsentencepiece (BPE)32K紧凑高效
Qwen 2.5QwenTokenizer152K中文效率极高
DeepSeek V3Byte-level BPE128K多语言平衡
Claude 3自研子词未公开高压缩率

工程实践

Token 成本计算

Cost = (input_tokens × input_price + output_tokens × output_price) / 1M
  • 中文文本:每个汉字 ≈ 1-2 tokens(视分词器而定)
  • 英文文本:每个单词 ≈ 1.3 tokens
  • 代码:每行 ≈ 3-8 tokens

常见陷阱

  1. 字符串反转破坏 token 边界: 某些 token 反转后不合法
  2. 数字 tokenization: "42" 和 " 42" 可能映射到不同的 token
  3. 特殊字符转义: Unicode 规范化(NFC/NFD)影响 token 计数
  4. 填充对齐: 某些分词器在 batch 处理时需要在 token 级别填充

Tokenization 调试工具

相关概念

参考来源

  • Sennrich et al. (2016). "Neural Machine Translation of Rare Words with Subword Units." ACL.
  • Kudo & Richardson (2018). "SentencePiece: A simple and language independent subword tokenizer." ACL demo.
  • OpenAI Tokenizer 文档 (platform.openai.com/tokenizer)
  • Meta (2024). "The Llama 3 Herd of Models" — Tokenizer 章节。

AI Knowledge Base — 持续积累