外观
大语言模型分词器技术对比与实践
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. Byte-Pair Encoding (BPE)
1.1 词典构建步骤
BPE 是 GPT-2、BART 和 LLaMA 采用的分词算法。构建流程如下:
- 准备足够的训练语料,设定目标词表大小
- 将单词拆分为字符粒度(字粒度),在末尾添加后缀,统计单词频率
- 合并方式: 统计每个连续/相邻字节对的出现频率,将最高频字节对合并为新的子词
- 重复步骤 3,直到达到目标词表大小或下一个最高频字节对频率为 1
python
# BPE 构建流程示意
input: "low" "lower" "newest" "widest"
step1: l o w _ , l o w e r _ , n e w e s t _ , w i d e s t _
step2: 统计相邻字节对频率 → 合并最高频对 → 重复适用模型: GPT-2、BART、LLaMA
2. WordPiece
2.1 与 BPE 的异同
WordPiece 本质上仍是 BPE 思想,但最大区别在于如何选择两个子词进行合并:
| 算法 | 合并标准 |
|---|---|
| BPE | 选择频次最大的相邻子词合并 |
| WordPiece | 选择能够最大化语言模型概率的相邻子词合并 |
适用模型: BERT 采用 WordPiece
3. SentencePiece
3.1 核心思路
SentencePiece 将空格也当作一种特殊字符来处理,在此基础上使用 BPE 或 Unigram 构造词汇表。
其优势在于:
- 语言无关:不依赖预分词步骤
- 可逆性:编码后的 token 序列可以无损解码回原始文本
- 统一处理:空格作为普通字符,避免分词不一致
适用模型: ChatGLM、BLOOM、PaLM
4. 各大模型分词方式对比
4.1 不同 LLM 的分词器
| 模型 | 分词算法 | 词表大小 | 特点 |
|---|---|---|---|
| GPT-2 | BPE | ~50,000 | 标准 BPE,英文效果好 |
| BERT | WordPiece | ~30,000 | 基于语言模型概率选择合并 |
| LLaMA | BPE (SentencePiece) | 32,000 | 词表最小,中英文分词较碎 |
| ChatGLM-6B | SentencePiece (BPE) | ~130,000 | 中英文分词效果最均衡 |
| BLOOM | SentencePiece (BPE) | ~250,000 | 词表最大,多语种支持 |
| PaLM | SentencePiece | - | 基于 SentencePiece |
4.2 分词效果对比
| 模型 | 中文平均 token 数 | 英文平均 token 数 | 评价 |
|---|---|---|---|
| LLaMA | ~1.45 | 较多 | 中文分词最碎,汉字可能被切为多个 token |
| Chinese LLaMA | 显著降低 | 相当 | 扩展词表后中文编码效率大幅提升 |
| ChatGLM-6B | 较低 | 较低 | 平衡中英文分词效果最好,但词表大影响处理时间 |
| BLOOM | 与 ChatGLM 相当 | 与 ChatGLM 相当 | 词表最大但多语种,效率与 ChatGLM 基本相当 |
结论: ChatGLM-6B 是平衡中英文分词效果最好的 tokenizer。LLaMA 原始词表最小,中英文分词都较碎,通过扩展词表可显著改善中文编码效率。
5. 分词器选择建议
| 场景 | 推荐算法 | 原因 |
|---|---|---|
| 纯英文模型 | BPE | 成熟稳定,效率高 |
| 多语种模型 | SentencePiece + BPE | 语言无关,统一处理 |
| 中英文平衡 | SentencePiece + 大词表 | 兼顾中英文分词效率 |
| 中文为主 | SentencePiece + 中文词表扩充 | 提高中文编码效率 |