Skip to content

Tokenization

为什么需要、BPE、WordPiece/SentencePiece、中英文差异。

Updated View as Markdown
For humans

Tokenization

Tokenization 是模型的第一道工序:文本切成 token 再进模型。面试主线:为什么需要、主流算法、中英文差异、工程影响。

为什么需要

  • 模型输入输出都是 token 序列(embedding 查表按 token)
  • 词汇表固定(如 32K-150K),不能直接吃任意文本
  • token 是计价单位:API 按 token 收费,上下文长度按 token 算

BPE:字节对编码(主流)

语料统计高频字符对 → 合并成新 token → 重复直到词汇表满
例: "low" + "er" → "lower"; "play" + "ing" → "playing"
  • BPE 从字符/字节开始,逐步合并高频对,词汇表里既有词也有子词
  • 特点:未登录词也能表示(拆成子词/字节),词表可控
  • 子词的好处:形态变化共享 token(run/running/runs 共用车+后缀)

其他算法

算法 机制 使用
BPE 合并高频字节对 GPT 系列、Llama
WordPiece 按语言模型概率挑合并 BERT
SentencePiece 直接处理原始文本(含空格),可换 BPE/Unigram T5、Llama 部分
Unigram 概率模型逐步删除 token SentencePiece 选项

中英文差异

  • 英文:词根子词切分(“unbelievable” → un + believ + able),平均 ~1.3 token/词
  • 中文:没有空格分词,常见做法是单字/双字成 token(或按字节 BPE)
  • 中文 token 效率低:一个汉字常对应 1-2 个 token,同样意思中文的 token 数多于英文(成本高、上下文占得快)
  • 面试点:中文场景注意 token 消耗,提示词和上下文要精简;部分中文模型针对中文优化过词表

工程影响

影响 说明
成本 输入输出都按 token 计费
上下文 窗口按 token 算,中文占得快
质量 切分不当时模型理解差(罕见词拆得碎)
一致性 同一内容 token 数因模型而异

tiktoken 等工具可以预估 token 数(调 API 前算成本、控制上下文长度)。

面试追问

  1. BPE 怎么工作? 从字符开始,统计并合并高频字节对,直到词表满。子词表示未登录词
  2. 为什么要子词? 词表可控 + 未登录词可拆 + 形态共享(run/running 共用前缀)
  3. 中文 token 有什么问题? 无空格分词,单字/双字成 token,效率低:同样内容 token 数更多,成本更高
  4. token 和字符的关系? 不一定一一对应:英文词根、中文单字、标点单独。用 tiktoken 预估
  5. 词汇表多大? 主流 32K-150K。越大表示越精细但 embedding 层越大
Navigation

Type to search…

↑↓ navigate↵ selectEsc close