Universal Language Model Fine-tuning for Text Classification

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} θ=θt1ηθ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=θt1lηlθlJ(θ)(2)

经验上表示首先选择最后一层的学习速率 η L \eta^L ηL,然后通过精调最后一层,使用 η l − 1 = η l / 2.6 \eta_{l-1}=\eta^l/2.6 ηl1=η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=Tcut_frac
(3) p = { t / c u t , i f   t   &lt;   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, &amp;if\ t\ &lt;\ cut\\ 1-\frac{t-cut}{cut\cdot (1/cut\_frac-1)}, &amp;if\ otherwise \end{cases} \tag{3} p={t/cut,1cut(1/cut_frac1)tcut,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=ηmaxratio1+p(ratio1)

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
在这里插入图片描述

4.2 Results

在这里插入图片描述

5 Analysis

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值