Subwords Tokenizer方法介绍: BPE, Byte-level BPE, WordPiece, Unigram, SentencePiece

  • 参考于transformers tokenizer的文档

    目录

    • Byte-Pair Encoding (BPE) [^1]
      • 出发点
      • 原理
      • 应用
    • Byte-level BPE[^2]
      • 出发点
      • 原理
      • 应用
    • WordPiece[^3]
      • 原理
      • 应用
    • Unigram [^4]
      • 原理
    • SentencePiece [^5]
      • 出发点
      • 原理
      • 应用
    • References

Byte-Pair Encoding (BPE) 1

出发点

  • 把每一个单词加入词表的话导致词表过大,因此可以把word切分成subwords加入词典。

原理

  • 先进行pre-tokenization, 即通过空格得到单词,并且统计词频。
  • 创建一个base vocabulary包含所有单词中的符号(字符)。之后迭代方式地学习相邻两个符号结合的规则(所以叫做Byte-pair,字节),每次结合选择频数最高的一对。
  • 具体参考文章开头的链接。

应用

  • GPT: 词表大小:40,478(478个 base characters + 40,000个结合的字符)

Byte-level BPE2

出发点

  • BPE中包含所有单词中的符号的base vocabulary可能很大,比如unicode characters包含了不同语言的字符,是很大的。

原理

  • 使用字节(bytes)而不是字符作为base vocabulary。一个字节是8位,一共256种可能,这样base vocabulary的大小就减小到了256。
  • 之后的迭代操作和BPE一样,要学习相邻符号的结合规则。

应用

  • GPT2: 此表大小:50257 (256 base vocabulary + 1个end-of-text token + 50000 迭代/merge次数)

WordPiece3

原理

  • 关键思想:先将所有字符(characters)作为base vocabulary,然后逐步学习结合字符的规则。相较于BPE每次结合符号选取频数最高的一对,WordPiece选取能够最大化训练数据集似然的一对。
  • 例如:字符“u”和“g”,他们融合成一对“ug”之后的数据集的似然除以“u”和“g”分开时候的似然的比值相较于其他字符结合来说最大。
  • Intuition: 相较于BPE,WordPiece验证融合某一对符号是值得的

应用

  • BERT,DistlBERT,Electra。

Unigram 4

原理

  • 相较于BPE从字符级别构建base vocabulary,Unigram相反,它先用pre-tokenization(比如空格切分)处理之后的所有词作为初始化的base vacobulary,然后逐步地裁剪符号,从而得到一个较小的词典。
  • 在每一步,Unigram都定义个训练集合的loss(如log-likelihood),然后它计算去除一个符号(字典中的一个token)之后整体loss的下降,最终把10%或者20%的那些loss下降最多的符号从词典中去除。直到词典大小符合预期。
    ###应用
  • 对于transformers的库来说,没有模型直接使用Unigram,但是它一般会和SentencePiece一起使用

SentencePiece 5

出发点

  • 上述Tokenization方法都存在的一个问题:都假设输入的文本的pre-tokenization都利用空格来切分字词。但是并不是所有的语言都使用空格来切分字词。

原理

  • 解决思路就是把整个输入作为输入流,即包含了空格
  • 之后再使用BPE或者Unigram的算法来构建词典。
  • 所以SentencePiece使用的时候Tokenize的结果包含空格的信息,用_来表示。
from transformers import XLNetTokenizer
tokenizer = XLNetTokenizer.from_pretrained("xlnet-base-cased")
tokenizer.tokenize("Don't you love  Transformers? We sure do.")
输出:["▁Don", "'", "t", "▁you", "▁love", "▁", "", "▁", "Transform", "ers", "?", "▁We", "▁sure", "▁do", "."]

应用

  • 在transformers库中的所有用SentencePiece的模型中都结合使用了Unigram。
  • 包括 ALBERT,XLNet,Marian,T5。

References


  1. https://arxiv.org/abs/1508.07909 ↩︎

  2. https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf ↩︎

  3. https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/37842.pdf ↩︎

  4. https://arxiv.org/pdf/1804.10959.pdf ↩︎

  5. https://arxiv.org/pdf/1808.06226.pdf ↩︎

你可能感兴趣的:(Transformers,人工智能,深度学习,transformer)