May 9, 2025 最近重写了 TinyGPT 项目的 Tokenizer 部分,主要是参考了 HuggingFace Tokenizers 的结构,以及 tiktoken 中对 BPE 的优化实现,完整代码详见: TinyGPT/src/tokenizer 分词步骤 Tokenizer 对外主要提供 encode 和 decode 两个方法,分别将字符串映射为 id 序列以及反映射为原字符串,encode 主要由四个步骤组成: Normalizer: 对输入字符串进行预处理,比如 Unicode Normalization、大小写转换等; Pre-tokenizer: 预分词,通过空格、正则匹配等方式对输入字符串进行拆分,其中 ByteLevel 还会进行不可见字符的替换; Model: 具体的分词算法实现,比如 BPE、WordPiece、Unigram 等; Post-Processor: 对结果进行额外处理,如对话模版等; decode 则相对简单,输入 id 序列映射为原字符串即可。 BPE BPE 的核心逻辑在于 pair merge,即合并相邻的子串,如下图,输入字符串 "topology",经过 5 次 merge,最终分词结果为 ["to", "po",Continue reading “LLM Tokenizer BPE 分词实现”