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 实现

实现使用模型分词算法
tiktokenGPT-3.5/4/4oByte-level BPE
SentencePieceLLaMA、GemmaBPE 或 Unigram
HuggingFace tokenizers各类开源模型BPE / WordPiece / Unigram

实际影响

  • token 计数影响 API 成本和上下文窗口使用
  • prompt 工程中,了解分词边界有助于避免意外截断
  • 模型能力边界与 Tokenizer 绑定——不在词表中的字符组合会被拆成更细的片段,影响模型理解效果

引用本术语的文章