最近在训练LLM,发现不同tokenizer的分词结果和效率都不太一样,因此做实验探究一下,顺便把结果在这里做一个记录。
实验是使用各tokenizer在NewsCommentary的中英平行语料(各25w条)上进行处理,记录处理出的token长度以及处理时间等,结果如下:
名称 | 词表长度↑ | 中文平均长度↓ | 英文平均长度↓ | 中文处理时间↓ | 英文处理时间↓ |
---|---|---|---|---|---|
LLaMA | 32000 | 62.8 | 32.8 | 02:09 | 01:37 |
BELLE | 79458 | 24.3 | 32.1 | 00:52 | 01:27 |
MOSS | 106072 | 24.8 | 28.3 | 07:08 | 00:49 |
GPT4 | 50281 | 49.9 | 27.1 | 00:07 | 00:08 |
BLOOM/Z | 250680 | 23.4 | 27.6 | 00:46 | 01:00 |
ChatGLM | 130344 | 23.6 | 28.7 | 00:26 | 00:39 |
实验结果
- LLaMA的词表长度是最短的,其在中英文的平均长度上效果都不佳,同时处理时间也较长。
- BELLE的词表是在LLaMA基础上进行扩增的,通过观察可以发现,扩增的主要是中文的token,因此中文平均长度和LLaMA相比有较大的下降。
- 对比MOSS和BELLE的中英文平均长度可以发现,MOSS相比于BELLE多出的token主要降低了英文的平均长度。
- GPT4的tokenizer在英文上效果最佳,但在中文上效果一般。另外由于GPT4采用的是OpenAI实现的高效tokenizer库tictoken,可以看到GPT4的tokenizer在10s内可以分别过完25w的中英文数据。
- BLOOM/Z的词表长度是几个对比的tokenizer中最长的,这使得其在中文平均长度上有着最佳表现,同时英文平均长度也接近于最短的GPT4。从优秀的中文平均长度和最长的词表数上看,我们可以推测该tokenizer在别的语言上表现也不错。
- ChatGLM是平衡中英文平均长度和处理效率最佳的tokenizer。
出现UNK的数量
以往我们在考虑tokenizer的时候,会考虑它出现unk的数量。但现在因为基本采用sentencepiece来构建词表,而sentencepiece是将输入都转换成unicode再进行处理。而词表中会含有组成所有unicode字符的基本byte,就像如果词表中有26个字母,那这个词表理论上可以组成所有单词而不会出现OOV(out of vocabulary) 问题。因此上述tokenizer在测试数据上都没有出现UNK的现象。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 闲记算法!
评论