外观
LLM Tokenizer 面试题
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. Byte-Pair Encoding (BPE) 如何构建词典?
BPE 是一种数据驱动的子词分词算法,通过迭代合并高频字节对来构建词典:
- 准备语料与目标词表大小
- 初始化:将每个单词拆分为字符粒度,单词末尾添加特殊后缀
</w>,统计所有单词频率 - 合并:统计所有相邻字节对的出现频率,将最高频的字节对合并为新的子词
- 迭代:重复第 3 步,直到词表达到设定的目标大小,或最高频字节对的出现频率为 1
应用模型:GPT-2、BART、LLaMA
2. WordPiece 与 BPE 的异同
二者本质都是 BPE 思想,核心区别在于合并策略:
- BPE:选择出现频次最高的相邻子词进行合并
- WordPiece:选择能够最大化语言模型概率(即最大化训练数据似然)的相邻子词进行合并
应用模型:BERT
3. SentencePiece
核心思路:将空格也视为一种特殊字符处理,不依赖预分词(Pre-tokenization),直接对原始文本应用 BPE 或 Unigram 算法构建词汇表。
优势:语言无关,特别适合中文、日文等不存在天然空格分隔的语言。
应用模型:ChatGLM、BLOOM、PaLM
4. 不同大模型的分词方式对比
| 模型 | 分词方式 | 词表大小(参考) | 中文分词特点 |
|---|---|---|---|
| LLaMA | BPE | 最小 | 中文平均 token 数最高(约 1.45),分词粒度较细,大概率将中文字符切分为 2 个以上 token |
| Chinese-LLaMA | BPE(扩展词表) | 较大 | 中文平均 token 数显著降低,通常一个或两个汉字为一个 token,编码效率提升 |
| ChatGLM-6B | SentencePiece | 约 130K | 中英文分词效果最均衡,中文处理时间略有增加 |
| BLOOM | SentencePiece | 最大 | 多语种词表,中英文分词效率与 ChatGLM-6B 基本相当 |
| GPT 系列 | BPE | 约 50K-100K | 英文分词为主 |
选型建议:
- LLaMA 原生中文分词粒度最细,推理开销最大,中文场景建议扩展词表
- ChatGLM 在中英文平衡方面表现最佳
- BLOOM 词表最大但支持语种最多,中英文场景可作为备选