Universal Language Model Fine-tuning for Text Classification
文章目录
ABSTRACT
归纳迁移学习在CV中影响重大,但在NLP中,仍需要特定任务的修改和训练。我们提出ULMFiT(Universal Language Model Fine-tuning),可以用在任何任务的迁移学习方法。并介绍了精调语言模型的重要技术。我们的方法在6个文本分类任务上的表现比其他方法好。
1 Introduction
归纳迁移学习对CV影响重大,CV中的模型(物体识别,分类和分割)很少从头训练,而是对在ImageNet,MS-COCO和其他数据集上训练好的模型进行精调。
文本分类是NLP的一个任务,实际应用有垃圾邮件,诈骗,机器人检测,应急响应和商业文件分类,如用于法律发现。
DL模型在一些NLP任务上获得了最好的结果,这些模型都是从头训练的,需要大量的数据和时间收敛。NLP里的迁移主要在转换迁移。对于归纳迁移,精调训练好的词嵌入,是一种简单的迁移技术,仅仅只是关注了模型的第一层,但是在实践中有很大的效果,在很多先进的模型中都有使用。最近的方法,比如在不同层中,把其他任务的embedding和输入进行concatenate,然后从头训练模型,并且固定训练好的embedding的参数,限制他们的使用。
受到预训练的好处的启发,比起随机初始化我们模型剩下的参数,这样做应该更有效果。但是通过精调的归纳迁移在NLP中并不好用。
我们发现不是语言模型精调的问题,而是我们缺少训练的方法的知识,阻碍了广泛的应用。小数据集上语言模型过拟合,在精调分类器时遭遇灾难性忘记。和CV相比,NLP的模型都比较浅,因此需要不同的精调方法。
我们提出的ULMFiT模型解决了这个问题,而且对于任何的NLP任务有更鲁棒的归纳迁移学习。和精调ImageNet模型相似:3层LSTM结构,除了dropout外没有其他的参数,比工业上的模型和迁移学习方法上6个方法应用的分类任务的模型都要好。
贡献
1)提出ULMFiT模型,实现的效果和CV的迁移学习相似。
2)提出对抗精调,倾斜的三角学习率,渐进式解冻,新颖的技术保留以前知识,避免在微调期间发生灾难性的遗忘。
3)在文本分类的6个数据集上表现很好
4)我们的方法高效使用样本,并用ablation analysis分析模型。
5)公开我们的我们和代码
2 Related work
CV的迁移学习
CV中的DNN的特征,从底层到高层,特征是从一般到贴近特定任务。由于这个原因,CV中的很多工作主要在迁移模型的第一层,而且使用ImageNet模型的特征作为输入获得了很好的效果。近几年,通过精调训练好模型的最后几层和冻结某些层的方法都有尝试。
Hypercolumns
在NLP,最近才有一些方法提出来,比词嵌入好。最受欢迎的是训练好的词嵌入捕获了另外的上下文信息。不同层上的embedding用作feature,和中间层的输出进行concatenation,这种方法在CV中称为hypercolumns。
multi-task learning
相关的方向是多任务学习(MTL),由Rei(2017)和Liu et al(2018)提出,增加一个语言模型目标函数,和主任务一起训练,MTL要求每次从头训练模型,这很不方便,而且需要小心调整不同任务之间的权重。
fine-tuning
在相同任务之间进行微调获得很大的成功。ULMFiT权衡了一般领域的预训练和神奇的精调技术,避免了过拟合,获得很好得到结果。
3 Universal Language Model Fine-tuning
我们最感兴趣的是NLP中,一般的归纳迁移学习:给定静态源任务
T
S
T_S
TS和任何的目标任务
T
T
T_T
TT,并且
T
S
!
=
T
T
T_S!=T_T
TS!=TT,希望提高
T
T
T_T
TT的性能。语言模型可以作为理想的源任务,它为下游任务捕获了语言相关方面的信息,比如长期依赖性,层次关系和情感信息。和MT及entailment相比,提供了不限领域的数据。另外预训练好的LM可以容易地迁移到目标任务,表示了重大的性能提高。而且,语言模拟(language modeling)是现有任务的关键部分,比如MT和对话模型。通常,语言模型(language modeling)包含一个假设空间
H
H
H。
提出的ULMFiT模型,包含了在巨大一般领域的语料库的预训练的语言模型,并且在目标任务上使用精调。这个方法是通用的,比如:
1)可以处理不同的文档长度,数量和标签模型;
2)使用单个架构和训练过程;
3)不需要特征工程和预处理;
4)不需要多余的域内文档或标签。
实验上,使用先进的模型AWD-LSTM((Merity et al., 2017a),这个常规的LSTM(没有attention,short-cut连接或增加其他复杂的),有dropout超参数,和CV相似,我们希望下游的模型的性能可以通过用高性能的语言模型获得提高。
ULMFiT模型包含以下步骤:
1)通用语言模型的训练;
2)目标语言模型的精调;
3)目标任务分类器的精调
以下详细讨论。
3.1 General-domain LM pretraining
和ImageNet相似的语料库应该很大,并且捕获了语言的通常性质。在Wikitext-103(Merity et al., 2017b) 训练模型,Wikitext-103包含了28,595处理好了的文章,有103m个词。对于小数据的预训练很有效,可以使只有100个有标记样本的训练具有泛化性。把多样性语料库的训练留给以后研究。
3.2 Target task LM fine-tuning
不管预训练的数据有多广泛,和目标任务的数据分布总是不同。所以在LM上精调目标任务。这个阶段收敛很快,因为只需要适应目标数据对于小数据也可以获得更鲁棒性的LM。提出了discriminative fine-tuning和 slanted triangular learning rates for fine-tuning the LM
Discriminative fine-tuning
由于不同的层捕获不同的信息((Yosinski et al., 2014),必须精调到不同的层度。提出了精调方法–discriminative fine-tuning。
不是所有的层采用相同的学习熟虑, discriminative fine-tuning允许不同层使用不同的学习速率。SGD在步骤
t
t
t更新模型参数
θ
\theta
θ的公式如下:
(1)
θ
=
θ
t
−
1
−
η
⋅
∇
θ
J
(
θ
)
\theta=\theta_{t-1}-\eta\cdot \nabla_{\theta}J(\theta) \tag{1}
θ=θt−1−η⋅∇θJ(θ)(1)
η
\eta
η:学习速率
∇
θ
J
(
θ
)
\nabla_{\theta}J(\theta)
∇θJ(θ)是模型目标函数的梯度。
对于discriminative fine-tuning,把参数
θ
\theta
θ分为
θ
1
,
θ
2
,
.
.
.
,
θ
L
\theta^1,\theta^2,...,\theta^L
θ1,θ2,...,θL,即
θ
l
\theta^l
θl包含模型第
l
l
l的所有参数,
L
L
L表示模型的层数,
η
1
,
.
.
.
,
η
L
\eta^1,...,\eta^L
η1,...,ηL是每层的学习速率,
η
l
\eta^l
ηl是第
l
l
l的学习速率。
discriminative fine-tuning的SGD如下:
(2)
θ
t
l
=
θ
t
−
1
l
−
η
l
⋅
∇
θ
l
J
(
θ
)
\theta^l_t=\theta^l_{t-1}-\eta^l\cdot \nabla_{\theta^l}J(\theta) \tag{2}
θtl=θt−1l−ηl⋅∇θlJ(θ)(2)
经验上表示首先选择最后一层的学习速率 η L \eta^L ηL,然后通过精调最后一层,使用 η l − 1 = η l / 2.6 \eta_{l-1}=\eta^l/2.6 ηl−1=ηl/2.6。
Slanted triangular learning rates
为了使参数适合特定任务的特征,我们需要把模型的参数快速收敛到适合的参数空间。使用相同的学习速率,不是获得这种结果的最好办法。所以提出了slanted triangular learning rates (STLR),这可以先行增加学习速率,也可以根据更新规则线性降低,如图2:
c
u
t
=
⌊
T
⋅
c
u
t
_
f
r
a
c
⌋
cut = \lfloor T\cdot cut\_frac \rfloor
cut=⌊T⋅cut_frac⌋
(3)
p
=
{
t
/
c
u
t
,
i
f
t
<
c
u
t
1
−
t
−
c
u
t
c
u
t
⋅
(
1
/
c
u
t
_
f
r
a
c
−
1
)
,
i
f
o
t
h
e
r
w
i
s
e
p= \begin{cases} t/cut, &if\ t\ <\ cut\\ 1-\frac{t-cut}{cut\cdot (1/cut\_frac-1)}, &if\ otherwise \end{cases} \tag{3}
p={t/cut,1−cut⋅(1/cut_frac−1)t−cut,if t < cutif otherwise(3)
η t = η m a x ⋅ 1 + p ⋅ ( r a t i o − 1 ) r a t i o \eta_t=\eta_{max}\cdot\frac{1+p\cdot(ratio-1)}{ratio} ηt=ηmax⋅ratio1+p⋅(ratio−1)
T
T
T是训练迭代次数,
c
u
t
_
f
r
a
c
cut\_frac
cut_frac是我们增加LR的迭代次数的小数,
c
u
t
cut
cut是从增加LR到降低LR的迭代,
p
p
p是分别增加或增加LR的迭代次数的比例,
r
a
t
i
o
ratio
ratio表示和最大的LR相比,最小的LR是有多小,
η
t
\eta_t
ηt是第
t
t
t次迭代的学习速率,通常使用
c
u
t
_
f
r
a
c
=
0.1
,
r
a
t
i
o
=
32
,
η
m
a
x
=
0.01
cut\_frac=0.1,\ ratio=32,\ \eta_{max}=0.01
cut_frac=0.1, ratio=32, ηmax=0.01
STLR修改了三角学习速率,有短暂的增加和长时间的降低,这里发现了性能提高的关键。
3.3 Target task classifier fine-tuning
最后,对于精调,对预训练语言模型增加了两个线性块。仿照CV分类器,中间层的每个块使用批归一化,dropout和ReLU激活函数,输出概率分布使用softmax激活函数。注意这些特定任务的参数都是从头开始学习的。
concat poolling
对于分类任务重要的词语通常只是包含几个词语,而且可以出现在文档的任何位置,由于输入文档可以包含上百个词语,如果仅仅考虑最后的隐藏层的可能丢失信息。由于这个原因,对在文档的最后一个time step 的隐含状态
h
T
h_T
hT,在GPU现存足够的情况下尽可能地用隐藏状态
H
=
h
1
,
.
.
.
,
h
T
H={h_1,...,h_T}
H=h1,...,hT进行maxpool-pooled和mean-pooled操作获得的结果进行concatenation,公式如下:
(4)
h
c
=
[
h
T
,
m
a
x
p
o
o
l
(
H
)
,
m
e
a
n
p
o
o
l
(
H
)
]
h_c=[h_T,maxpool(H),meanpool(H)] \tag{4}
hc=[hT,maxpool(H),meanpool(H)](4)
[]表示concatenation操作。
精调目标分类部分是迁移学习方法最重要的部分。过度精调会导致灾难性的忘记和消除语言模型获得的信息;太小心的精调会导致收敛慢和过度拟合。除了discriminative finetuning and triangular learning rates,还提出了精调分类器所用的逐步解冻方法。
Gradual unfreezing
不是同时精调所有层,这是会导致灾难性忘记,所以建议从模型最后一层开始进行解冻,最后一层包含最少通用的信息:解冻最后一层进行精调,然后解冻倒数第二层进行精调,直到精调所有层并最后收敛。
discriminative fine-tuning, slanted triangular learning rates, 和 gradual unfreezing各有用处。
BPTT for Text Classification (BPT3C)
采用时间进行后向传播( backpropagation through time (BPTT))训练的语言模型对于大的输入序列可以进行梯度传播。为了使大文档的进行更容易,提出了 BPTT for Text Classification (BPT3C):把文档分成固定长度
b
b
b的块,在每个块的开始,使用前一个块的最后状态进行初始化,对隐藏状态进行mean-pool和max-pool,梯度进行后向传播传递到块,
Bidirectional language model
和现有工作相似,模型不仅仅限制于精调unidirectional language model,我们所有的实验,都预训练了一个前向和后向的LM,使用BPT3C对每个LM进行精调然后对预测结果进行average。
4 Experiments
4.1 Experimental setup
Datasets and tasks