八、MT-DNN
神经网络的监督学习需要大量的标记数据,通常这些标记数据难以获取。为了解决这个困难,有两种策略:
预训练学习
Pretrain Learning
:通过从大量未标记的数据中学习representation
,从而缓解目标任务的标记数据太少的问题。多任务学习
Multi-Task Learning
:通过从多个任务及其标记数据中学习representation
,从而缓解目标任务的标记数据太少的问题。另外,多任务学习可以通过针对这些任务的训练而缓解模型对具体某个任务的过拟合,从而产生了一种正则化效果。这使得模型学到的
representation
通用性更强,可以跨任务使用。预训练学习和多任务学习二者可以互补,二者结合可以进一步改善文本的
representation
。Multi-Task Deep Neural Network:MT-DNN
就是结合了BERT
预训练和多任务学习这两种策略来学习更泛化的representation
。
MT-DNN
采用了BERT
的基本结构,底层网络在所有任务之间共享,顶层结构根据不同任务而不同。- 与
BERT
相似,MT-DNN
可以通过微调来匹配特定的任务。 - 与
BERT
不同,MT-DNN
除了预训练模型之外,还通过多任务学习来学习representation
。
- 与
MT-DNN
结合了四种不同类型的Nature Language Understanding:NLU
任务,包括:单句分类、成对文本分类、文本相似性和相关性排序.单句分类:给定一个简单句子,模型预测它属于哪个类别。如:
CoLA
任务:模型预测英文句子是否语法上合理。SST-2
任务:模型预测电影评论中提取的句子的情感是积极的还是消极的。
成对文本分类:给定一对句子,模型预测它们的关系。如 :
RTE
和MNLI
语言推理任务:模型预测一个句子相对于另一个句子是蕴含关系entailment
、矛盾关系contradiction
还是中性关系neutral
。QQP
和MRPC
任务:模型预测一对句子在语义上是否等价。
文本相似性打分:给定一对句子,模型预测它们的相似性得分。这是一个回归任务。如:
STS-B
任务。相关性排序:给定一个
query
和一组候选答案,模型根据相关性对候选答案排序。如:QNLI
任务:模型评估一个句子是否包含给定问题的正确答案。虽然它在
GLUE
中被视为二分类任务,但是在这里我们将其视作成对的排序任务。实验结果表明:这种方式比二分类的准确性有显著提高。
8.1 模型
8.1.1 模型结构
MT-DNN
模型的结构如下图所示。输入
X
:一个token
序列。模型首先学习该序列的embedding
表示得到 ;然后通过Transformer encoder
提取特征得到 。Lexicon Encoder
:学习一个token
序列的embedding
表示,每个token
学到一个embedding
向量。每个
embedding
向量由word embeding
、segment embedding
、position embedding
三部分组成。token
序列的第一个token
始终是[CLS]
标记。如果
X
是由一对句子组成,则通过[SEP]
标记分隔。如:其中 为 第一个句子第 个
token
, 为 第二个句子第 个token
。
Transformer Encoder
:通过多层双向Transformer Encoder
来抽取特征。网络高层:包含单句分类、成对文本相似性、成对文本分类、相关性排序等具体任务相关的网络结构。
与
BERT
不同,MT-DNN
学习representation
不仅通过预训练来学习,也通过多任务训练来学习。
8.1.2 task-specific 结构
单句分类任务的网络结构:假设 是 中对应于
[CLS]
的向量,它被视为输入X
的表达。输入X
为类别 的概率为:其中 为该任务对应的参数。
成对文本相似性任务的网络结构:假设 是 中对应于
[CLS]
的向量,它可以视作句子对X1,X2
的表达。则该文本对的相似性为:其中 为该体任务对应的参数。
成对文本分类任务的网络结构:
在自然语言推理
NLI
任务中,前提premise
由 个token
组成 ,猜想hypothesis
由n
个token
组成 。任务目标是预测premise
和hypothesis
之间的关系。论文采用随机回答网络
stochastic answer network:SAN
的实现方式:首先将
premise
中的token
的表示向量(从 中获取)拼接成矩阵 ,,以及将
hypothesis
的表示向量(从 中获取)拼接成矩阵 。其中 表示
permise
中的token
的reprensentation
, 表示hypothesis
中的token
的representation
。初始化 维状态向量 :
其中 维向量 为待学习的参数。
迭代 次, 为超参数。迭代过程 :
根据状态 和 计算 :
其中 为待学习的参数。
计算状态 :
在每个迭代步,输出类别概率:
其中
[]
表示向量的拼接。
使用 步的平均概率输出作为预测概率:
相关性排序任务的网络结构:假设 是 中对应于
[CLS]
的向量,它可以视作问答对Q,[SEP],A
的表达。则相关性得分为:给定一个
question
,对它的所有候选answer
计算相关性得分,并按照得分排序即可得到排序结果。
8.1.3 模型训练
MT-DNN
的训练过程分为两步:预训练和多任务训练。预训练步骤参考
BERT
:lexicon encoder
和Transformer encoder
的参数通过两个无监督学习任务MLM
和NSP
来训练。多任务训练步骤:使用
mini-batch SGD
优化算法来训练。在每个
epoch
选择 大小的mini-batch
,然后根据任务 相关的目标函数来更新参数。这种方式等价于优化所有任务的目标函数。对于分类任务,使用交叉熵的目标函数:
其中 是一个示性函数,如果样本 属于类别 则函数值为 1;否则函数值为 0 。
对于文本相似性任务,使用平方误差损失函数:
对于相关性排序任务,给定问题
questioin
,假设候选回答集合 包含一个正确答案 和其它 个错误答案,则优化目标为:其中:
score
为相关性得分: , 为待学习的参数, 为Q [SEP] A
的表达。- 为一个超参数。
MT-DNN
训练算法:随机初始化模型参数
预训练共享层(如
lexicon encoder
和Transformer encoder
)设定最大
epoch
数准备 个任务的数据:对每个任务的数据集 ,将其拆分成
mini-batch
的形式epoch
迭代::合并所有数据集:
随机混洗数据集
对 中每个
mini-batch
(代表了某个任务 的mini-batch
):- 根据具体任务的损失函数计算
- 计算梯度:
- 更新模型:
8.2 实验
8.2.1 数据集和参数
数据集:
General Language Understanding Evaluation : GLUE
数据集:是 9 项自然语言理解任务的集合,包括问题回答、情感分析、文本相似性、文本蕴含等任务。其目的是为了评估模型的泛化能力和鲁棒性。Stanford Natural Language Inference:SLI
数据集:包含 57 万人工标注的句子对,每对句子包含一个前提premise
和假设hypotheses
。前提
premise
是从Flickr30
语料库提取,而假设hypotheses
是人工标注的。该数据集是自然语言推理领域使用最广泛的数据集。SciTail
数据集:从Science Question Answering:SciQ
数据集中抽取的,评估给定前提premise
是否包含给定假设hypotheses
。与前面提到的其它蕴含
entailment
数据集不同,SciTail
的假设是从科学问题中创建的,而相应的答案候选和前提是从大型预料库中检索的相关网络句子。前提和假设的词汇相似性非常高,因此该任务很有挑战。
预处理:所有训练文本都使用
wordpieces
词干化,同时每个序列的长度不超过 512 个token
。参数:
- 采用
Adamax
优化器,学习率5e-5
。同时使用线性学习率衰减,以及参数为 0.1 的warm-up
机制。 - 使用参数为 0.1 的
dropout
,但是对于MNLI
参数为 0.3, 对CoLA
参数为 0.05 。 - 最大
epoch
为 5,batch size
为 32 。 - 为了放置梯度爆炸,执行梯度裁剪策略,使得梯度范数不超过 1 。
- 采用
8.2.2 实验结果
MT-DNN
在GLUE
任务上的结果如下图所示,所有结果来自 2019年 2 月 25号的leaderboard : https://gluebenchmark.com/leaderboard
。每个数据集下面的数字给出了训练集的样本数。
粗体给出了最好的结果
SOA
;蓝色粗体给出了超越人类的结果。模型说明:
模型:由
BERT
作者提供的模型。本论文在每个GLUE
任务上使用对应的任务标记数据来微调该模型。MT-DNN
:使用 来初始化共享层,然后基于所有的GLUE
任务使用多任务学习来继续训练模型,最后基于每个GLUE
任务的标记数据来微调模型。MT-DNN no fine tune
:使用 来初始化共享层,然后基于所有的GLUE
任务使用多任务学习来继续训练模型,但是最后并没有使用基于每个GLUE
任务的标记数据来微调模型。该任务是为了评估:既然
MT-DNN
在多任务学习阶段已经使用了对应任务的标记数据,那么继续微调模型有没有必要?
实验结论:
由于
MT-DNN
使用BERT LARGE
来初始化模型,因此它超越BERT LARGE
的原因就归因于多任务学习来继续优化共享层的参数。多任务学习对于非常小规模的
in-domain
训练数据集很有效。实验结果表明:训练数据集越小,MT-DNN
超越BERT
得越多。除了在
CoLA
任务上,在其它任务上MT-DNN no fine tune
仍然战胜了BERT LARGE
。具体原因是
CoLA
任务非常具有挑战性,因为它的in-domain
数据集非常小,且其任务定义和数据集内容与GLUE
其它任务都不相同。这就使得它很难从其它任务中获取可迁移的知识。因此,多任务学习对于该任务表现处欠拟合,所以微调阶段对于该任务的性能提升是非常有必要的。
MT-DNN
的优势不仅在于其泛化能力强,还在于其构建模型的灵活性: 允许我们整合在具体任务研究的一些先进模型和方法,有效地利用了已有的研究成果。两个典型的例子是使用
SAN
问答模型来处理成对文本分类,使用pairwise ranking
损失函数来处理QNLI
任务。有鉴于此,论文提出了ST-DNN
变种模型。ST-DNN
表示Signle-Task DNN
,它使用MT-DNN
相同的模型结构,但是它的共享层是预训练BERT
而没有多任务学习。在预训练
ST-DNN
之后,使用GLUE
每个具体任务的数据来微调ST-DNN
。此时ST-DNN
与BERT
的唯一区别在于模型的顶层输出不同:ST-DNN
是具体于每个任务的输出网络。ST-DNN
的实验结果如下图所示。实验结论:- 在
MNLI,QQP
等任务上,ST-DNN
战胜了BERT
,这表明SAN
问答模型的泛化能力更强。 - 在
QNLI
任务上,ST-DNN
使用pairwise ranking loss
,而BERT
使用交叉熵。结果显示ST-DNN
仍然战胜了BERT
。
- 在
构建真实应用系统最重要的标准之一是:快速适应新的任务和领域。因为新的领域和任务中获取标记数据非常昂贵,所以通常在新领域和任务中我们只有非常小的训练数据集,甚至没有训练数据。
根据该评价准则,论文在
SNLI
和SciTail
上执行领域自适应实验从而评估BERT
和MT-DNN
快速适应新任务和领域的能力。对每个任务 (SNLI/SciTail
) 构建一个任务具体的模型,然后通过该任务的训练集来训练模型、验证集来评估模型。BERT
和MT-DNN
都是基于BERT BASE
架构,所有结果都是随机初始化5次并对这些模型的预测结果取平均。采用这些任务的默认训练集、验证集、测试集,但是对训练集随机采样
0.1%、1%、10%、100%
,从而验证小训练集的效果。实验结果如下图所示。结果表明:训练数据越少,
MT-DNN
战胜BERT
得越多。因此MT-DNN
相比BERT
,其领域适配domain adaption
的能力越强。将
MT-DNN
在SNLI
和SciTail
的所有训练数据上训练,结果和之前的SOA
模型比较,比较结果如下(早期的 SOA 用*
表明)。结果表明:
MT-DNN Large
取得了最新得SOA
。