首先带大家梳理一下BPE词表中的一些知识。
一般在训练BPE词表时会对语料进行预分词,预分词后的文本可以更好地区分出前后缀。Tokenizer中常见的预分词器介绍如下:
Whitespace即连续字符分词器,采用正则表达式“\w+|[^\w\s]+
”进行原文匹配。通过表达式可以看出分词规则如下:将连续的字符(汉字、字母和数字)作为一个子词,也将连续的非字符和非空格(通常为标点等符号)作为一个子词来切分,空格(‘\s’)则会直接过滤;
其和1类似,也是按照空格和标点等符号做切分,只是遇到连续标点时会拆分为独立单元,例如三个点的省略号‘…’,按照1的方法切分后是‘…’,按该分词器切分则为三个‘.’;
按照标点切分,但不考虑空格,也不过滤空格,标点处理方法同2一样独立拆分;
按照指定字符切分,函数包含delimiter参数,接受单个字符(不指定会报错),分词时以该字符为切分依据,并过滤字符使其不在分词结果中出现;
只按空格切分,其它标点等字符都会合并;
函数输入一个正则表达式(由Regex类初始化,该类输入模式串),分词时按该表达式切分,函数包含‘behavior’参数,用于指定匹配出文本的处理方法,有切分、移除、与前驱词合并、与后继词合并四种选择(注:切分、前后合并模式下子词之间的匹配失败部分也作为一个子词,然后执行不同操作,移除模式下只移除匹配成功的子词);
该分词器本身不具备分词功能,而是接受由分词器组成的列表类型,执行时会使用分词器表依次处理,每个分词器接受上一个分词器的输出,并将切分结果传给下一个分词器。列表中的分词器可以是上述所有分词器类型。