BERT 中的tokenizer和wordpiece和bpe(byte pair encoding)分词算法

文章目录

  • 一、BERT 中的tokenizer和wordpiece和bpe(byte pair encoding)分词算法
    • 1.1 tokenizer 分词器
      • wordpiece(暂且称为 词块)
        • 对于英文词语
        • 对于中文
    • 1.2 谷歌中文预训练语言模型,vocab.txt词包(词典)
    • 1.3 bpe(byte pair encoding,字节对编码)分词算法
  • 资料
    • 理解bpe
      • bpe分词算法的原理以及在机器翻译中的应用
      • 机器翻译 bpe——bytes-pair-encoding以及开源项目subword-nmt快速入门
    • 理解tokenize
      • 深度学习实战(4)如何向BERT词汇表中添加token,新增特殊占位符

一、BERT 中的tokenizer和wordpiece和bpe(byte pair encoding)分词算法

1.1 tokenizer 分词器

wordpiece(暂且称为 词块)

对于英文词语

bert的tokenizer使用wordpiece将词语分成一块一块的subword

例如:比如"loved",“loving”,"loves"这三个单词。其实本身的语义都是“爱”的意思,但是如果我们以单词为单位,那它们就算不一样的词,在英语中不同后缀的词非常的多,就会使得词表变的很大,训练速度变慢,训练的效果也不是太好。

BPE算法通过训练,能够把上面的3个单词拆分成"lov",“ed”,“ing”,"es"几部分,这样可以把词的本身的意思和时态分开,有效的减少了词表的数量

参考资料:https://www.cnblogs.com/huangyc/p/10223075.html

对于中文

一个字就是一个最小单元,无法再进行拆分

中文的处理方法一般分为分词和分字,理论上分词效果更换,语义划分的细致;分字简单、效率高,词表小,常用词仅有3000左右

1.2 谷歌中文预训练语言模型,vocab.txt词包(词典)

"##"表示连接符

例1:比如pupperteer词典中没有,分词后是puppet、##eer

例2:epc词典中没有,分词后是ep##c

##后的词,表示是通过分词产生的。

中文无需分词,故##后接汉字的在词包中不生效

1.3 bpe(byte pair encoding,字节对编码)分词算法

参考资料:https://blog.csdn.net/gao_summer_cola/article/details/90262076

bpe(byte pair encoding),是一种根据字节对进行编码的算法。主要目的是为了数据压缩,算法描述为字符串里频率最常见的一对字符被一个没有在这个字符中出现的字符代替的层层迭代过程。该算法在论文:https://arxiv.org/abs/1508.07909 Neural Machine Translation of Rare Words with Subword Units详细介绍

原文作者讲的很详细!

资料

理解bpe

bpe分词算法的原理以及在机器翻译中的应用

https://blog.csdn.net/gao_summer_cola/article/details/90262076

机器翻译 bpe——bytes-pair-encoding以及开源项目subword-nmt快速入门

https://blog.csdn.net/jmh1996/article/details/89286898?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

理解tokenize

深度学习实战(4)如何向BERT词汇表中添加token,新增特殊占位符

https://blog.csdn.net/icestorm_rain/article/details/108540053

你可能感兴趣的:(Machine,Learning,bert,nlp)