约 654 字大约 2 分钟
LLMs Tokenizer
Byte-Pair Encoding (BPE)
1. Byte-Pair Encoding (BPE) 如何构建词典?
- 准备训练语料:准备足够的训练语料以及期望的词表大小。
- 拆分单词:将单词拆分为字符粒度(字粒度),并在末尾添加后缀,统计单词频率。
- 合并方式:统计每一个连续/相邻字节对的出现频率,将最高频的连续字节对合并为新字词。
- 重复操作:重复第3步,直到词表达到设定的词表大小,或下一个最高频字节对出现频率为1。
注:GPT2、BART和LLaMA都采用了BPE。
WordPiece
WordPiece 与 BPE 异同点是什么?
本质上,WordPiece和BPE的思想是相同的,主要的区别在于如何选择两个子词进行合并:
- BPE:选择频次最大的相邻子词进行合并。
- WordPiece:选择能够提升语言模型概率最大的相邻子词进行合并,来加入词表。
注:BERT采用了WordPiece。
SentencePiece
简单介绍一下 SentencePiece 思路?
SentencePiece的思路是将空格也当作一种特殊字符来处理,再用BPE或其他算法构造词汇表。
注:ChatGLM、BLOOM、PaLM采用了SentencePiece。
对比篇
1. 举例介绍一下不同大模型 LLMs 的分词方式?
- LLaMA:LLaMA的词表是最小的,中英文的平均token数最多,这意味着LLaMA对中英文分词比较碎,较为细粒度,尤其在中文上平均token数高达1.45。这意味着LLaMA大概率将中文字符切分为2个以上的token。
- Chinese LLaMA:扩展词表后,中文平均token数显著降低,将一个汉字或两个汉字切分为一个token,提高了中文编码效率。
- ChatGLM-6B:ChatGLM-6B是平衡中英文分词效果最好的tokenizer,中文处理效果较好,但由于词表比较大,中文处理的时间有所增加。
- BLOOM:虽然BLOOM的词表最大,但由于是多语种的,其中文和英文的分词效率与ChatGLM-6B基本相当。
2. 介绍一下不同大模型 LLMs 的分词方式的区别?
- LLaMA:由于其词表较小,中英文的分词较为细粒度,中文的token数显著增多。
- Chinese LLaMA:通过扩展词表,提高了中文编码效率,减少了中文token数。
- ChatGLM-6B:平衡中英文分词效果最佳,但处理时间因较大的词表而增加。
- BLOOM:作为多语种模型,BLOOM的中英文分词效率与ChatGLM-6B相似,但因支持更多语言,词表较大。