背景
机构:微软亚洲研究院 NLP 组与 SDRG(微软雷德蒙德语音对话研究组)
作者:Xiaodong Liu、Pengcheng He
发布地方:arxiv
面向任务:自然语言理解任务(NLU)的学习表示
论文地址:https://arxiv.org/abs/1901.11504
论文代码:https://github.com/namisan/mt-dnn
更多代码版本参见:https://paperswithcode.com/paper/multi-task-deep-neural-networks-for-natural
摘要
本文提出了一种多任务深度神经网络 (MT-DNN) ,用于跨多种自然语言理解任务的学习表示。MT-DNN 一方面使用了大量跨任务数据,另一方面得益于正则化效果,这种效果使得学习到的表示具有更强的泛化能力,有助于使用到新的任务和领域。MT-DNN是基于Liu et al.(2015)工作基础上,融合扩展引入了预先训练的双向转换语言模型BERT。MT-DNN在十个**自然语言理解(NLU)**任务上取得了state-of-the-art的成果,包括SNLI、SciTail和GLUE任务中的八个。MT-DNN将GLUE baseline推至82.2 % (提升了1.8 % )。我们还使用SNLI和Sc-iTail数据集证明,与预先训练的BERT表示相比,MT-DNN学习到的表示在特定领域内标签数据较少的情况下展现更好的领域适应性。相关的代码和预先训练好的模型将公之于众(截止目前,2019年5月14号,官方尚未公布。)
介绍
学习文本(eg.词和句子)的向量空间表示,是许多自然语言理解(NLU)任务的基础。两种流行的方法是多任务学习和语言模型的预训练。本文试图通过提出一种新的多任务深度神经网络(MT-DNN)来综合两种方法的优点。
多任务学习( MTL )的灵感来自于人的学习活动。在人类的学习活动中,人们经常应用从以前的任务中学到的知识来帮助学习新的任务。例如,在学习滑冰这件事情上,一个知道如何滑雪的人比什么都不知道的人容易。同样,**联合学习多个(相关)**任务也很有用,这样在一个任务中学习到的知识有益于其他任务。近年来,越来越多的研究人员使用深层神经网络( DNNs )来对MTL任务进行表征学习。 有两个原因。首先,DNNs的监督学习需要大量特定任务的标记数据,这些数据并不总是可用的。MTL提供了一种有效的方法来利用来自许多相关任务的监督数据。第二,多任务学习通过正则化效应,能够减轻对特定任务的过度拟合,使得所学习的表示在任务间更加通用。
与多任务学习不同,语言模型预训练已经被证明对学习通用语言表示很有用,因为这样可以轻易利用大量的无监督文本,比如elmo,gpt和bert。BERT基于多层双向transformer,并在纯文本上进行训练,训练目标是屏蔽单词预测和下句预测任务。为了将预训练好的模型应用于特定的自然语言任务,经常需要使用特定任务的训练数据,通过附加的特定任务层来微调每个任务的模型。BERT可以通过这种方式进行微调,为一系列NLU任务创建最好的模型,例如问答和自然语言推理。
本文认为MTL和预训练语言模型是互补的技术,可以结合起来提高文本表征的学习效果,进而提高各种自然语言处理任务性能的表现。为此,本文扩展了MT-DNN,将BERT作为共享的文本编码层。如图1所示,底层(即文本编码层)在所有任务中共享,而顶层是特定于任务的,结合了不同类型的自然语言理解任务,例如单句分类、成对文本分类、文本相似性和相关性排序。与BERT模型相似,MT-DNN的训练分为两个阶段:预训练和微调。与BERT不同,MT-DNN在微调阶段,在模型架构中用多个特定于任务的层进行MTL。
在GLUE(General Language Understanding Evaluation,通用语言理解评估)基准的9个自然语言理解(NLU)任务中,我们用MT-DNN有刷新了其中8个任务的新记录。将GLUE基准分数提高到82.2 %,比BERT提高了1.8 %。多补充几句,GLUE是九种(英语)语言理解任务的集合,包括文本蕴涵、情感分析和语法判断等。其设计目的是覆盖足够大的NLP领域,以使得只有开发出足够通用的工具,才能在这一基准上表现良好;这样也有助于解决未来可能新遇到的语言理解问题。但是随着模型的不断升级,现在已经对 GLUE 指标进行更新,升级为SuperGLUE。保留了两项 GLUE 任务,另外又加入了其它五项新任务。回到正题,此外本文还将MT-DNN扩展应用到SNLI(Bowman et al.,2015a) 和SciTail((Khot et al., 2018)任务。与预训练的BERT表示相比,MT-DNN学习到的表示对领域内的标注数据量要求更少,因为它有更好的领域适应性。MT-DNN模型在SNLI上的准确率为91.1 %,在SciTail上的准确率为94.1 %,分别比之前最先进的性能高出1.0 %和5.8 %。即使只有0.1%或1.0%的原始训练数据, MT-DNN在SNLI和SciTail数据集上的性能也相当好,远远优于许多现有模型。这些都足以说明MT-DNN结合多任务学习和预训练后其泛化能力得到了大大的提升。
任务
MT-DNN联合处理四种类型NLU任务:单句分类,成对文本(pairwise text)分类,文本相似度打分,相关性排序。举例如下:
单句分类:CoLA任务是预测英语句子是否合乎语法,SST-2任务预测电影评论是正向还是负向。
文本相似度:这是一个回归任务。对于给定的句子对,模型计算二者之间的相似度。在GLUE中只有STS-B这个任务是处理文本相似度。
成对文本分类(文本蕴含):对于给定的句子对,推理两个句子之间的关系。RET和MNLI是语言推理任务,推理句子之间是否存在蕴含关系、矛盾的关系或者中立关系。QQP和MRPC是预测句子是否语义等价。
相关性排序:给定一个问题和一系列候选答案,模型根据问题对所有候选答案进行排序。QNLI是斯坦福问答数据集的一个版本,任务是预测候选答案中是否包含对问题的正确答案。尽管这是一个二分类任务,但我们依旧把它当作排序任务,因为模型重排了候选答案,将正确答案排在更前。
模型介绍
MT-DNN的体系结构如上图1所示。底层在所有任务中共享,顶层代表特定任务的输出。输入X是一个单词序列(一个句子或一对组合在一起的句子对),首先在
l
1
l_1
l1中表示为一系列embedding向量,每个单词对应一个向量。然后输入到特征提取器transformer,transformer通过self-attention在
l
2
l2
l2中生成一系列上下文表示(语境嵌入序列)。
图 1:表征学习 MT-DNN 模型的架构。下面的网络层在所有任务中都共享,上面的两层是针对特定任务。输入 X(一句话或句子对)首先表征为一个序列的嵌入向量,在
l
1
l_1
l1 中每个词对应一个向量。然后 Transformer 编码器捕捉每个单词的语境信息并在
l
2
l_2
l2 中生成共享的语境嵌入向量。最后,针对每个任务,特定任务层生成特定任务的表征,而后是分类、相似性打分、关联排序等必需的操作。
下面对各个层进行详细阐述。
Lexicon Encoder(
l
1
l_1
l1):
其输入
X
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
X=\{x_1,x_2,...,x_m\}
X={x1,x2,...,xm}是长度为m的tokens。第一个字符永远是[CLS]字符,如果有两个句子,那就中间加一个[SEP]字符
lexicon encoder是一个词向量层,将输入
X
X
X映射为一系列的嵌入向量。这里还有position encoding和segment encodig这些操作。
Transformer Encoder (
l
2
l_2
l2):
利用transformer把输入的向量表示
X
X
X映射为变成上下文表示
C
C
C。其在不同任务间共享参数。bert要通过预训练学习表示方法,然后通过微调将其用于其他任务,而MT-DNN使用多任务目标学习其表示。
Single-Sentence Classification Output:
假设[CLS]字符在
l
2
l_2
l2层中的上下文嵌入结果是
x
\rm{x}
x,其可以视为输入句子
X
X
X的语义表征。以SST-2任务为例,句子
X
X
X被分为
c
c
c类的概率如下(通过一个softmax做出决策):
其中 W S S T W_{SST} WSST是特定任务的参数矩阵。
Text Similarity Output:
同上,只是最后将通过softmax层改为sigmoid门,来表示0到1的评分。
Pairwise Text Classification Output: 以自然语言推理(NLI)任务为例。此类任务数据定义前题句 P = ( p 1 , p 2 . . . p m ) P=(p_1,p_2...p_m) P=(p1,p2...pm),一个假设句 H = ( h 1 , h 2 , . . . h n ) H=(h_1,h_2,...h_n) H=(h1,h2,...hn),长度分别为m和n,目的是找出两句之间的关系 R R R。输出模块的设计仿照SAN(stochastic answer networ)的答案模块。SAN的答案模块使用多轮推理,而不是给定输入直接预测,它保持一个状态,然后迭代地更新它的预测。
SAN的答案模块具体介绍如下。把前提句P的transformer输出拼接起来作为working memory,对于假设句H的操作同样。分别得到
M
P
∈
R
d
×
m
M^P∈R^{d \times m}
MP∈Rd×m 和
M
h
∈
R
d
×
n
M^h∈R^{d \times n}
Mh∈Rd×n。 然后在memeory上执行K轮的推理来输出预测,k是一个超参数。初始状态
s
0
s^0
s0是
M
h
M^h
Mh的加权和:
s
0
=
Σ
j
α
j
M
j
h
s^0=\Sigma_jα_jM^h_j
s0=ΣjαjMjh,其中加权和的权重
α
\alpha
α由H的自注意力评分加softmax得到。在第k次迭代,其状态更新为
s
k
=
G
R
U
(
s
k
−
1
,
x
k
)
s^k=GRU(s^{k-1},x^k)
sk=GRU(sk−1,xk) 。其中
x
k
x^k
xk从前一步状态
s
k
−
1
s^{k-1}
sk−1和memory
M
p
M^p
Mp中计算:
x
k
=
Σ
j
β
j
M
j
p
x^k=\Sigma_jβ_jM^p_j
xk=ΣjβjMjp ,
β
j
=
s
o
f
t
m
a
x
(
s
k
−
1
W
2
T
M
p
)
β_j=softmax(s^{k-1}W^T_2M^p)
βj=softmax(sk−1W2TMp)
在每个推理迭代过程,用一个单层线性分类器会用做预测。
最后将K次的输出结果平均:
训练过程中我们在上面的平均操作前应用随机预测drop(stochastic prediction dropout)。在解码阶段,平均所有输出,来提高鲁棒性。
Relevance Ranking Output:
也是用[CLS]字符的embedding作为问句和候选答案对
(
Q
,
A
)
(Q,A)
(Q,A)的语义表征。通过一个softmax计算相关性得分,然后对各个候选答案的得分重排,大的更有关。
3.1 训练过程
MT-DNN 的训练程序包含两个阶段:预训练和多任务微调。预训练阶段遵循 BERT 模型的方式。lexicon encoder和Transformer encoder参数的学习是通过两个无监督预测任务:掩码语言建模(masked language modeling)和下一句预测(next sentence pre-
diction)。
在多任务微调阶段,我们使用基于minibatch的随机梯度下降(SGD)来学习模型参数(也就是,所有共享层和任务特定层的参数),算法流程如下图所示。每个epoch,选择一个mini-batch
b
t
b_t
bt(在9个GLUE任务中),再对特定任务
k
k
k进行模型参数的更新。这近似地优化所有多任务的和。
对个每个任务的数据集,进行mini-batch,得到
D
t
D_t
Dt。
b
t
b_t
bt是任务t的一个mini-batch,再用该数据计算分类、回归和重排任务的损失值,之后再统一计算梯度下降,更新模型参数。
对于分类任务(单句子分类或者文本蕴含分类):
定义交叉熵损失函数:
其中l(x,c)是二分类结果(0或者1)。其他相关工作参考上述的方程1和方程4。
对于文本相似度(回归)任务:
例如STS-B任务,每个句子对相似程度被标注为一个真实值
y
y
y,使用均方误差作为目标函数:
其中
S
i
m
Sim
Sim函数在方程2中定义过了。
对于相关性排序:
以QNLI任务为例,给定问句
Q
Q
Q,候选答案
A
A
A(其中包含一个正确答案
A
+
A^+
A+,其他剩余答案为错误答案,即负样本)。目标函数是在给定问句的前提下,最小化正样本的对数似然的负数:
其中
R
e
l
Rel
Rel的定义参见方程5。
γ
\gamma
γ是留存数据的调节因子,在本文的实验中该参数设置为1。
实验
我们在 GLUE、斯坦福自然语言推理(SNLI)和 SciTail 三个流行的自然语言理解基准上评估了 MT-DNN。对比MT-DNN 与现有的包括 BERT 在内的 SOTA 模型,在 GLUE 上证明了 MTL 进行模型微调的有效性,在 SNLI 和 SciTail 上证明了 MTL 的领域适应性。
实验细节
在MT-DNN中采用的是PyTorch版本的BERT,优化器选用的是AdaMax,学习率设置为 5 e − 5 5e-5 5e−5,batch size设置为32,epoch数最大设置为5。
实验结果
test数据集
MT-DNN在GLUE中除了WNLI之外的全部任务都超越了已有的系统,获得SOTA结果,并将该benchmark推到了新高度:82.2%,超出了$BERT_{large}
1.8
1.8%。由于
1.8BERT_{large}$在共享层被使用,MT-DNN性能的提升是来自于在微调阶段使用MTL。多任务学习(MTL)对于领域内数据集较少的情况,特别有用。从上表可以看出,对于相同任务,MT-DNN在少数据量时候取得超出BERT的指标。例如对于NLI任务:RTE任务和MNLI任务,再比如对于释义任务:MRPC和QQP。在test数据集上的结果:
dev数据集
MT-DNN优越的性能也得益于其灵活的模型框架,其框架的灵活性使得其可以方便地引入特定任务的模型框架和训练方法。这些框架和训练方法都已经被研究人员在单一特定任务上做了充分研究,能够被有效地利用起来。文本在此,以2个例子进一步说明。其一是SAN的回答模块被引入到文本蕴含分类任务中,另一个是在QNLI任务(在GLUE中是一个二分类任务)中引入pairwise ranking loss。为了充分证明上述2个模型设计的选择有助于提升MT-DNN,本文设计了不同版本的MT-DNN,并在dev set上进行对比。在dev 数据集上的结果如下:
这里的MT-DNN中的共享层采用的是
B
E
R
T
b
a
s
e
BERT_{base}
BERTbase。对比表3可以看出,在dev set上的结果与表2是一致的。MT-DNN优于BERT。ST-DNN是Single-Task DNN,在模型框架上与MT-DNN保持一致。所不同的是,ST-DNN不在所有任务上所微调,而仅仅在本领域数据集上做微调。如此,就形成了多个ST-DNNs。对于文本蕴含(pairwise text classification )分类任务,ST-DNNs和BERT的唯一区别在于特定任务的输出模块。在MNLI, QQP和MRPC任务上ST-DNNs超越BERT,这也证明了SAN回答模块的有效性。【RTE任务逊色于BERT,这是为什么???】
在QNLI上也对比了ST-DNN和BERT,ST-DNN使用pairwise ranking loss进行微调,BERT将QNLI视为一个二分类任务,并在交叉熵损失函数上进行微调。结果ST-DNN远远超过BERT。
新领域的泛化结果
构建实用系统的一个重要标准就是对新任务和领域的快速适应力。收集标注数据是非常昂贵的,我们经常只能有很小的数据集甚至可能没有用以训练的数据集。
为了评估新领域的适用性,基于2个NLI任务数据集:SNLI和SciTail,进行说明。具体操作步骤如下:
- 1、微调MT-DNN在八个GLUE任务上(除了WNLI)。
- 2、已经已经训练过的MT-DNN,分别训练SNLI和SciTail数据集。
- 3、用各自的任务中的test set对模型评估
对于预训练的BERT也是采用相同的处理流程,针对这2个任务分别构建模型。
MT-DNN和BERT在不同训练样本量下的表现:
上图2对应的具体指标:
从上图可以看出,在训练数据少的情况下,MT-DNN一直比BERT优越。