站在BERT肩膀上的NLP新秀们(PART III)
最近看到了很多大佬关于BERT的思考,总结得非常棒,这里直接贴上传送门:
- NLP的bert和后bert时代的挑战
- 后Bert时代NLP相关进展
- Bert时代的创新:Bert应用模式比较及其它
- Bert时代的创新(应用篇):Bert在NLP各领域的应用进展
在上两篇中(PART I & PART II)我们详细介绍了几个效果不错的基于BERT的模型,这一篇我们来看看预训练模型中的增强训练(多任务学习/数据增强)以及BERT多模态应用。
- MT-DNN from Microsoft
- MT-DNN-2 from Microsoft
- GPT-2 from OpenAI
- VideoBERT from Google
1、Multi-Task Deep Neural Networks for Natural Language Understanding(Microsoft/2019)
数据决定了上限,而模型和算法只是无限逼近这个上限
在NLP领域中也是如此,有监督的模型效果好,但是有标签的数据获取却非常难。一种有效的解决方案是采用多任务学习(Multi Task Learning MLT),一方面可以在数据标注较少的情况下利用其它相似任务的标注数据,另一方面可以降低针对特定任务的过拟合,起到正则化l的作用。
本文的模型正是采用了多任务学习+无监督语言训练,在11项NLP任务中有9项超过了原始的BERT模型。模型框架如下,思路也很简单,主要就是在BERT之上叠加了四大类学习任务。下面我们来具体看看
Shared layers
模型的下层就是直接套用了BERT,没有变化,共享参数的训练也是采用MLM+NSP
Task specific layers
文中采用了四大类预训练任务来进行多任务学习,基本都涵盖了GLUE里的NLU任务
- Single Sentence Classification:采用[CLS]作为句子编码表示,激活函数为softmax,损失函数为交叉熵
Pr(c∣X)=softmax(WSST⊤⋅x)P_{r}(c | X)=\operatorname{softmax}\left(\mathbf{W}_{S S T}^{\top} \cdot \mathbf{x}\right)Pr(c∣X)=softmax(WSST⊤⋅x) −∑c1(X,c)log(Pr(c∣X))-\sum_{c} \mathbb{1}(X, c) \log \left(P_{r}(c | X)\right)−c∑1(X,c)log(Pr(c∣X)) - Pairwise Text Similarity:采用[CLS]作为句子编码表示,激活函数为sigmoid,损失函数为MSE
sim(X1,X2)=g(wSTS⊤⋅x)\operatorname{sim}\left(X_{1}, X_{2}\right)=g\left(\mathbf{w}_{S T S}^{\top} \cdot \mathbf{x}\right) sim(X1,X2)=g(wSTS⊤⋅x)(y−sim(X1,X2))2\left(y-\operatorname{sim}\left(X_{1}, X_{2}\right)\right)^{2}(y−sim(X1,X2))2 - Pairwise Text Classification:分别将第一句和第二句的词编码拼接,参考SAN模型迭代推理结果,损失函数为交叉熵
Prk=softmax(W3⊤[sk;xk;∣sk−xk∣;sk⋅xk])P_{r}^{k}=\operatorname{softmax}\left(\mathbf{W}_{3}^{\top}\left[\mathbf{s}^{k} ; \mathbf{x}^{k} ;\left|\mathbf{s}^{k}-\mathbf{x}^{k}\right| ; \mathbf{s}^{k} \cdot \mathbf{x}^{k}\right]\right)Prk=softmax(W3⊤[sk;xk;∣∣sk−xk∣∣;sk⋅xk])Pr=avg([Pr0,Pr1,…,PrK−1])P_{r}=\operatorname{avg}\left(\left[P_{r}^{0}, P_{r}^{1}, \ldots, P_{r}^{K-1}\right]\right)Pr=avg([Pr0,Pr1,…,PrK−1])−∑c1(X,c)log(Pr(c∣X))-\sum_{c} \mathbb{1}(X, c) \log \left(P_{r}(c | X)\right)−c∑1(X,c)log(Pr(c∣X)) - Pairwise Ranking:采用[CLS]作为句子编码表示,激活函数为sigmoid
Rel(Q,A)=g(wQNLI⊤⋅x)\operatorname{Rel}(Q, A)=g\left(\mathbf{w}_{Q N L I}^{\top} \cdot \mathbf{x}\right)Rel(Q,A)=g(wQNLI⊤⋅x) −∑(Q,A+)Pr(A+∣Q)-\sum_{\left(Q, A^{+}\right)} P_{r}\left(A^{+} | Q\right)−(Q,A+)∑Pr(A+∣Q) Pr(A+∣Q)=exp(γRel(Q,A+))∑A′∈Aexp(γRel(Q,A′))P_{r}\left(A^{+} | Q\right)=\frac{\exp \left(\gamma \operatorname{Rel}\left(Q, A^{+}\right)\right)}{\sum_{A^{\prime} \in \mathcal{A}} \exp \left(\gamma \operatorname{Rel}\left(Q, A^{\prime}\right)\right)}Pr(A+∣Q)=∑A′∈Aexp(γRel(Q,A′))exp(γRel(Q,A+))
Training Procedure
训练过程大致可以分为两步: BERT预训练和多任务学习
对于多任务学习作者首先将不同任务制作成mini-batch后扔到一起成为数据集D,然后将D打乱后依次取出一个batch的数据btb_{t}bt进行训练,注意这里btb_{t}bt包含了各种任务的训练数据,这种MTL的方式也叫做联合训练(相对于交替训练),可以有效避免模型偏向某个任务。
reference
- NLP的bert和后bert时代的挑战
- GLUE基准新突破:微软多任务模型首次超越自然语言人类基准
- 官方源码
2、Improving Multi-Task Deep Neural Networks via Knowledge Distillation for Natural Language Understanding(Microsoft/2019)
MT-DNN-ensemble在GLUE上突破了各项亮眼的成绩:GLUE基准新突破:微软多任务模型首次超越自然语言人类基准
reference
- Robust Language Representation Learning via Multi-task Knowledge Distillation
- 官方源码
3、Language Models are Unsupervised Multitask Learners(OpenAI/2019)
Due to our concerns about malicious applications of the technology, we are not releasing the trained model.
上面那句话就是引发“CloseAI风波”的罪魁祸首了,当时各种社交网站媒体的讨论可谓是舌剑唇枪、枪林弹雨、雨覆云翻、翻脸不认人啊。还好后面OpenAI说会一阶段一阶段慢慢开源更大的模型(目前官方release的是117M和345M的模型)
虽然官方没有放出最大模型的源码,但是有一个外国小哥好像已经完成了对GPT-2的复现
- GPT2, Counting Consciousness and the Curious Hacker
- github
预训练模型增强的另一方面是数据增强,GPT-2就是很好的一个实例。GPT-1是首先使用Transformer作为预训练模型的,在各项任务上的提升也都非常亮眼(图片来自张俊林老师)
我翻开历史一查,这历史没有年代,歪歪斜斜的每页上都写着 ‘Multitask Learners’ 几个字。我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着两个字是 ‘general LM’!”
-------鲁迅评GPT-2
相较于GPT-1,GPT-2大体的框架都没有变(单向Transformer+LM),主要是在以下几个方面进行了修改:
- 数据: 更大规模更高质量的数据,800万网页40GB的 WebText;
- 模型: 虽然Transformer没变,但是却更大了,从24层叠加到了48层(15亿参数)
- 训练方式:抛弃了有监督的fine-tune下游任务,只采用无监督语言模型训练直接应用下游任务。
- 其他细节:输入采用了BPE(在之前PART II中也有介绍);Layer norm放到了每个sub-block前并在最后一个self-attention block之后添加了额外一个LN层;残差层的参数初始化根据网络深度进行调节;扩大了词表/输入序列长度/批大小。
以上每一点修改都在强调GPT-2的 ‘general’(鲁迅老师说得对),作者认为一个强大的预训练模型可以不需要有监督数据去训练甚至不需要下游任务的微调即可直接使用。而无监督的语言模型自然是完成该任务的最好选择,只要预训练数据足够general,模型设计足够general,那么语言模型自然能学习到输入语料的所有信息,最后的结果必然是general的。
那么,既然GPT-2抛弃了之前针对特定任务的fine-tune模式,我们知道各项任务的目的不一样,仅仅凭借语言模型学习到的GPT-2又是如何来实现的呢?为了让模型意识到它是在完成什么任务,作者对不同的任务设置了不同的pattern:
- Reading Comprehension:
document
+history of associated conversation
+A:
- Summarization:
article
+TL;DR:
- Translation:类似于词向量的类比,
en sent = fr sent + target en sent
做条件生成 - Question Answering:同翻译类似
ok,咱们来看看模型的效果,这就非常有意思了。机器翻译和阅读理解,文中给出的分数BLEU 11.5/F1 55,这都比当时的SOTA(33.5/89)要低很多,读到这你可能要黑人问号了,但是别急,看GPT-2气呼呼的解释:“他们那些SOTA的状元都是刷五年高考三年模拟的,我平时都不学习看看杂书也能上二本啊!” 再次黑人问号…
emmmmmm, 仔细想想倒也没错,术业有专攻嘛。okay,看了那么多七七八八的书,那你讲故事一定很厉害吧?GPT-2反手就是一篇高考英语大作文,怕了怕了…
reference
- Better Language Models and Their Implications
- 效果惊人的GPT 2.0模型:它告诉了我们什么
- NLP的bert和后bert时代的挑战
- 如何评价openAI GPT-2?
- 官方源码
4、VideoBERT: A Joint Model for Video and Language Representation Learning
最后这篇,只能说成功看饿我了,还没看过的建议大家搭配炸鸡啤酒食用效果更佳。
- 文本数据: 来自Youtube提供的ASR工具,自动语音书别获得文本,作为BERT输入的上半部分;
- 视频数据: 用vector quantization (VQ)获取视频特征。具体是首先利用预训练S3D网络得到1024维的特征向量,接着通过层次聚类将这些特征进行分类(类似于tokenize),然后将每一个segment作为BERT输入的下半部分;
- text-only: mask后进行预测的训练方式
- video-only: 同上
- video-text: linguistic-visual 对齐任务,使用[CLS]标记去预测文本与视频是否是对应的,分类问题。
reference
- BERT fintune 的艺术
小结
- MT-DNN结合了语言模型和多任务学习,相当于BERT+MTL, 最近在GLUE一项任务中直接将SOTA提高了24%。其实本身BERT也是包含了多任务学习的思想,这里MT-DNN的话是把任务扩大,使得模型涉及的广度增大。另外加入知识蒸馏可以有效降低模型复杂度,使用和部署更方便;
- GPT-2则走向了另外一个方向,生成模型。不跟你们这些刷五三的学霸抢独木桥,我选择下海,更适用于基于语言模型的文本生成任务;
- VideoBERT是比较有意思的研究,以BERT为base,将视频信息通过预训练融入到模型中去,未来可以考虑将更多的信息通过更多不同的任务进行融合(所谓多模态),构建一个通用AI模型。
以上~
2019.06.13
站在BERT肩膀上的NLP新秀们(PART III)相关推荐
- 站在BERT肩膀上的NLP新秀们:XLMs、MASS和UNILM
作者丨高开远 学校丨上海交通大学硕士生 研究方向丨自然语言处理 写在前面 在前一篇站在 BERT 肩膀上的 NLP 新秀们(PART I)[1]介绍了两个都叫 ERNIE 的模型,思路也挺相似的,都是 ...
- 站在BERT肩膀上的NLP新秀们(PART II)
写在前面 在前一篇站在BERT肩膀上的NLP新秀们(PART I)介绍了两个都叫ERNIE的模型,非常有趣思路也挺相似的,都是给bert模型增加外部知识信息,使其能更好地"感知"真 ...
- 站在BERT肩膀上的NLP新秀们(PART I)
去年NLP领域最火的莫过于BERT了,得益于数据规模和计算力的提升,BERT在大会规模语料上预训练(Masked Language Model + Next Sentence Prediction)之 ...
- 腾讯:站在“山寨”肩膀上的巨人
最近几年"山寨"的话题一直没断过,山寨肯德基.山寨耐克.山寨手机等,而腾讯也当仁不让成了"山寨大王".顾名思义"山寨"一直被冠以假的成分,尤 ...
- 站在CNN肩膀上的巨大腾飞,Swin Transformer:实现对各类SOTA的降维打击
作者丨陀飞轮@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/360513527 导读 本文介绍了一种称为Swin Transformer的新型transformer, ...
- 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma
这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...
- EOS原力孤矢:站在EOS肩膀上,看齐BTC
FBEC2018 由深圳市互联网文化市场协会指导,游戏陀螺.陀螺财经联合主办的2018未来商业生态链接大会暨第三届金陀螺奖颁奖盛典(简称"FBEC2018")将于2018年12月在 ...
- 站在巨人肩膀上优雅地分蛋糕
作者:不多爸初稿.巨人姐修订 编辑:PRS布道者 普通人并非不懂保护图片版权 我是一名软件开发工程师,和很多人一样,开了一个微信订阅号「不多不多」记录一下自己的思考与生活,目前已经发布 60 多篇文章 ...
- 站在巨人肩膀上的意思就是拒绝重复造轮子,分享12个常见的js插件
1.copy-to-clipboard (剪贴板) github/zenorocha/clipboard.js 2.FileSaver (文件另存为) github/eligrey/FileSaver ...
最新文章
- Solaris10 for x86网卡替换配置
- 户籍改革更进一步!我国将推动户籍准入年限同城化累计互认
- cin,getline用法和不同
- 机器人J中WPR_机器人经颅磁刺激(Robotized TMS)技术知多少?
- 【python】python的环境搭建
- Music Workshop (Unix Name: clavio)
- 多角度解读优酷土豆合并的深意
- dbnetlib不存在或拒绝访问_idou老师教你学Istio 16:如何用 Istio 实现微服务间的访问控制...
- 电商平台的系统组织架构
- 济南市全国计算机二级,济南市2020年3月计算机二级报名时间|网上报名入口【12月20日9:00开通】...
- 关于tomcat启动报错Error deploying web application directory [C:\......]出现的其中一种问题解决:
- 如何用PS制作一寸照片
- 2011天涯上令人心酸至极的微瞬间
- 视频+公众号是未来微信生态的一种新的运营方式!
- 这些有趣的Python库一定会亮到你
- 大量查询中通快运在途信息,并分析中转延误
- Java版KTV预定管理系统源码
- 多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介)
- exsist什么意思_exist什么意思_通达信EXIST什么意思
- pdf批量下载工具制作_使用asyncio异步高速下载pdf
热门文章
- SAP License:SAP中的日期
- 数字风控全流程 实操课程V2.0 第三期
- PyQt5 GUI Programming With Python 3.6 (一)
- c#数据类型的值传递和引用传递--基础拾遗
- ubuntu重置root密码
- 用Java动态代理实现AOP
- zoj 3629 Treasure Hunt IV
- Assembly中Load, LoadFrom, LoadFile以及AppDomain, Activator类中相应函数的区别
- 一个 ARK工具: XueTr类似ICEWORLD
- 半监督主动式机器学习的技术优势:银行金融风控场景分析