当前位置:网站首页>nlp模型-bert从入门到精通(一)
nlp模型-bert从入门到精通(一)
2020-11-06 01:22:00 【IT界的小小小学生】
在说内容之前先把,bert基本资料准备一下
基础资料准备
tensorflow版:点击传送门
pytorch版(注意这是一个第三方团队实现的):点击传送门
论文:点击传送门
从0到1了解模型的优缺点
从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。从之前AI2的 ELMo,到 OpenAI的fine-tune transformer,再到Google的这个BERT,全都是对预训练的语言模型的应用。
BERT这个模型与其它两个不同的是:
- 1、它在训练双向语言模型时以减小的概率把少量的词替成了Mask或者另一个随机的词。这个目的在于使模型被迫增加对上下文的记忆。至于概率值那就是平感觉来。
**解读:**任务1: Masked LM
从直觉上看,研究团队有理由相信,深度双向模型比left-to-right 模型或left-to-right and right-to-left模型的浅层连接更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词在多层上下文中间接地“see itself”。
为了训练一个深度双向表示(deep bidirectional representation),研究团队采用了一种简单的方法,即随机屏蔽(masking)部分输入token,然后只预测那些被屏蔽的token。论文将这个过程称为“masked LM”(MLM),尽管在文献中它经常被称为Cloze任务(Taylor, 1953)。
在这个例子中,与masked token对应的最终隐藏向量被输入到词汇表上的输出softmax中,就像在标准LM中一样。在团队所有实验中,随机地屏蔽了每个序列中15%的WordPiece token。与去噪的自动编码器(Vincent et al., 2008)相反,只预测masked words而不是重建整个输入。
虽然这确实能让团队获得双向预训练模型,但这种方法有两个缺点。首先,预训练和finetuning之间不匹配,因为在finetuning期间从未看到[MASK]token。为了解决这个问题,团队并不总是用实际的[MASK]token替换被“masked”的词汇。相反,训练数据生成器随机选择15%的token。例如在这个句子“my dog is hairy”中,它选择的token是“hairy”。然后,执行以下过程:
数据生成器将执行以下操作,而不是始终用[MASK]替换所选单词:
80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK]
10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple
10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy. 这样做的目的是将表示偏向于实际观察到的单词。
Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入token的分布式上下文表示。此外,因为随机替换只发生在所有token的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。
使用MLM的第二个缺点是每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。团队证明MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。
- 2、增加了一个预测下一句的loss。从这一点来看做的比较新颖。
解读:
任务2:下一句预测
许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,这并没有通过语言建模直接获得。
在为了训练一个理解句子的模型关系,预先训练一个二进制化的下一句测任务,这一任务可以从任何单语语料库中生成。具体地说,当选择句子A和B作为预训练样本时,B有50%的可能是A的下一个句子,也有50%的可能是来自语料库的随机句子。例如:
Input = [CLS] the man went to [MASK] store [SEP]
he bought a gallon [MASK] milk [SEP]
Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP]
penguin [MASK] are flight ##less birds [SEP]
Label = NotNext
团队完全随机地选择了NotNext语句,最终的预训练模型在此任务上实现了97%-98%的准确率。
BERT模型具有以下两个特点:
第一,是这个模型非常的深,12层,并不宽(wide),中间层只有1024,而之前的Transformer模型中间层有2048。这似乎又印证了计算机图像处理的一个观点——深而窄 比 浅而宽 的模型更好。
第二,MLM(Masked Language Model),同时利用左侧和右侧的词语,这个在ELMo上已经出现了,绝对不是原创。其次,对于Mask(遮挡)在语言模型上的应用,已经被Ziang Xie提出了(我很有幸的也参与到了这篇论文中):[1703.02573] Data Noising as Smoothing in Neural Network Language Models。这也是篇巨星云集的论文:Sida Wang,Jiwei Li(香侬科技的创始人兼CEO兼史上发文最多的NLP学者),Andrew Ng,Dan Jurafsky都是Coauthor。但很可惜的是他们没有关注到这篇论文。用这篇论文的方法去做Masking,相信BRET的能力说不定还会有提升。
模型的输入

BERT输入表示。输入嵌入是token embeddings, segmentation embeddings 和position embeddings 的总和
具体如下:
(1)使用WordPiece嵌入(Wu et al., 2016)和30,000个token的词汇表。用##表示分词。
(2)使用学习的positional embeddings,支持的序列长度最多为512个token。
每个序列的第一个token始终是特殊分类嵌入([CLS])。对应于该token的最终隐藏状态(即,Transformer的输出)被用作分类任务的聚合序列表示。对于非分类任务,将忽略此向量。
(3)句子对被打包成一个序列。以两种方式区分句子。首先,用特殊标记([SEP])将它们分开。其次,添加一个learned sentence A嵌入到第一个句子的每个token中,一个sentence B嵌入到第二个句子的每个token中。
(4)对于单个句子输入,只使用 sentence A嵌入。
参考资料:
1.论文解读方面:
NLP必读:十分钟读懂谷歌BERT模型
https://zhuanlan.zhihu.com/p/51413773
论文解读:BERT模型及fine-tuning
https://zhuanlan.zhihu.com/p/46833276
2.原理方面解读
https://zhuanlan.zhihu.com/p/68295881
https://zhuanlan.zhihu.com/p/49271699
http://www.52nlp.cn/tag/tensorflow-bert
版权声明
本文为[IT界的小小小学生]所创,转载请带上原文链接,感谢
https://vip01.blog.csdn.net/article/details/100732077
边栏推荐
- Want to do read-write separation, give you some small experience
- Vue 3 responsive Foundation
- Listening to silent words: hand in hand teaching you sign language recognition with modelarts
- WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
- 03_ Detailed explanation and test of installation and configuration of Ubuntu Samba
- 01 . Go语言的SSH远程终端及WebSocket
- 条码生成软件如何隐藏部分条码文字
- 接口压力测试:Siege压测安装、使用和说明
- 【QT】 QThread部分原始碼淺析
- C++和C++程序员快要被市场淘汰了
猜你喜欢
随机推荐
Introduction to Google software testing
遞迴思想的巧妙理解
Using Es5 to realize the class of ES6
读取、创建和运行多个文件的3个Python技巧
Azure Data Factory(三)整合 Azure Devops 實現CI/CD
Menu permission control configuration of hub plug-in for azure Devops extension
【快速因數分解】Pollard's Rho 演算法
如何将数据变成资产?吸引数据科学家
6.8 multipartresolver file upload parser (in-depth analysis of SSM and project practice)
如何对Pandas DataFrame进行自定义排序
制造和新的自动化技术是什么?
直播预告 | 微服务架构学习系列直播第三期
C language 100 question set 004 - statistics of the number of people of all ages
Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
hadoop 命令总结
Kitty中的动态线程池支持Nacos,Apollo多配置中心了
Sort the array in ascending order according to the frequency
如何在Windows Server 2012及更高版本中將域控制器降級
使用NLP和ML来提取和构造Web数据
How do the general bottom buried points do?





