BERT 中wordPiece的原理
原文连接
1.为什么使用wordPiece?
在BERT中,做数据预处理的时候,使用了wordPiece,所谓的wordPiece其实是把word再进一步的拆分,拆分为piece,得到更细粒度。而为什么使用wordPiece 而不直接使用word?比如如"loved","loving","loves"这三个单词。其实本身的语义都是“爱”的意思,但是如果我们以单词为单位,那它们就算作是不一样的词,在英语中不同后缀的词非常的多,就会使得词表变的很大,训练速度变慢,训练的效果也不是太好。
2.wordPiece的实现算法
WordPiece的一种主要的实现方式叫做BPE(Byte-Pair Encoding)双字节编码。BPE的过程可以理解为把一个单词再拆分,使得词表会变得精简,并且寓意更加清晰。
BPE算法通过训练,能够把上面的"loved","loving","loves"3个单词拆分成"lov","ed","ing","es"几部分,这样可以把词的本身的意思和时态分开,有效的减少了词表的数量。
3.BPE算法的训练过程
BPE的大概训练过程:首先将词分成一个一个的字符,然后在词的范围内统计字符对出现的次数,每次将次数最多的字符对保存起来,直到循环次数结束。
原始词表如下:
{'l o w e r ': 2, 'n e w e s t ': 6, 'w i d e s t ': 3, 'l o w ': 5}
其中的key是词表的单词拆分层字母,再加代表结尾,value代表词出现的频率。
下面我们每一步在整张词表中找出频率最高相邻序列,并把它合并,依次循环。
原始词表 {'l o w e r </w>': 2, 'n e w e s t </w>': 6, 'w i d e s t </w>': 3, 'l o w </w>': 5}
出现最频繁的序列 ('s', 't') 9
合并最频繁的序列后的词表 {'n e w e st </w>': 6, 'l o w e r </w>': 2, 'w i d e st </w>': 3, 'l o w </w>': 5}
出现最频繁的序列 ('e', 'st') 9
合并最频繁的序列后的词表 {'l o w e r </w>': 2, 'l o w </w>': 5, 'w i d est </w>': 3, 'n e w est </w>': 6}
出现最频繁的序列 ('est', '</w>') 9
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'l o w e r </w>': 2, 'n e w est</w>': 6, 'l o w </w>': 5}
出现最频繁的序列 ('l', 'o') 7
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'lo w e r </w>': 2, 'n e w est</w>': 6, 'lo w </w>': 5}
出现最频繁的序列 ('lo', 'w') 7
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'low e r </w>': 2, 'n e w est</w>': 6, 'low </w>': 5}
出现最频繁的序列 ('n', 'e') 6
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'low e r </w>': 2, 'ne w est</w>': 6, 'low </w>': 5}
出现最频繁的序列 ('w', 'est</w>') 6
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'low e r </w>': 2, 'ne west</w>': 6, 'low </w>': 5}
出现最频繁的序列 ('ne', 'west</w>') 6
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'low e r </w>': 2, 'newest</w>': 6, 'low </w>': 5}
出现最频繁的序列 ('low', '</w>') 5
合并最频繁的序列后的词表 {'w i d est</w>': 3, 'low e r </w>': 2, 'newest</w>': 6, 'low</w>': 5}
出现最频繁的序列 ('i', 'd') 3
合并最频繁的序列后的词表 {'w id est</w>': 3, 'newest</w>': 6, 'low</w>': 5, 'low e r </w>': 2}
这样我们通过BPE得到了更加合适的词表了,这个词表可能会出现一些不是单词的组合,但是这个本身是有意义的一种形式,加速NLP的学习,提升不同词之间的语义的区分度。
BERT 中wordPiece的原理相关推荐
- BERT中的词向量指南
2019-11-19 20:50:57 作者:Chris McCormick 编译:ronghuaiyang 导读 在本文中,我将深入研究谷歌的BERT生成的word embeddings,并向你展示 ...
- BERT中的黑暗秘密
2020-01-30 17:00:34 作者:Anna Rogers 编译:ronghuaiyang 导读 在finetune BERT的时候发生了什么? 这篇博客文章总结了我们EMNLP 2019年 ...
- bert中的sep_最强NLP模型BERT可视化学习
2018年是自然语言处理(Natural Language Processing, NLP)领域的转折点,一系列深度学习模型在智能问答及情感分类等NLP任务中均取得了最先进的成果.近期,谷歌提出了BE ...
- java final 实例_Java中final实现原理的深入分析(附示例)
本篇文章给大家带来的内容是关于Java中final实现原理的深入分析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. final在Java中是一个保留的关键字,可以声明成员变 ...
- 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理
1.一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务.阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使 ...
- FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...
- 【直播预告】计算机视觉中数据增强原理和实践
应广大粉丝要求,以后有三AI会多组织直播,分享更多实践的干货知识,下面预告一下下周六的知乎Live直播-计算机视觉中数据增强原理和实践. 1.直播基本信息 时间:2019年4月20日20:00开始. ...
- vue指令写在html中的原理,详解Vue中的MVVM原理和实现方法
对Vue中的MVVM原理解析和实现首先你对Vue需要有一定的了解,知道MVVM.这样才能更有助于你顺利的完成下面原理的阅读学习和编写下面由我阿巴阿巴的详细走一遍Vue中MVVM原理的实现,这篇文章大家 ...
- 产品工作中的金字塔原理
本文有PMCAFF 原创作者 咸鱼 原创发布于pmcaff.com 金字塔原理是国外一个慈祥的老太太(巴巴拉·明托)提出的一个方法论,主要是帮助我们清晰的思考.表达和写作的思维方式. 一. 什么是金字 ...
- 【转载】word2vec 中的数学原理详解
文章目录 一.前言 二.预备知识 三.背景知识 四.基于 Hierarchical Softmax 的模型 五.基于 Negative Sampling 的模型 六.若干源码细节 原文传送门: wor ...
最新文章
- 和 对比_家用保温杯小对比
- [转] 数学符号英文拼写及发音
- im2rec.py代码解读
- python控制台动画_Python真神奇,带你体验另类的“全自动编程”
- 后处理安装_Mastercam2017(自定义后处理选项)安装!
- JS弹出可拖动层,并蒙住页面
- SpringBoot→整合数据层、@Valid参数校验、事务propagation属性、动态SQL、AOP监控执行时间
- Selenium模拟浏览器常见操作及问题
- QuartusII-项目工程的功能仿真
- 个人--2015 关于管理的书
- 『开源项目』基于STM32的智能垃圾桶之语音播报
- SQL高级查询—实验报告
- TensorFlow Serving Architecture
- web自动化测试——QQ邮箱登录之Bussiness(login)登录操作
- 虚拟机使用USB硬件设备
- 微服务架构这马丁富勒的论文
- 学python还是计算机三级,考试无忧全国计算机等级考试python(python二级证书有用吗)...
- Jess的一些使用示例
- dedecms教程:采集教程
- python异或^ 移位运算符