BPE
基于词构建词表过于庞大,基于字符构建过于小,本文采取两者的中间,基于子词构建词表
什么是 BPE ?
- BPE 是一种从语料库中构建 subword 级别词汇表的方法,相比较 word 级别的词汇表构建算法,它也是一种压缩算法。BPE 每一步都将最常见的一对_相邻数据单位_替换为该数据中没有出现过的一个_新单位_,反复迭代直到满足停止条件
- 1) 初始化符号词表:把所有的字符加入到符号词表中,对所有单词的末尾加入特殊标记,如‘’,翻译后恢复原始标记
- 统计相邻元素:迭代的对所有符号进行统计,找出次数最多的(A,B),用 AB 代替,示例是 (‘e’, ‘s’)
- 3) 合并出现次数最多的元素:每次合并,都会产生一个新的符号,代表 n-gram 字符
BPE 的预料编码过程 ?
- 1)首先将词表中所有的子词按照长度从大到小进行排序
- 2)对于每一个给定的单词,我们遍历排序好的词表,寻找词表中的子词是否是该单词的子字符串。如果正好 **「匹配」**,则输出当前子词,并对单词剩下的字符串继续匹配
- 3)如果遍历完词表,单词中仍然有子字符串没有被匹配,那我们将其替换为一个特殊的子词,比如
<unk>
- 对于给定的单词
mountain</w>
,在以下词表的分词结果为:[moun
,tain</w>
]1
2
3
4
5
6
7( “errrr</w>”,
“tain</w>”,
“moun”,
“est</w>”,
“high”,
“the</w>”,
“a</w>”)
BPE 的预料解码过程 ?
- 将所有的输出子词拼在一起,直到碰到结尾为
<\w>
,如模型输出["moun", "tain</w>", "high", "the</w>"]
,其解码结果为["mountain</w>", "highthe</w>"]
参考: