Tokenizers: How machines read

Transformer (2017)和BERT (2018) 加速了NLP的发展。

在将预料送入模型前,我们需要对预料进行处理:
1.分词(Split the input into smaller chunks)
2.向量化(Represent the input as a vector)

在训练向量前,我们要先确定好分词的协议(tokenization policy).

Tokenizers: How machines read_第1张图片

1)需要有一个庞大的词库(vocabulary)
即使学习到了“cat”,但是模型还是辨认不出“cats”。没有将words分割到sub-words,所以会丢失“talk”vs“talks”vs“talked”和“talking”
2)组合词语
比如将“sun”和“flower”组合成“sunflower”,又比如“check-in”、“runner-up”、“New York”,这次词语分出的单词是无意义的。
3)缩略词
比如“LOL”,这些是“collections of words”还是“new words”
4)一些语言无法用空格分词
比如中文

按照字母(characters)而不是单词(words)来分词
Tokenizers: How machines read_第2张图片
按字符分词,可以克服按词语分词的缺点,但是仍然有它的问题:
1)缺乏含义
字符不像词语一样有含义
2)计算成本增加
比如如果一句话有7个单词,只需要分割成7个部分,但是如果每个单词有5个字符,按字符则需要分割成35部分。
3)Limits network choices
比如词性标注(Parts Of Speech (POS)),使用字符就很困难。

Tokenizers: How machines read_第3张图片

Subword Tokenization

character level and the word level的一个平衡的结果是subword-level tokenization。
比如“unfortunately”=“un”+“for”+“tun”+“ate”+“ly”

Subword tokenisation will break the text into chunks based on the word frequency. In practice what happens is that common words will be tokenized generally as whole words, e.g. “the”, “at”, “and”, etc., while rarer words will be broken into smaller chunks and can be used to create the rest of the words in the relevant dataset.

BPE(Byte Pair Encoding)

比如下面一句话:
“FloydHub is the fastest way to build, train and deploy deep learning models. Build deep learning models in the cloud. Train deep learning models.”
第一,如果按词语来分:
在每个词语后面
Tokenizers: How machines read_第4张图片

第二,按照字符来分
出现24次,表名有24个词语。
Tokenizers: How machines read_第5张图片

第三步,使用BPE来融合

1)获得词语的频次
2)获得字符的频次
3)Merge the most common byte pairing
4)Add this to the list of tokens and recalculate the frequency count for each token; this will change with each merging step
5)Rinse and repeat until you have reached your defined token limit or a set number of iterations

第一次迭代byte pair:
After one iteration our most frequent pairing is “d” and “e”. As a result we combined these to create our first subword token (which is not a single character) “de”.
Tokenizers: How machines read_第6张图片

Tokenizers: How machines read_第7张图片
第二次迭代byte pair:
Tokenizers: How machines read_第8张图片

我们增加了新的token,现在总共29个,所以两次迭代后我们其实是增加了token的数量,但是继续迭代,token的数量将会减少:
Tokenizers: How machines read_第9张图片

最后我们可以得到:
Tokenizers: How machines read_第10张图片

和当初我们使用单词来分的表格相同,但是这是通过我们BPE对字符处理而得来的,在巨大的词汇表中会很有作用。

未完,待续

参考:
https://blog.floydhub.com/tokenization-nlp/

你可能感兴趣的:(Python,python)