Appearance
分词与词表 — 概念
分词算法
llama.cpp 支持以下分词算法:
BPE (Byte Pair Encoding)
GPT 系列模型使用的算法:
- 从字符级开始
- 反复合并最高频的 token 对
- 编码时使用最长匹配
"hello world" → ["he", "llo", " world"]SPM (SentencePiece)
LLaMA 系列使用,基于 byte-level BPE + byte fallback:
- 预留 256 个 byte token 作为 fallback
- 空格替换为
▁(U+2581) - 支持添加 BOS token
WPM (WordPiece)
BERT 系列使用:
- 类似 BPE 但使用最长优先匹配
- 未知词用
##前缀标记子词
Unigram
T5 系列使用:
- 从大词表中逐步删减
- 编码时使用概率最大的路径
词表结构
c
enum llama_vocab_type {
LLAMA_VOCAB_TYPE_NONE = 0,
LLAMA_VOCAB_TYPE_SPM = 1, // SentencePiece
LLAMA_VOCAB_TYPE_BPE = 2, // Byte Pair Encoding
LLAMA_VOCAB_TYPE_WPM = 3, // WordPiece
LLAMA_VOCAB_TYPE_UGM = 4, // Unigram
LLAMA_VOCAB_TYPE_RWKV = 5, // RWKV greedy
};每个 token 包含:
- 文本表示(text)
- 分数(score)— 用于 BPE 合并优先级
- 类型(normal, control, unknown, byte 等)
- 特殊标记(BOS, EOS, PAD, EOT 等)
分词流程
相关概念
- tokenization — 分词算法详解
- gguf — 词表在 GGUF 中的存储