🧠 图解记忆:字符不怕没见过的词,但句子太长塞不下上下文。
💡 答案要点
三种主流方法的本质区别:
- Character Level: r-u-n-n-i-n-g (7tokens, no OOV, long seq)
- Word Level: running (1token, high OOV, short seq)
- Subword Level: run+ing (2tokens, low OOV, medium seq)
1. BPE(Byte-Pair Encoding): 初始化词汇表→统计相邻pair频率→合并最高频pair→重复直到目标vocab size。 Byte-level BPE从UTF-8 byte起步,任何Unicode文本都不会OOV。 代表模型:GPT-2/3/4 (tiktoken), RoBERTa
2. WordPiece: 合并能使语言模型likelihood提升最多的pair→max likelihood。 代表模型:BERT、DistilBERT(vocab:30K,用##标记连续子词)
3. SentencePiece: tokenizer框架而非算法。内部实现Unigram(首选)、BPE等。将标点视为普通字符。 Unigram LM思路:从大候选集迭代去掉最低概率20%直到等于目标大小。 代表模型:T5、LaMDA、PaLM、Gemini系列
Vocab Size选择权衡: | Vocab Size | 优点 | 缺点 | 典型应用 | |-----------|------|------|---------|| | 32K (LLaMA) | 容纳更多token | 罕见词被拆散 | LLaMA家族 | | 50K (GPT-2) | 中英混合好 | 显存略增 | GPT-2/3 | | 100K (GPT-4) | 复杂词直接映射 | 更大embedding | GPT-4 |
多语言挑战: CJK一个汉字占3bytes→序列膨胀2-3x→浪费KV Cache。 应对:①为每种语言单独训练tokenizer ②扩大vocab size
面试加分项: BPE is adaptive computation、tiktoken O(1)查找、CJK序列膨胀问题
面试话术:
"Tokenization的本质是在OOV风险和序列长度之间找平衡。BPE通过迭代合并高频pair构建子词vocab。Byte-level BPE从根本上消除了OOV。但CJK语言会遇到序列膨胀(一个汉字变3-5个byte token)。目前主流模型多在32K-100K之间选取vocab size。"