transformers的tokenizer总结

1.BPE(byte-pair encoding)

根据字母搭配出现的频率组成词根。

初始vocabulary:["b", "g", "h", "n", "p", "s", "u"]

假设训练数据中有10个hug,5个pug,12个pun,4个bun和5个hugs:

("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)

那么此时tokenizer会将其分割成:

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

然后计数字母搭配出现的频率,比如"hu"=10+5=15次,"ug"=10+5+5=20次,"un"=12+4=16次

每次选取频率最高的搭配进行更新vocabulary,那么此时vocabulary:["b", "g", "h", "n", "p", "s", "u","ug"]

再次对语料进行分割,结果为:

("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)

再次计数,再次更新,此时vocabulary:["b", "g", "h", "n", "p", "s", "u","ug","un"]

第三次对语料进行分割,结果为:

("hug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("hug" "s", 5)

以此不断更新,直到遇到<unk>(unkonwn,没见过的字母/字符),而vocabulary size和更新次数都是tokenizer训练时的超参数。例如,GPT 的词汇量为 40478,因为它们有 478 个基本字符,并在 40000 次合并后选择停止训练。

2.Byte-level BPE

BPE是基于char的维度进行的,但这样对于某些语言来说,vocabulary会很大。BBPE将文本的UTF-8编码中的一个字节(每个字节有8位的2进制编码,2的8次方=256位。UTF-8可以保证任何语言通用)不同的编码作为vocabulary的base。再加上一些处理标点符号的附加规则。 GPT-2 的词汇量为 50257,对应于 256 字节的基本标记、特殊的文本结束标记以及通过 50,000 次合并学习的符号。

3.WordPiece

与BPE类似,但是与 BPE 相比,WordPiece 不会选择最常见的符号对,而是选择在添加到词汇表后使训练数据的可能性最大化(似然概率最大)的符号对:

P(tx) = freq(x) 就是单词 x 出现的频率,选择x和y合并为z之后句子似然值的变化为freq(z)/(freq(x)*freq(y)),取似然值变化最大的进行合并。

4.Unigram

初始vocabulary的size很大,然后以最大似然的log值作为Loss,选取删掉后对Loss影响最小的约10~20%个symbols从vocabulary中删除

5.SentencePiece

使用“_"代替空格,用于BPE或者Unigram

参考https://colab.research.google.com/github/huggingface/notebooks/blob/main/transformers_doc/en/tokenizer_summary.ipynb#scrollTo=NZqxbedEtCI9

NLP 中的Tokenizer:BPE、BBPE、WordPiece、UniLM 理论 - 知乎

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值