May 9, 2025 最近重写了 TinyGPT 项目的 Tokenizer 部分,主要是参考了 HuggingFace Tokenizers 的结构,以及 tiktoken 中对 BPE 的优化实现,最终实测性能优于 HuggingFace Tokenizers 和 tiktoken: 评测脚本:~/benches/tokenizer.py 机器:Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz Tokenizer 完整代码详见:~/src/tokenizer 分词步骤 Tokenizer 对外主要提供 encode 和 decode 两个方法,分别将字符串映射为 id 序列以及反映射为原字符串,encode 主要由四个步骤组成: Normalizer: 对输入字符串进行预处理,比如 Unicode Normalization、大小写转换等; Pre-tokenizer: 预分词,通过空格、正则匹配等方式对输入字符串进行拆分,其中 ByteLevel 还会进行不可见字符的替换; Model: 具体的分词算法实现,比如 BPE、WordPiece、Unigram 等; Post-Processor: 对结果进行额外处理,如对话模版等; decode 则相对简单,输入Continue reading “比 tiktoken 还快?BPE 分词优化小结”