Fine-tuned Language Models for Text Classification
摘要
迁移学习已经对CV领域革新了,但是现有的NLP方法仍然需要特定的任务修改和从头开始训练。
论文提出一种Fine-tuned Language Models(FitLaM),能够有效的对NLP任何任务进行迁移学习,并且介绍了使用微调技术得到的state-of-the-art的结果
介绍
主要是介绍下CV领域的迁移学习方法
一个成功的NLP迁移学习应该和CV一样有其对应的标准类似
- 该方法可以利用大量的可用数据
- 利用进一步的优化任务,导致进一步提高下游的任务
- 可以依赖一个可以用作多数NLP任务的模型
- 在实践中很容易使用
FitLaM依赖于一个简单的RNN网络,无需任何的修改,我们只用一个或者多个特定的任务的线性层增强模型,对现有的方法来说,只涉及s少数的参数更新。
同时,文章还提出一种新的微调技术,可以进行有差别的调整参数,低层次的层调节的幅度要小于高层次的层,已保留语言模型获得的知识。
论文贡献点
- 提出一中NLP的有效迁移学习方法
- 提出FitLaM,这是一种可以实现任意NLP任务的类CV迁移学习方法
- 提出Discriminative Fine-Tuing方法,保留以前的知识,防止在微调期间发生灾难性遗忘
- 引入了文本分类中的BPTT,一种通过线性层将分类器损失反向传播到任何序列大小的RNN的输出
- 对微调训练LM介绍了一些关键的技术
- 模型超越了五个公开数据集,多数数据集误差减少了18%-24%
- 提供预训练模型和代码
相关工作
CV领域的迁移学习
Hypercolumns
在NLP中,最近有人提出一种没有使用word embedding进行迁移学习的方法。方法是将pretrain embeedding通过其他的任务捕获到上下文的context信息,然后将这种’embedding‘和word embedding以及中间层的输入连接到一起。
Multi-task learning
MTL是将多个任务联合进行学习。
Fine-Tuning
对预训练的模型进行微调
Fine-tuned Language Models (FitLaM)
这个模型在一个大的通用领域语料上预训练高度优化的语言模型(LM),并将其调整到目标任务上。
LM试图通过前面的单词来预测下一个单词的概率。模型依赖于使用不同的方法(从n-gram到RNN)的语料库联合概率的自回归因式分解,这些方法在基准测试中都达到了state-of-the-art的结果。在实验中,使用最先进的语言模型(AWD-LSTM),这是一个具有很强正则化策略的正则LSTM。类似于CV,我们将会使用更高性能的语言模型改善下游任务。
LitLaM包含以下步骤:
- 通用领域的LM预训练
- 对目标任务LM微调
- 目标任务分类器微调
通用领域的LM预训练
在Wikitext-103,共有28595篇预处理好的Wikipedia文章。
通过这些数据集预训练LM模型,然后将模型的参数保存下来,作为下游任务的预训练模型。
Target task LM fine-Tuning
使用之前的单词,预测下一个单词。
目标任务的数据可能来自于不同的分布,所以,需要对目标任务的LM进行优化。在给定的通用LM模型上进行训练,这个阶段的收敛速度要快很多,因为它只需要适应目标数据的优化,并且允许使用小的数据集也能够训练一个强大的LM。
Gradual unfreezing
逐渐解冻方法,实验表明从最后一层开始逐渐解冻的模型最有用,这是因为这层包含最少的一般知识。
首先,解冻最后一层,然后微调所有的未解冻层。
然后,解冻下一层,重复这个过程。知道所有的层都进行了精细的调整。
注意,我们进行训练的时候,是每次都会解冻一层,然后训练所有解冻的层,而不是一次只训练一层。
Fine-tuning with cosine annealing 使用余弦退火的方法进行微调
这种方法经过试验效果最好。
我们只训练一个epoch,并且按照下面的schedule在每个batch进行降低学习率的
在这里$n_t$表示step t对应batch的学习率。
Warm-up reverse annealing
实验发现,在训练所有层的时候增加学习率很有用。
Target task classifier fine-tuning
对于分类任务进行fine tuning
对于分类任务,我们采用对LM增加一层或者更多的线性block。
每个block都是使用BN,dropout,relu以及最后输出到一个softmax函数中。注意这些任务中,只有一层的参数需要重新开始训练。
Concat pooling
文本分类的信号通常包含在几个字中,这可能出现在文本中的任意位置。由于输入文档中可能包含数百个单词,如果仅仅考虑最后的隐藏装填,信息可能丢失。所以,我们对于最后一步的hidden state和所有hidden states的max pooling和均值pooling的结果
$$ H = {h_1, …, h_T} $$
$$ h_c = [h_T, maxpool(H), meanpool(H)] $$
微调分类任务是迁移学习最关键的部分。过度调节可能导致灾难性的遗忘,消除通过预训练得到的信息。过于谨慎有可能导致收敛缓慢以及过拟合。
Discriminative fine-tuning
由于不同层能够捕捉到不同类型的信息,他们应该进行不同程度的调整。
适当处理不同层的最简单方法是一次一层的训练模型,类似于贪心层次训练方法和“链解冻”。然后这引入了一个顺序的要求,阻碍了并行性。并且每次训练都会重新遍历一次数据集,很容易在小的数据集上过拟合。所以,提出使用discriminative fine-tuning
与其对所有的层使用相同的学习率,有区别的微调允许我们使用不同的学习率调节每个层,对于上下文,在时间步t的参数更新公式为:
对于discriminative fine-tuning,我们将参数按照层进行划分为${ \theta^1, …, \theta^L}$。相似的,也可以得到每一层的学习率
然后,在进行参数更新的时候,根据以下规则进行调整参数。
经验发现,首先选择第L层的学习率,然后根据$\eta^l = \eta^{l + 1} * 0.3$效果很好
BPTT for Text Classification (BPT3C)
语言模型通过反向传播进行更新参数,为了对大规模文档分类器进行精细调节,我们提出BPTT3C
- 首先将文档划分大小b的批次
- 在每个批次训练的开始,模型参数初始化为之前批次的最后的状态
- 跟踪最大池化和平均池化的隐藏状态
- 梯度被反向传播到哪些对预测有贡献的隐藏状态的参数
实际上,我们可以使用可变长的反向传播序列。
Bidirectional LM
Experiments
没有找打相关的代码,不知道具体的实现是怎么样的。
感觉这种方法还是主要使用与分类任务上。期待代码的公布和测试了。