当前位置:网站首页>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
边栏推荐
- In depth understanding of the construction of Intelligent Recommendation System
- Elasticsearch database | elasticsearch-7.5.0 application construction
- How do the general bottom buried points do?
- 连肝三个通宵,JVM77道高频面试题详细分析,就这?
- 人工智能学什么课程?它将替代人类工作?
- Introduction to Google software testing
- Real time data synchronization scheme based on Flink SQL CDC
- 7.2.2 compressing static resources through gzipresourceresolver
- 一时技痒,撸了个动态线程池,源码放Github了
- Asp.Net Core學習筆記:入門篇
猜你喜欢
被老程式設計師壓榨怎麼辦?我不想辭職
恕我直言,我也是才知道ElasticSearch条件更新是这么玩的
Elasticsearch database | elasticsearch-7.5.0 application construction
Vue 3 responsive Foundation
How do the general bottom buried points do?
Python自动化测试学习哪些知识?
Troubleshooting and summary of JVM Metaspace memory overflow
制造和新的自动化技术是什么?
Swagger 3.0 天天刷屏,真的香嗎?
Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things
随机推荐
Computer TCP / IP interview 10 even asked, how many can you withstand?
Existence judgment in structured data
DTU连接经常遇到的问题有哪些
【快速因數分解】Pollard's Rho 演算法
TensorFlow2.0 问世,Pytorch还能否撼动老大哥地位?
Want to do read-write separation, give you some small experience
中国提出的AI方法影响越来越大,天大等从大量文献中挖掘AI发展规律
不吹不黑,跨平臺框架AspNetCore開發實踐雜談
使用NLP和ML来提取和构造Web数据
解決pl/sql developer中資料庫插入資料亂碼問題
Asp.Net Core learning notes: Introduction
你的财务报告该换个高级的套路了——财务分析驾驶舱
怎么理解Python迭代器与生成器?
iptables基礎原理和使用簡介
Swagger 3.0 天天刷屏,真的香嗎?
幽默:黑客式编程其实类似机器学习!
(1)ASP.NET Core3.1 Ocelot介紹
Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things
安装Anaconda3 后,怎样使用 Python 2.7?
給萌新HTML5 入門指南(二)