站在BERT肩膀上的NLP新秀们(PART III)
作者:高开远
学校:上海交通大学
研究方向:自然语言处理
写在前面
最近看到了很多大佬关于BERT的思考,总结得非常棒,这里直接贴上传送门:
后Bert时代NLP相关进展
Bert时代的创新:Bert应用模式比较及其它
在上两篇中(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,损失函数为交叉熵
Pairwise Text Similarity:采用[CLS]作为句子编码表示,激活函数为sigmoid,损失函数为MSE
Pairwise Text Classification:分别将第一句和第二句的词编码拼接,参考SAN模型迭代推理结果,损失函数为交叉熵
Pairwise Ranking:采用[CLS]作为句子编码表示,激活函数为sigmoid
Training Procedure
训练过程大致可以分为两步: BERT预训练和多任务学习
对于多任务学习作者首先将不同任务制作成mini-batch后扔到一起成为数据集D,然后将D打乱后依次取出一个batch的数据bt进行训练,注意这里bt包含了各种任务的训练数据,这种MTL的方式也叫做联合训练(相对于交替训练),可以有效避免模型偏向某个任务。
reference
NLP的bert和后bert时代的挑战
GLUE基准新突破:微软多任务模型首次超越自然语言人类基准
官方源码
2、Improving Multi-Task Deep Neural Networks via Knowledge Distillation for Natural Language Understanding(Microsoft/2019)
虽然ensemble模型可以有效提高模型表现,但是由于集成学习的规模十分之巨大,导致运算和部署的成本非常高。显然MT-DNN的作者也考虑到了这个问题,于是提出了改进版:MT-DNN-2,采用知识蒸馏的方式,将庞大复杂的teacher模型所学习到的“知识”给蒸馏出来转移到一个更小的student模型,并保证不会有明显的损失。
本文采用的base model就是MT-DNN,其具体结构以训练方式都在上一节介绍过。下面我们关注知识蒸馏部分。
对不同的任务(有标注数据的),训练多个神经网络为一个集成学习模型,即teacher模型。其中每个神经网络为之前的vanilla MT-DNN,共享层参数是在GLUE数据集上预训练得到的,然后在特定的任务上进行微调。
对每个task中的训练样本,teacher model会生成一个soft target集合。文中举了文本分类的任务,每个神经网络对每个类别的prediction通过softmax得到,让我们先想想普通训练的损失函数是什么样的 (hard target)
当正确的target已知时,联合soft target和hard target进行训练可以显著提升性能
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
最后这篇,只能说成功看饿我了,还没看过的建议大家搭配炸鸡啤酒食用效果更佳。
我们在生活中通过感知得到的信息是多源的(视觉,听觉,味觉等),基于此,一个成熟的机器学习模型也应该是趋近与人类的这种多源学习的----多模态机器学习(Multimodal Machine Learning)。目前比较成熟的视觉和语义之间的多模态学习,比如看图说话等等。作者在本文中就提出VideoBERT,利用BERT去联合学习视频与语言之间的信息。
文本数据:来自Youtube提供的ASR工具,自动语音书别获得文本,作为BERT输入的上半部分;
视频数据:用vector quantization (VQ)获取视频特征。具体是首先利用预训练S3D网络得到1024维的特征向量,接着通过层次聚类将这些特征进行分类(类似于tokenize),然后将每一个segment作为BERT输入的下半部分;
整体框架如下所示,注意几个特殊标记:[CLS] 代表文本和视频的全局信息,后续任务中用到; [>] 代表文本和视频输入的区分;[SEP] 在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模型。
相关文章: