美文网首页机器学习与数据挖掘
ULMFiT-用于文本分类的通用语言模型微调

ULMFiT-用于文本分类的通用语言模型微调

作者: Doit_行之 | 来源:发表于2019-01-04 19:49 被阅读82次

    ULMFiT-用于文本分类的通用语言模型微调

    翻译自《Universal Language Model Fine-tuning for Text Classification》

    摘要

    归纳迁移学习对于计算机视觉有很大的影响,但现有的NLP中的方法仍然需要特定任务的修改和从头开始的训练。我们提出通用语言模型微调(ULMFiT),一种可以应用NLP中任何任务的迁移学习方法。同时,我们将介绍微调语言模型的关键技术。 我们的方法在6个文本分类的任务上显着优于当前最好模型,并再大多数数据集上减少18-24%的错误率。而且,即使只有100个标签示例,它的表现可以和100倍数据从头开始训练的效果相比拟。 我们开放了我们的预训练模型和代码 。

    1 简介

    归纳迁移学习对计算机视觉(CV)产生了很大的影响关于。 应用CV模型(包括对象检测,分类和语义分割)很少从头开始训练,而是用已有的模型进行微调,如在ImageNet,MS-COCO等数据集上预训练的模型。

    文本分类是具有现实应用的一个自然语言处理任务类别,如:垃圾邮件,欺诈和机器人检测等应用程序,应急响应和商业文件分类,如用于法律发现。

    虽然深度学习模型许多NLP任务上达到了最好的效果,但这些模型无一不是从头开始训练的,需要大型数据集和漫长的数据收集时间。目前自然语言处理中用到迁移学习的,主要是微调预训练的词嵌入,这是一种简单的迁移技术,它只针对模型的第一层,但在对实际效应有着巨大的影响,并运用于各种最好的模型中。最新的方法将来自其他任务的嵌入与不同层次的输入相结合,但仍然从头开始训练主要任务模型,并将预训练嵌入视为固定参数,限制了其有用性。

    鉴于预训练的好处,我们应该能比随机初始化其余模型参数做得更好。但是,使用微调的迁移学习在NLP领域却暂时还未获得成功。 戴和乐 ( 2015年 )首先提出,我们可以微调语言模型(LM),但需要数百万同领域文本以实现良好的效果,这严重限制了它的适用性。

    我们表明,有问题的不是LM微调的想法, 而是我们缺乏有效地如何训练他们的知识,这阻碍了其更广泛的使用。 LM会过拟合于小型数据集并在微调一个分类器的时候遭受灾难性的遗忘。相对于CV而言,NLP模型通常更加浅,因此需要不同的微调方法。

    我们提出了一种新方法--通用语言模型微调(ULMFiT),以解决这些问题,并各种NLP任务上实现鲁棒的归纳迁移学习,类似于微调ImageNet那样:相同的3层具有相同的超参数LSTM架构 ,没有添加除了微调dropout超参数之外的其他东西,并在6个文本分类任务中优于其他工业化的迁移学习方法。在IMDb上,使用100个标注的样板,ULMFiT可以达到用10倍数据从头开始训练的性能,再加上50k未标记的样例 - 则可以达到100倍以上数据的效果。

    贡献

    我们的贡献如下:1)我们提出通用语言模型微调(ULMFiT),一种可以在任何自然语言处理任务上实现类似CV的转移学习的方法。 2)我们提出动态微调,倾斜三角学习率,渐进式解冻,等新的技术来保持过往知识和避免微调中的灾难性遗忘。 3)我们六个代表性文本分类的达到了最好的效果,并在大多数数据集上减少了18-24%的误差。 4)我们的方法能够实现极其样本有效的迁移学习并进行广泛的消融分析。 5)我们制作了预训练模型,我们的代码将可以被更广泛的采用。

    2 相关工作

    CV中的迁移学习

    CV中深度神经网络从第一层到最后一层的特征被从一般性任务迁移到特殊的任务。 出于这个原因,CV中的大多数工作都集中在转移模型的第一层.Sharif Razavian et al(2014)使用ImageNet模型的特征作为简单分类器的输入来实现最终结果。 近年来,通过微调预训练模型的最后一层或几层,并使剩余的层冻结的新方法,已经取代了这种方法。

    Hypercolumns

    在NLP中,最近才有非词嵌入的迁移学习方法被提出。 流行的做法是预训练嵌入,通过其他任务获取额外的上下文信息。 然后将不同级别的嵌入用作特征,与单词嵌入或中间层的输入连接。 这种方法就是是CV中已知的hypercolumns,并最近在NLP被彼得斯等人分别使用语言建模,释义,蕴涵和机器翻译(MT)进行预训练。但是,彼得斯等人的方法需要设计定制的架构,而我们在一系列任务中使用相同的基本架构展示出了最先进的性能。 同时,在CV中,hypercolumns也几乎已经完全被端到端的微调所取代。

    CV中像素的超列(hypercolumns)是该像素上方所有CNN单元的激活矢量。 类似地,NLP中的单词或句子的超列是在预训练模型中的不同层处的嵌入的串联。

    多任务学习

    还有一个相关的方向是多任务学习(MTL)。 这是Rei(2017)和Liu(2018)等人采用的方法。 他们将语言建模目标添加到与主任务模型联合训练的模型中。 MTL要求每次都从头开始训练任务,这使得效率低下并且通常需要仔细权衡任务特定的目标函数。

    微调

    微调已经被成功的用于相似任务的迁移,例如, 在QA中,对于远程监督的情绪分析,或在MT领域,但已被证明在不相关的情绪之间效果不好。 Dai和Le(2015)也对语言模型进行了微调,但过度使用了10k标记的示例,需要数百万个域内文档才能获得良好的性能。 相比之下,ULMFiT利用通用域预训练和新颖的微调技术来防止过度拟合,即使只有100个标记示例,也可以在小数据集上实现最先进的结果。

    3 通用语言模型微调

    我们对NLP最普遍的归纳迁移学习设置感兴趣:给定静态源任务TS和TS ! = TT的任何目标任务TT,我们希望提高TT的性能。语言建模可以被视为理想的源任务和ImageNet for NLP的对应物:它捕获了与下游任务相关的语言的许多方面,例如长期依赖,层次关系和情绪。与MT和蕴涵等任务相比,它为大多数域和语言提供接近无限数量的数据。此外,预训练的LM可以很容易地适应目标任务的特性,我们可以显着提高性能。此外,语言建模已经是MT和对话建模等现有任务的关键组成部分。形式上,语言建模引发了一个假设空间H,它应该对许多其他NLP任务有用。

    我们提出通用语言模型微调(ULMFiT),它在大型通用域语料库中预先训练语言模型(LM),并使用新技术在目标任务上对其进行微调。 该方法在满足以下实际标准的意义上是通用的:1)它适用于不同文档大小,数量和标签类型的任务; 2)它使用单一的架构和训练过程; 3)它不需要自定义特征工程或预处理; 4)它不需要额外的域内文件或标签。

    在我们的实验中,我们使用最先进的语言模型AWD-LSTM(Merity等,2017a),一个常规LSTM(没有注意,快捷连接或其他复杂的添加),具有各种调谐dropout超参数。 与CV类似,我们预计未来可以通过使用更高性能的语言模型来提高下游性能。

    ULMFiT包括以下步骤,我们在图1中显示:a)通用域LM预训练(x3.1); b)目标任务LM微调(x3.2); c)目标任务分类器微调 (X3.3)。 我们将在以下部分讨论这些内容。

    001-training_for_ULMFiT.png

    图1:ULMFiT由三个阶段组成:a)LM在一般领域语料库上进行训练,以捕获不同层次语言的一般特征。 b)使用判别性微调('Discr')和倾斜三角学习率(STLR)对目标任务数据进行微调,以学习任务特定的功能。 c)使用逐渐解冻,'Discr'和STLR对目标任务进行微调,以保留低级表示并适应高级表示(阴影:解冻阶段;黑色:冻结)。

    3.1通用域LM预训练

    类似ImageNet的语言语料库应该很大并且可以捕获语言的一般属性。 我们预测了Wikitext-103上的语言模型,该模型包含28,595个预处理的维基百科文章和1.03亿个单词。 预训练对于具有小数据集的任务最有利,并且即使使用100个标记示例也能够进行泛化。 我们将更多样化的预训练语料库的探索留给未来的工作,但期望它们会提升性能。 虽然这个阶段是最昂贵的,但它只需要执行一次并改善下游模型的性能和收敛性。

    3.2目标任务LM微调

    无论用于预训练的通用域数据多么多样,目标任务的数据可能来自不同的分布。 因此,我们微调LM目标任务的数据。 给定一个预训练的通用域LM,这个阶段收敛得更快,因为它只需要适应目标数据的特性,它允许我们训练一个强大的LM,即使对于小数据集。 我们提出了用于微调LM的判别微调和倾斜三角学习速率,我们在下面介绍。

    判别微调
    由于不同的层捕获不同类型的信息,它们应该在不同程度上进行微调。 为此,我们提出了一种新颖的微调方法,即辨别性的微调。

    不是对模型的所有层使用相同的学习速率,而是区分性微调允许我们以不同的学习速率调整每个层。 对于上下文,时间步长t处模型参数θ的常规随机梯度下降(SGD)更新如下所示:
    \theta_t = \theta_{t-1} - \eta \cdot \nabla_\theta J(\theta)
    其中η是学习率,\nabla_\theta J(\theta)是关于模型目标函数的梯度。 对于判别性微调,我们将参数θ分成{\theta^1,...,\theta^L}其中\theta^l包含第l层模型的参数,L是模型的层数。 同样,我们得到{\eta^1,...,\eta^L}其中\eta^l是第l层的学习速率。

    具有判别性微调的SGD更新如下:
    \theta_t^l = \theta_{t-1}^l - \eta^l \cdot \nabla_{\theta^l} J(\theta)
    我们凭经验发现,首先选择最后一层的学习率η^L,仅微调最后一层, 然后通过使用\eta^{l-1}=\eta^l / 2.6作为较低层的学习率,是最有效的。

    倾斜的三角学习率

    为了使其参数适应任务特定的特征,我们希望模型在训练开始时快速收敛到参数空间的合适区域,然后细化其参数。 在整个训练过程中使用相同的学习率(LR)或退火学习率并不是实现此行为的最佳方法。 相反,我们提出倾斜的三角学习率(STLR),它首先线性地增加学习率,然后根据以下更新时间表线性衰减它,如图2所示:

    \begin{align*} cut &= \lfloor T \cdot cut\_frac \rfloor \\ p &= \begin{cases} t/cut,&if \ t < cut \\ 1 - \frac{t-cut}{cut \cdot (ratio -1)}, &otherwise \end{cases}\\ \eta_t &= \eta_{max} \cdot \frac{1+p \cdot (ratio-1)}{ratio} \end{align*}

    其中T是训练迭代的次数,cut_frac是我们增加LR的迭代的分数,cut是当我们从增加切换到减少LR时的迭代,p是我们增加或将减少的迭代次数的分数, ration指定最小LR与最大LR ηmax相比小多少,ηt是迭代t时的学习速率。 我们通常使用cut_frac = 0.1,ratio = 32和ηmax= 0:01。

    STLR修改了三角学习率(Smith,2017),具有短期增长和长衰减期,这是我们发现良好性能的关键。在第5节中,我们将比较积极的余弦退火,一种最近用于在CV中实现最先进性能的类似计划

    001-slanted_triangular_learning_rate.png

    3.3 目标任务分类器微调

    最后,为了微调分类器,我们使用两个额外的线性块来增强预训练语言模型。 遵循CV分类器的标准实践,每个块使用批量标准化和dropout,中间层的ReLU激活和softmax激活,在最后一层输出目标类的概率分布。 请注意,这些特定于任务的分类器层中的参数是从头开始学习的唯一参数。 第一个线性层将合并的最后隐藏层状态作为输入。

    pooling拼接

    文本分类任务中的信号通常包含在几个单词中,这些单词可能出现在文档中的任何位置。 由于输入文档可能包含数百个单词,如果我们只考虑模型的最后隐藏状态,信息可能会丢失。 出于这个原因,我们将文档的最后一个步骤hT的隐藏状态与各时间步长的隐藏状态的max-pooled和mean-pooled表示拼接,获得一个gpu显存相对合适的文本表示:H ={h_1, ..., h_T}:
    h_c = [h_T, maxpool(H), meanpool(H)]

    微调目标分类器是转移学习方法中最关键的部分。 过于激进的微调将导致灾难性的遗忘,消除通过语言建模捕获的信息的好处; 过于谨慎的微调会导致收敛缓慢(以及由此导致的过度拟合)。 除了差别性微调和三角学习率之外,我们还建议逐步解冻以微调分类器.

    逐渐解冻

    我们建议从最后一层开始逐渐解冻模型,而不是一次微调所有层,这会导致灾难性的遗忘,因为这包含最少的一般知识:我们首先解冻最后一层, 在一个时期内微调所有未冻结的层。 然后我们解冻下一个较低的冻结层并重复,直到我们微调所有层,直到最后一次迭代收敛。 这类似于'链解冻',不过我们一次向一组'解冻'层添加一层,而不是一次只训练一层。

    区别性微调,倾斜三角学习率和逐渐解冻都是有益的,我们在第5节中表明它们相互补充并使我们的方法能够在不同的数据集中表现良好。

    用于文本分类的BPTT(BPT3C)

    通过时间反向传播(BPTT)训练语言模型,以实现大输入序列的梯度传播。 为了使大型文档的分类器微调可行,我们提出了BPTT for Text Classification(BPT3C):我们将文档划分为大小为b的固定长度批次。 在每个批次的开头,模型初始化为前一批次的最终状态; 我们跟踪平均值和最大池的隐藏状态; 梯度反向传播到批次,其隐藏状态有助于最终预测。 在实践中,我们使用可变长度反向传播序列。

    双向语言模型

    与现有工作类似(Peters等,2017,2018),我们不仅限于微调单向语言模型。 对于我们所有的实验,我们预先训练前向和后向LM。 我们使用BPT3C独立微调每个LM的分类器并平均分类器预测。

    4 实验

    虽然我们的方法同样适用于序列标记任务,但由于其重要的真实世界应用,我们专注于此工作中的文本分类任务。

    4.1 实验设置

    数据集和任务

    我们在六个广泛研究的数据集上评估我们的方法,这些数据集具有不同数量的文档和不同的文档长度,由最先进的文本分类和转移学习方法使用(Johnson和Zhang,2017; McCann等,2017) 作为三个常见文本分类任务的实例:情感分析,问题分类和主题分类。 我们显示表1中每个数据集和任务的统计数据。

    Dataset Type #classes #examples
    TREC-6 Question 6 5.5k
    IMDb Sentiment 2 25k
    Yelp-bi Sentiment 2 560k
    Yelp-full Sentiment 5 650k
    AG Topic 4 120k
    DBpedia Topic 14 560k

    文本分类数据集和任务类别数量和数据量

    情感分析

    对于情绪分析,我们评估我们对二元电影评论IMDb数据集(Maas等,2011)以及Zhang等人(2015)编制的Yelp评论数据集的二元和五类版本的方法。

    问题分类

    我们使用小型TREC数据集的6类别版本,该数据由开放域的、基于事实的问题按广泛语言分类标准制作而成。

    主题分类

    对于主题分类,我们评估了Zhang等人创建的大型AG新闻和DBpedia本体数据集。

    预处理

    我们使用与早期工作相同的预处理。 此外,为了使语言模型能够捕获可能与分类相关的方面,我们为大写单词,伸长和重复添加了特殊标记。

    超参数

    我们感兴趣的是一个能够在各种任务中执行的模型。 为此,如果没有另外提及,我们在任务中使用相同的一组超参数,我们在IMDb验证集上进行调整。 我们使用AWD-LSTM语言模型(Merity等,2017a),嵌入大小为400,3层,每层隐藏激活1150次,BPTT批量大小为70.我们将0.4的dropout应用于最后一层, 0.3应用于RNN层,0.4应用于输入嵌入层,0.05应用于嵌入层,0.5的权重dropout到RNN的hidden-to-hidden矩阵。 分类器有一个大小为50的隐藏层。我们使用Adam的β1= 0.7而不是默认的β1= 0.9和β2= 0.99。 我们使用批量大小为64,基本学习率为0.004和0.01分别对LM和分类器进行微调,并调整每个任务的验证集上的epoch数量。 我们使用和(Merity et al., 2017a)相同的做法。

    baselines和比较模型

    对于每项任务,我们都会与当前的状态进行比较。 对于IMDb和TREC-6数据集,我们与CoVe(McCann等,2017)进行比较,这是一种先进的NLP转移学习方法。 对于AG,Yelp和DBpedia数据集,我们与Johnson和Zhang(2017)的最新文本分类方法进行了比较。

    4.2 结果

    001-test_error_on_ulmfit.png

    相关文章

      网友评论

        本文标题:ULMFiT-用于文本分类的通用语言模型微调

        本文链接:https://www.haomeiwen.com/subject/oqgkrqtx.html