分词的目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如学习embedding或者作为高级模型的输入)使用。
在英文等语言中有着天然的空格分隔,
但是对于中文等语言可能需要额外的分词算法来进行处理(比如中文的jieba分词)
词粒度的缺点:
?缺点:
三种主流的Subword分词算法,分别是Byte Pair Encoding (BPE), WordPiece和Unigram Language Model。
核心思想:从一个基础小词表开始,通过不断合并最高频的连续token对来产生新的token。
具体做法:
????????????????输入:训练语料;词表大小V
????????????????1.准备基础词表:比如英文中26个字母加上各种符号;
????????????????2.基于基础词表将语料拆分为最小单元;
????????????????3.在语料上统计单词内相邻单元对的频率,选择频率最高的单元对进行合并;
????????????????4.重复第3步直到达到预先设定的subword词表大小或下一个最高频率为1;
????????????????输出:BPE算法得到的subword词表
优势与劣势:
????????????????优势:可以有效地平衡词汇表大小和编码步数(编码句子所需的token数量
???????????????????????????与词表大小和粒度有关)。
? ? ? ? ? ? ? ? ?劣势:基于贪婪和确定的符号替换,不能提供带概率的多个分词结果
? ? ? ? ? ? ? ? ? ? ? ? ? ?(这是相对于ULM而言的);decode的时候面临歧义问题。
核心思想:与BPE类似,也是从一个基础小词表出发,通过不断合并来产生最终的词表。主要的差别在于,BPE按频率来选择合并的token对,而wordpiece按token间的互信息来进行合并。注:互信息,在分词领域有时也被称为凝固度、内聚度,可以反映一个词内部的两个部分结合的紧密程度。
具体做法:? ? ? ? ? ?
????????除了合并对象的选择以外,基本同BPE;
????????输入:训练语料;词表大小V
????????1.准备基础词表:比如英文中26个字母加上各种符号;
????????2.基于基础词表将语料拆分为最小单元;
????????3.基于第2步数据训练语言模型,可以是unigram语言模型,通过极大似然进行估计即可;
????????4.从所有可能得token对中选择,选择合并后可以最大程度地增加训练数据概率的token对进行合并,具体的score=(freq_of_pair)/(freq_of_first_element×freq_of_second_element),当然你也可以取个log,就变成了互信息,选择最高的单元对进行合并;
????????5.重复第4步直到达到预先设定的subword词表大小或概率增量低于某一阈值;
????????输出:wordpiece算法得到的subword词表
优势与劣势:? ? ? ? ? ??
????????优势:可以较好的平衡词表大小和OOV问题;
????????劣势:可能会产生一些不太合理的子词或者说错误的切分;对拼写错误非常敏感;对前缀的支持不够好;
目前以Transfromer为基础自回归生成大致可以分为三种架构:
先来个结论:Decoder-Only相对于其它二者的优点,是条件信息和生成信息之间更加对齐,GAP更小,因此更容易训练。但我还是澄清我的观点,容易训练不代表最终表现会更好,因此,不代表其它架构没有研究的价值,甚至一定程度上还可以说它们潜力更大。