Subword
简介
在自然语言处理(NLP)中词表是其中的基本要素,词表是分词的基础,而分词是自然语言处理最基础的组件之一。词表的精度影响自然语言的处理的准确性。
构造词表的传统方法是基于统计学的,先对训练集中的句子进行分词,然后再统计并选出频数最高的前N个词组成词表。
出于计算效率等因素的考量,通常情况词表不能涵盖训练集中所有的词汇。
基于词表的训练(word-level)存在以下的问题:
- 在英语等表音文字中,同一个单词有多种形态,例如"look"衍生出来的词汇"looks","looking","looked"具有相近的意思,但是在词表中这些词会被当作不同的词处理,既增加了训练冗余,这些单词的语义也不能正确关联。即使在中文中,也存在这种词汇变形的问题。
- 低频词/稀疏词在模型训练过程中无法得到充分训练,还有部分词汇在词表中缺失而引发OOV(Out Of Vocabulary)问题。
解决OOV问题的一种思路是用字符来表达词表(character-level),但单词被拆分成字符后,既丢失了词的语义信息,又使得模型输入变长,模型训练更加复杂难以收敛。
word-level模型会导致OOV,而character-level模型粒度又太细,就产生了subword-level的处理方式。
subword将单词分割为更小单元,这些单元通常可以在其他词汇中复用,未知词汇能以subword组合的形式表示出来,也能提升词典的表达能力。
实现
Subword的实现通常用BPE,WordPiece,Unigram Language Model等三种。
Byte Pair Encoding
Byte Pair Encoding简称BPE,属于压缩算法中一种,其主要思想就是将经常出现的byte pair用一个新的byte来代替,例如假设 ('A', ’B‘)经常顺序出现,则用一个新的标志'AB'来代替它们。
WordPiece
wordpiece思路基本与Byte Pair Encoding类似,唯一的不同就是在进行合并tokens对的时候不是使用max frequency,而是使用概率来确定合并哪两个tokens对,取score最大的tokens对进行合并,这么做也很直观,类似于词袋模型中的tfidf。
Unigram Language Model
这是一种基于语言模型的tokenization方式,不同于BPE或者WordPiece,该方法不是从基础字符开始然后通过一定的规则进行合并,这种方法通过一个很大的词典开始,然后渐进的缩减词典规模。