Tokenizer(分词器)
将原始文本转换为 token ID 序列(编码)并将 token ID 还原为文本(解码)的组件。每个语言模型都绑定一个训练好的 Tokenizer,其词表和合并规则决定了模型的输入粒度。
Tokenizer(分词器)
一句话理解
Tokenizer 是文本与数字之间的翻译官——把人类读的文字变成模型读的数字,也能把数字变回文字。
Tokenizer 的两个核心能力
python
tokenizer = Tokenizer(vocab, merges)
# 编码:文本 → token ID 序列
ids = tokenizer.encode("Hello world") # [15339, 1917]
# 解码:token ID 序列 → 文本
text = tokenizer.decode([15339, 1917]) # "Hello world"
编码(encode) 和解码(decode) 必须互为逆操作——decode(encode(text)) == text 是 Tokenizer 的基本正确性保证。
核心组成
一个完整的 Tokenizer 包含三部分:
| 组件 | 作用 | 示例 |
|---|---|---|
| 词表(Vocabulary) | token 与 ID 的映射表 | {"hello": 0, "world": 1, ...} |
| 合并规则(Merges) | 子词合并的优先顺序 | [("e","s"), ("es","t"), ...] |
| 特殊 token | 控制信号,不对应真实文本 | `< |
训练 vs 推理
Tokenizer 有独立于模型的训练过程:
- 训练:在大规模语料上学习词表和合并规则(只做一次)
- 推理:用学到的规则对新文本做编码/解码(每次调用模型时)
Tokenizer 训练完成后被"冻结"——它的词表和规则不会在模型训练过程中改变。这意味着一旦 Tokenizer 确定,模型能处理的输入粒度就固定了。
主流 Tokenizer 实现
| 实现 | 使用模型 | 分词算法 |
|---|---|---|
tiktoken | GPT-3.5/4/4o | Byte-level BPE |
SentencePiece | LLaMA、Gemma | BPE 或 Unigram |
HuggingFace tokenizers | 各类开源模型 | BPE / WordPiece / Unigram |
实际影响
- token 计数影响 API 成本和上下文窗口使用
- prompt 工程中,了解分词边界有助于避免意外截断
- 模型能力边界与 Tokenizer 绑定——不在词表中的字符组合会被拆成更细的片段,影响模型理解效果
引用本术语的文章