跳转至

57 LLMs Tokenizer 篇

LLMs Tokenizer 篇

来自: AiGC面试宝典

Image

2023年09月29日 12:20

宁静致远

Byte-Pair Encoding(BPE)篇

1 Byte-Pair Encoding (BPE) 如何构建词典?

  1. 准备足够的训练语料;以及期望的词表大小;

  2. 将单词拆分为字符粒度(字粒度),并在末尾添加后缀“”,统计单词频率

  3. 合并方式:统计每一个连续/相邻字节对的出现频率,将最高频的连续字节对合并为新的子词;

  4. 重复第3步,直到词表达到设定的词表大小;或下一个最高频字节对出现频率为1。

注:GPT2、BART和LLaMA就采用了BPE。

WordPiece 篇

1 WordPiece 与 BPE 异同点是什么?

本质上还是BPE的思想。与BPE最大区别在于:如何选择两个子词进行合并

· BPE 是选择频次最大的相邻子词合并;

· WordPiece算法选择能够提升语言模型概率最大的相邻子词进行合并,来加入词表

注:BERT采用了WordPiece。

SentencePiece 篇

简单介绍一下 SentencePiece 思路?

把空格也当作一种特殊字符来处理,再用BPE或者来构造词汇表。

注:ChatGLM、BLOOM、PaLM采用了SentencePiece。

对比篇

1 举例 介绍一下 不同 大模型LLMs 的分词方式?

模型词表大小分词结果长度
LLaMA32000['男', '<0xE5>', '<0x84>', '<0xBF>', '何', '不', '<0xE5>', '<0xB8>', '<0xA6>', '<0xE5>', '<0x90>', '<0xB4>', '<0xE9>', '<0x92>', '<0xA9>', '', '收', '取', '关', '山', '五', '十', '州', '。']24
Chinese LLaMA49953['男', '儿', '何', '不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。']14
ChatGLM-6B130528['男儿', '何不', '带', '吴', '钩', ',', '收取', '关山', '五十', '州', '。']11
ChatGLM2-6B65024['男', '儿', '何', '不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。']14
Bloom250880['男', '儿', '何不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。']13
Falcon65024['男', '儿', ',', '

2 介绍一下 不同大模型LLMs 的分词方式的区别?


模型词表大小中文平均 token数英文平均 token数中文处理时间(s)英文处理时间(s)
LLaMA320001.450.2512.619.4
Falcon650241.180.23521.39524.73
Chinese LLaMA499530.620.2498.6519.12
ChatGLM-6B1305280.550.1915.9120.84
ChatGLM2-6B650240.580.238.89918.63
Bloom2508800.530.229.8715.6
  1. LLaMA的词表是最小的,LLaMA在中英文上的平均token数都是最多的,这意味着LLaMA对中英文分词都会比较碎,比较细粒度。尤其在中文上平均token数高达1.45,这意味着LLaMA大概率会将中文字符切分为2个以上的token。

  2. Chinese LLaMA扩展词表后,中文平均token数显著降低,会将一个汉字或两个汉字切分为一个token,提高了中文编码效率。

  3. ChatGLM-6B是平衡中英文分词效果最好的tokenizer。由于词表比较大,中文处理时间也有增加

  4. BLOOM虽然是词表最大的,但由于是多语种的,在中英文上分词效率与ChatGLM-6B基本相当。