自然语言理解支持了包括文本蕴含、问答、语义相似评估、文本分类在内的多种任务。尽管大规模未标注的文本训练集是充足的,但这些特殊领域的有标注的数据是缺乏的,导致一些领域的任务没有办法充分训练。我们证明了这些任务可以通过在大规模未标注文本数据集上进行生成式的pre-train,然后再对每个任务进行单独的fine-tune来取得较大的性能提升。与之前工作不同的是,我们在fine-tuning阶段利用任务感知的输入transformation来达到在对模型结构改变很少的前提下也能进行有效迁移。我们在大量的benchmark上证明了模型在NLU任务中的有效性。我们的任务无偏的模型打赢了为每个任务特别设计和训练的模型,在9/12个任务中都取得了对SOTA的大幅度超越。例如在常识推理任务中我们取得了8.9%的提升,在问答上提升了5.7%,在文本蕴含上提升了1.5%。
Framework
我们的训练过程分为两个阶段,第一阶段是构建一个大语言模型,在大规模文本上进行训练,然后是一个fine-tuning阶段,我们用有标注的数据来调整模型适应单个任务。
无监督pre-training
对于一个无监督token集
U
=
{
u
1
,
.
.
.
,
u
n
}
U = \{u_1, ..., u_n\}
U={u1,...,un},我们使用语言模型的标准目标函数,也就是最大化以下似然函数:
L
1
(
U
)
=
∑
i
l
o
g
P
(
u
i
∣
u
i
−
k
,
.
.
.
,
u
i
−
1
;
Θ
)
L_1(U) = \sum_i logP(u_i|u_{i-k}, ..., u_{i-1}; \Theta)
L1(U)=i∑logP(ui∣ui−k,...,ui−1;Θ)
其中
k
k
k是上下文窗口的大小,条件概率
P
P
P用一个神经网络来建模,网络的参数用SGD来训练。
在我们的誓言中,我们用一个多层transformer decoder作为我们的模型。模型对输入token进行一个多层self-attention操作,然后接position-wise的前馈网络层来输出目标token的分布:
h
0
=
U
W
e
+
W
p
h_0 = UW_e + W_p
h0=UWe+Wp
h
l
=
t
r
a
n
s
f
o
r
m
e
r
_
b
l
o
c
k
(
h
l
−
1
)
h_l = transformer\_block(h_{l-1})
hl=transformer_block(hl−1)
P
(
u
)
=
s
o
f
t
m
a
x
(
h
n
W
e
T
)
P(u) = softmax(h_nW_e^T)
P(u)=softmax(hnWeT)
其中
U
=
(
u
i
−
k
,
.
.
.
,
u
i
−
1
)
U = (u_{i-k}, ..., u_{i-1})
U=(ui−k,...,ui−1)是token的context vector,
W
e
W_e
We是token embedding矩阵,
W
p
W_p
Wp是position embedding矩阵。
有监督fine-tuning
在pre-training之后,我们利用特定的任务来进行监督学习调整参数。我们假设一个有标签的数据集
C
C
C,每条样本包含一个输入token序列
x
1
,
.
.
.
,
x
m
x^1, ..., x^m
x1,...,xm和一个标签
y
y
y,输入过我们pre-train的模型来得到最后一个transformer block的输出
h
l
m
h_l^m
hlm,然后喂给一个新加的线性输出层来预测
y
y
y
P
(
y
∣
x
1
,
.
.
.
,
x
m
)
=
s
o
f
t
m
a
x
(
h
l
m
W
y
)
P(y|x^1, ..., x^m) = softmax(h_l^mW_y)
P(y∣x1,...,xm)=softmax(hlmWy)
fine-tune阶段的目标函数是:
L
2
(
C
)
=
∑
(
x
,
y
)
l
o
g
P
(
y
∣
x
1
,
.
.
.
,
x
m
)
L_2(C) = \sum_{(x, y)}logP(y|x^1, ..., x^m)
L2(C)=(x,y)∑logP(y∣x1,...,xm)
随后我们又发现把语言模型作为fine-tune阶段的附加目标函数能够帮助提升监督模型的泛化能力,并且能加速拟合。因此我们改为优化下面的目标函数:
L
3
(
C
)
=
L
2
(
C
)
+
λ
∗
L
1
(
C
)
L_3(C) = L_2(C) + \lambda * L_1(C)
L3(C)=L2(C)+λ∗L1(C)
总而言之,我们在fine-tune阶段多出来的参数只有
W
y
W_y
Wy
每个任务的输入转换
对于像文本分类这样的任务,我们可以直接像上面那样fine-tune我们的模型。而对于问答或文本蕴含之类的任务有结构化的输入,例如有序的文本对,或文档-问题-答案三元组。由于我们的pre-train模型是在连续的文本序列上训练的,我们需要对这些任务的输入进行一些改造。具体来说,我们利用一种traversal-style的方法,也就是把结构化的输入转换成一个有序的序列,这样我们的pre-train模型就可以处理它了。这样的输入转换使得我们避免了任务间复杂的结构转化。下图简略展示了我们对不同任务输入的处理:
- 对文本蕴含任务,我们将premise token和hypothesis token序列直接拼在一起,中间用了一个连接符($)
- 对语义相似任务,两个token序列间没有顺序关系,我们以不同顺序拼接两个token序列,再把拼接后的两个序列过transformer的输出直接相加
- 对问答和文本蕴含任务,我们将文档和问题分别跟每个问题拼接起来,问题和答案之间用一个分隔符标记起来,每个问答对分别过模型,然后用一个softmax层来得到最终输出
实验
训练语言模型我们使用的是BooksCorpus数据集,它包含了7000本未出版的书籍。我们知道ELMo模型用了一个类似的数据集,1B Word Benchmark,我们用的数据集的数量与之类似,但我们的数据集中包含很长的连续文本,保留了长文本的关联信息。
我们的语言模型使用了原始的transformer论文中的结构,也即12层的decoder,每层是768维stats和12个masked sefl-attention header,position-wise前馈网络部分是3072维,训练过程中使用Adam optimization,学习率最大是2.5e-4,我们在前2000步将它从0线性增加,然后以cosine函数退火到0。我们以大小为64的minibatch训练了100个epoch,每个连续token序列的大小限制在512,参数初始化使用了
N
(
0
,
0.02
)
N(0, 0.02)
N(0,0.02)分布,我们用有40000个组合的BPE算法来编码输入,用0.1的dropout作为attention、残差和embedding(?)的正则。同时我们也使用了一个L2正则的变种。我们的激活函数选用了GELU,在我们的模型中position embedding也参与训练,我们用ftfy来清除数据集中的脏token,纠正了一些标点和空格,使用spaCy进行分词。
在fine-tuning阶段,我们复用了pre-training阶段的参数,为分类器使用了0.1的dropout,对于大多数任务,我们使用了32的batch size,lr用了6.25e-5,epoch数大多为3个,我们使用线性lr衰减,在0.2%的训练阶段进行warmup,其中
λ
\lambda
λ设置为0.5
对于监督学习部分的设置,我们对于其中一些任务使用了GLUE的多任务benchmark,下图列出了这些任务和所用的数据集。
自然语言推理自然语言推理(NLI)任务就是输入一个句子对,然后判断它们之间是包含、矛盾或中立关系。尽管对于这一任务已经有过很多研究,但由于时常会遇到的词汇包含、共指、以及词汇和语义的模棱两可现象,NLI依旧是一个很有挑战性的任务。我们在不同来源的5个数据集上对模型进行过评估,包括图像描述、语音转录、流行小说、政府报告、维基百科文章、科学考试和新闻文章。
下表列出了我们的模型在NLI任务上和SOTA模型的效果对比
问答和常识推理对于问答任务,我们使用的是RACE数据集,其中包含初高中学校考试的英文文章和对应的问题。此外,我们还使用了故事完形填空数据集,这一数据集是从两个选项中选出一篇故事的正确结尾。下表列出了问答的实验结果
语义相似语义相似任务即判断两个句子在语义上是否相同。语义相似任务的挑战在于理解概念、理解反义、以及语法上的模糊。在这一任务上我们用了3个数据集:MRPC, QQP, STS-B。
分类我们在两个文本分类数据集上评估了模型结果,CoLA判断一个句子是否符合语法规则。SST-2是一个标准的文本二分类数据集。
下表列出了2个任务的实验结果。
模型分析
transfer层数的影响下图给出了监督学习层数增多的影响。可以看出pre-train模型的每一层都包含了一些对解决特定任务有帮助的信息。
zero-shot表现 我们也评估了transformer结构和LSTM在zero-shot下的性能对比,可以看到Transformer结构在预训练方面比LSTM结构更加优秀。
消融实验 我们进行了3组消融实验,第一组是在fine-tune阶段加上辅助的LM目标是否有用,第二组是用一个单层的有2038个unit的LSTM与transformer对比,第三组是跳过预训练环节,用transformer结构直接进行监督训练,实验结果如下表: