文章目录
- 前言
- BPE
- 参考
前言
因为最近在看T5,里面讲到一些分词的方法如BEP,因为现在都是在玩大模型,那么语料也就都很大,而且还需要适配不同的语言,而不同的语言又不一定像英文那样按空格切分就行,例如咱们的中文,所以就需要一些适用性更广的方法了。
不仅如此,当我们遇到未知词汇时,如果使用常规的词汇表,那么未知词汇通常为 < UNK >,此时未知词汇之间就没有任何区分,而如果我们使用subword来创建词汇表,即将语料中连着出现频率高的字符串作为衍生的字词,此时面对未知词汇时就有可能使用到部分字词的语义,作出一定的区分,同时使用这样的方法也能够缓解词汇表过大的问题,同时也能保证一定的语义表示效果。
BPE
BPE(Byte-Pair Encoding)编码,就是一种根据频率切分语料的方法,能够将原始语料切分为subword,输入也不受限制,应该是字符就行。
例如我们的语料为最左边的那些,(2 bed 表示语料中出现了2次bed这个词)我们先按照字符级全都切分,就得到了初始的词汇字典
然后我们开始寻找出现频率最多的pair(字符对)
可以看到语料中频率最高的pair为st,此时就可以将这个pair合成一个字符,加入词汇字典里,然后继续。
然后发现未处理的pair中e 和 st这对pair是频率是最高的,此时将est加入到词汇字典中
然后发现未处理的pair中b 和 e这对pair是频率是最高的,此时将be加入到词汇字典中
然后会发现剩下的pair频率没有超过一次了,那么可以结束运算了。
此时就得到了我们的subword字典了。
此时我们的pair表就完成了,当进入一个新词时,例如best,我们就通过pair table进行字词的划分,从频率从高到低来进行划分。
首先best开始的时候分为b e s t四个字符
然后对着最右边的表,发现s和t可以合并为一个字符,此时就变为b e st
继续,发现e和st可以合并,此时就变为b est
继续,发现不能并了,就结束了
但是为了我们能够方便地还原初始词,我们可以在字词后面(除了最后一个之外)加入一些特定的字符
例如我们加入@@
那么最后best就划分为b@@ est两部分了。
那么我们得到了字词字典,就弄个embedding来表示字词,词语切分为字词后就能够被表示出来,实验证明这种方法,即能够很好的限制字典大小,也能保证性能正常。
参考
https://www.bilibili.com/video/BV1714y1W7d5/?spm_id_from=333.337.search-card.all.click&vd_source=f57738ab6bbbbd5fe07aae2e1fa1280f