神经翻译笔记4扩展d. 迁移学习概述与前BERT时代的NLP预训练模型

神经翻译笔记4扩展d. 迁移学习概述与前BERT时代的NLP预训练模型

    • 迁移学习
      • 多任务学习(MTL)
        • 辅助任务
        • 为什么多任务学习能够有效
      • 顺序迁移学习
        • 终生学习(Lifelong learning)
      • 领域适配
        • 基于表示的方法
          • 领域相似度
        • 数据加权和数据选择
        • 自标注技术
    • 前BERT时代的两种经典RNN预训练模型
      • ULMFiT
      • ELMo
    • 讨论:微调还是不调,这是一个问题
    • 参考文献

本节仍然是为了系列笔记的完整性而做,主要介绍迁移学习的概念,以及BERT出现之前NLP领域两个重要的预训练模型ULMFit和ELMo

迁移学习

本节完全来自于Sebastian Ruder博士论文的第三章。原文一共有90页,本文作为转记,完全覆盖原文的所有内容有些困难,所以只能有所取舍——例如原文引用了大量相关工作,本文由于篇幅的限制,只能通通略去,因此强烈建议有兴趣的朋友也阅读原文,顺藤摸瓜

在经典的有监督学习中,如果要为某个任务或某个领域 A A A训练模型,一般会假设我们对此任务/领域有足够数据,而且也只能预期模型在同样的任务/领域上能够取得不错的效果——也就是说,前提假设是数据都是独立同分布(i.i.d.)的。如果任务或者领域变了,就要重新收集数据,重新从头训练模型。如果新的任务/领域没有足够数据,传统的有监督学习方法就不再适用,这时就需要迁移学习的帮忙,因为这种方法可以把相关任务/领域(称为源任务/源领域)的知识提取出来,应用在目标任务/目标领域上。通常情况下,我们假设对目标任务/领域,有少量有标签数据,或者大量无标签数据

为了更简洁的描述,可以引入一些符号定义和例子。记领域为 D \mathcal{D} D,由特征空间 X \mathcal{X} X和该特征空间上的边缘概率分布 P ( X ) P(X) P(X)组成,其中 X = { x 1 , … , x n } ∈ X X = \{x_1, \ldots, x_n\} \in \mathcal{X} X={x1,,xn}X。以文档分类问题为例,如果使用词袋模型, X \mathcal{X} X就是所有文档表示组成的空间, x i x_i xi是第 i i i个文档的向量表示, X X X是一个随机变量,表示用来训练的文档样本集合。即 D \mathcal{D} D可以表示为一个元组

D = { X , P ( X ) } \mathcal{D} = \{\mathcal{X}, P(X)\} D={X,P(X)}

对给定的领域 D \mathcal{D} D,任务 T \mathcal{T} T包含一个标签空间 Y \mathcal{Y} Y、一个先验分布 P ( Y ) P(Y) P(Y)和一个条件概率 P ( Y ∣ X ) P(Y|X) P(YX),其中条件概率通常从训练数据中学到。仍以分档分类问题为例,此时 Y \mathcal{Y} Y是所有可能的标签组成的集合,即 { T r u e , F a l s e } \mathtt{\{True, False\}} {True,False}。所以 T \mathcal{T} T也可以表示为一个元组

T = { Y , P ( Y ) , P ( Y ∣ X ) } \mathcal{T} = \{\mathcal{Y}, P(Y), P(Y|X)\} T={Y,P(Y),P(YX)}

使用上面的记号,并以 S S S表示“源端”, T T T表示“目标端”,则迁移学习可以分为五大应用场景,分别为

  • P X ( Y S ) ≠ P T ( Y T ) P_X(Y_S) \not= P_T(Y_T) PX(YS)=PT(YT),源任务和目标任务标签的先验分布不同
  • P X ( Y S ∣ X S ) ≠ P T ( Y T ∣ X T ) P_X(Y_S|X_S) \not= P_T(Y_T|X_T) PX(YSXS)=PT(YTXT),源任务和目标任务的条件概率分布不同,例如两者的类别不平衡
  • Y S ≠ Y T \mathcal{Y}_S \not= \mathcal{Y}_T YS=YT,两个任务的标签空间不同,即在目标任务中有新的标签需要打出。该场景通常和场景1、2一起出现。这里引出的一个重要的额外问题是,两个任务是同时学习,还是顺序学习。同时学习多个任务,称为多任务学习
  • P S ( X S ) ≠ P T ( X T ) P_S(X_S) \not= P_T(X_T) PS(XS)=PT(XT),源领域和目标领域的边缘概率分布不同,一个典型例子是文档讨论的主题不同。这种场景通常被称作领域适配,也通常和场景1、2一起出现
  • X S ≠ X T \mathcal{X}_S \not= \mathcal{X}_T XS=XT,源领域和目标领域的特征空间不同,例如文档使用了两种语言。在NLP领域里,这种场景可以看做是跨语言学习或者跨语言适配

在[PanJialin2009]的基础上,NLP领域迁移学习的分类可如下图所示。其中跨语言学习部分可参考本专栏前面的内容,本文主要介绍剩余三类迁移学习,即多任务学习、顺序学习和领域适配

神经翻译笔记4扩展d. 迁移学习概述与前BERT时代的NLP预训练模型_第1张图片

多任务学习(MTL)

机器学习的目的通常是为某个确定任务训练模型,但是如果聚焦于某个任务,多少会顾此失彼,忽略某些可以帮助我们在其他方面做得更好的信息。如果可以在相关的任务之间共享一些表示方法,就可以让模型有更好的泛化能力,这种方法称为多任务学习,也被称为联合学习(joint learning)、L2L(learning to learn)等。通常情况下,如果优化问题有多个损失函数,则就在做多任务学习了

在深度学习语境下,多任务学习可以通过隐藏层的硬参数共享/软参数共享来达到

  • 硬参数共享:最常见的手段,在所有任务间共享隐藏层,对不同的任务设置不同输出层。硬参数共享能极大地降低过拟合的风险
  • 软参数共享:每个任务有自己的模型自己的参数,对不同模型参数间的距离施加正则化来引导它们学到相似的参数

辅助任务

尽管常见的多任务学习在实施时是引入多个损失函数一起优化,但即便在常见的,只优化一个损失函数的场景下,也有机会通过辅助任务来提升模型效果。常见的辅助任务可以分为如下四类:

  • 统计的。这类辅助任务是要预测输入数据底层的统计信息,例如对序列标注任务,同时预测词汇的频率,使得模型不会在常见词和罕见词之间共享表示信息

  • 选择性无监督的(selective unsupervised)。例如对情感分析任务,预测句子是否包含某个领域无关的正向/负向情感词

  • 有监督的。例如使用与主任务相关的任务、对抗训练、反向训练(例如机器翻译,英法翻译系统同时用法英数据训练)、对输出进行预测、用未来信息预测当前信息等(还有一个quantization smoothing,没太明白)。NLP各领域里,典型的辅助任务选取有如下实例

    • 语音识别,常用音素识别(phonetic recognition)和帧级别状态分类(frame-level state classification)
    • 机器翻译,常用多语言联合学习,也有人将机器翻译和序列标注或命名实体识别相结合,或者做将图像描述做辅助任务
    • 多语言任务,也可以将多种语言模型联合起来训练
    • 语义分析,通常是将不同的形式化结果联合学习
    • QA与阅读理解,通常是将某个复杂端到端模型的不同部分一起学习,例如联合学习一个句子选择模型和一个答案生成模型
  • 无监督的。例如引入一些通用任务(如语言模型)来进行表示学习,或者学习序列模型的初始状态

为什么多任务学习能够有效

假设有两个相关的任务 A A A B B B,两者依赖于一个共同的隐藏层表示 F F F,多任务学习的有效性可以从如下几方面来阐述

  • 隐含地做了数据增强。不同任务有不同的噪声模式,模型同时学习两个任务可以忽视数据相关的噪声,学到更普遍的表示结果(个人任务这个更像是正则化)
  • 能集中注意力。如果任务噪声很大,或者数据量小而维度高,则很难让模型区分相关和不相关特征。多任务学习可以帮助模型聚焦于有用的特征,因为此时其它任务可以提供一些额外的“证据”来帮助区分哪些特征有用,哪些没用
  • “窃听”。模型在学习任务 A A A时,这个任务可能受特征 G G G影响明显,但是由于 A A A G G G的交互比较复杂,或者其它特征干扰,使得模型在只学习 A A A时难以学到 G G G,然而在学习 B B B时却可以容易学到。多任务学习允许模型“窃听”,通过 B B B学到本来难学的特征
  • 表示偏差。多任务学习使模型更倾向于其它任务也倾向的表示结果。因此同时模型在未来也能更好泛化
  • 正则化。多任务学习通过引入归纳偏置,使得自己本身就是一个正则项,因此可以减少过拟合风险

顺序迁移学习

在顺序迁移学习场景下,源端任务和目标端任务不同,训练分别按顺序进行,而不是像多任务学习那样多个模型联合优化。顺序迁移学习的目标是将训好的模型(模型由源端任务训练得到)所拥有的知识转移到目标模型上,以提高目标模型的性能,其在以下三个场景会比较有效

  • 两个任务所需要的数据不能同时得到
  • 源端任务所拥有的数据远多于目标任务所拥有的
  • 需要适配多个目标任务

顺序迁移学习一般包含两个阶段

  • 预训练阶段,模型在源端任务上训练,耗费的资源比较多,不过只需要训练一次。为了最大化顺序迁移学习的效率,通常要在源端任务上训练一个通用表示,使其能助益于多个目标任务。可以把预训练和多任务学习结合为多任务预训练,这样学到的知识可泛化性更强。根据源端任务监督信号的不同来源,可以将源端任务分成三类
    • 传统监督任务(traditional supervision,个人感觉就是有监督任务)。已有工作如在资源丰富平行语料上训练机器翻译模型,然后应用于低资源语言对;预训练一个词性标注模型然后用来分词;在开放领域上训练QA模型然后用在专业领域上,等等。由于有监督任务需要大量标注数据,这类任务是否适合作为预训练任务,需要打一个问号
    • 远距离监督任务(distant supervision,个人感觉更像是半监督任务)。其使用启发式方法和专业知识来自动获取大量有噪声的有监督数据。已有的工作有通过训练模型预测emoji/emoticon/连词/话语标记(如but、because等词)来做预训练。与之相似的还有自监督学习,只不过前者只有一部分数据有标签(而且还混杂噪声),标签由预设模式产生,而后者是自动为所有训练样本生成标签。有时认为语言模型就是一种自监督学习
    • 无监督任务。与前述任务类型不同,无监督任务扩展性更强,接近于人类的学习方法,不需要有标签数据。有监督任务由于标签的存在,因此学习过程只需要让模型捕捉对任务有帮助的表示,而无监督学习由于没有明确的目标,需要模型把握更宽泛的知识结构和语言的意思,因此学到的知识更可迁移。NLP领域里的无监督预训练有很长的历史,它们很多都是NLP的基础方法,关注从无标签数据中学习单词的表示,例如大名鼎鼎的Word2vec、GloVe等等。这些方法通常可以分为两种:使用语言模型的一种变种,或者使用矩阵分解获得一个单词共现矩阵
  • 适配阶段,学到的知识迁移到目标任务上,这个过程通常很快(与多任务学习不同,多任务学习训练目标模型时比较耗费资源)。适配有三种方法:特征提取、微调和残差适配
    • 特征提取:预训练模型权重保持不变,送入下游任务
    • 微调:作为下游任务的初始化参数,但是训练过程中也更新预训练模型。微调适用于源任务和目标任务相似的场景,而特征提取则相反。2017年左右针对微调提出的一种新技术残差适配(residual adapter),在预训练模型的层之间插入新的参数,且要求参数数量要小。这些参数与模型其它部分通过残差连接,这样模型在训练时可以跳过对下游任务没有帮助的适配器。微调时通常不希望对模型改动太大,因此通常有如下集中策略
      • 将学习率调小
      • 对模型施加一些惩罚项,例如对预训练模型参数和新模型参数的差值施加L2惩罚
      • 固定若干层使其参数不变,例如只微调模型的最后一层,或者在训练早期保持模型底层不变

终生学习(Lifelong learning)

当顺序迁移学习应用于多个任务时,称作终生学习,也被称作学习如何学习(learning to learn)或元学习(meta-learning)。终生学习中,源任务和目标任务不再泾渭分明,而是顺序学习 T T T个任务。终生学习模型通常包含两个成分

  • 知识库(KB),用来存储在过去的任务中学习到的信息,这些信息可以用来求解接下来的任务。所存储的信息通常有三种形式
    • 功能型,即存储每个任务的训练样本。代价昂贵,但是比较简单,因此最常用
    • 关系型,存储从前面任务中提取的概念、模式和关系,需要模型有更强的抽象能力
    • 表示型,即过去的信息以学到的参数存储起来,也可以是模型的隐藏状态
  • 学习者(learner)

终生学习可以看做是一种在线的多任务学习,其在NLP里最常用的两个领域是信息提取和情感分析。

此外,原文将元学习看做是终生学习的一种手段,其中,元学习最常用的策略是使用一个独立的控制器来控制基模型的学习过程,例如Wolf2018使用一个高层LSTM来更新语言模型的权重。另一种策略是进行“元优化”,以学习模型参数为目标,其生成的初始化参数可以让模型在下游任务上的微调更容易。这类工作的开山鼻祖是模型不可知论元学习(Model-Agnostic Meta-Learning, MAML),有人将其用在低资源机器翻译上(Gu2018)。元学习的基本思路是通过反复模拟适配场景来学习一个好的初始化参数。由于在大数据集上微调的代价太大,所以元学习基本都用在少样本学习(few-shot learning)场景

领域适配

(本小节引用文献相对细碎,建议直接阅读原文)

机器学习领域通常假设训练数据和测试数据独立同分布,但是当模型被应用于真实环境下时,这样的假设就无法成立了,所以需要领域适配。领域适配不需要模型在所有任务上普遍表现得好,只需要对特定任务发挥出色就可以。与顺序迁移学习不同,领域适配通常要用在大量无标签样本上,所以需要的是无监督方法。具体地,这些方法可以分为三类

基于表示的方法

基于表示的方法试图修改数据的底层表示,或是要基于领域相似度找出在源领域和目标领域都存在的特征,或是要在两个领域的共享低维空间中表示数据

领域相似度

可以通过让两个领域的特征分布尽量相似来尝试进行领域适配(只需要丢掉在目标数据中不存在的特征就可以)。最常见的分布相似性度量方法是KL散度(Kullback-Leibler divergence): D K L ( P S ∣ ∣ P T ) = E x ∼ P S [ log ⁡ P S ( x ) − log ⁡ P T ( x ) ] D_{\rm KL}(P_S||P_T) = \mathbb{E}_{ {\bf x}\sim P_S}[\log P_S({\bf x}) -\log P_T({\bf x})] DKL(PSPT)=ExPS[logPS(x)logPT(x)],其余还有JS散度(Jensen-Shannon divergence)、Rényi散度、MMD(Maximum Mean Discrepancy)、Wasserstein距离和 A \mathcal{A} A距离等

数据加权和数据选择

可以通过某些方法度量目标数据各样本与已有训练集中各样本的相似度。如果利用相似度对训练数据给出权重,影响其对损失函数的贡献,则这种方法为数据加权;如果设定阈值,淘汰掉一批不相关的数据,则这种方法为数据选择。机器翻译领域中常用数据选择的方法,例如通过语言模型打分进行筛选(原文中大量的方法都出现在统计翻译时代)

自标注技术

自标注技术是半监督学习的一种,核心思路是在有标签数据上训练模型,然后让这个模型给未标注数据打上“伪”标签,然后用带有真伪标签的数据混合,训练更好的模型。在混合时,对带有伪标签的数据,通常使用一个阈值选择置信度比较高的。在此基础上,还有一些其他自标注技术,例如

  • 联合训练(Co-training),选择两组条件独立特征集合,要求每个集合中的特征强到足够能训练一个模型。在初始两个模型训练好以后,在每一轮迭代过程中,只有被某一个模型有足够信心分类的数据被添加到另一个模型的训练集里,也就是两个模型各自为另一个模型不确定的数据贴标签
  • 民主联合训练,对联合训练的改进,不再使用独立的特征集,而是使用不同结构的模型,来引入不同的归纳偏置
  • 三角训练,可以看做是民主联合训练的特例。使用bootstrap抽样为三个不同结构的模型准备好训练集,分别训练初始模型。然后,对无标签数据,如果有两个以上模型给它的标签是一致的,那么它就被加入到训练集中。当三个分类器都不变化时,训练结束

本节最后一个小节讲述了多源领域适配,不过引用的工作更加琐碎,这里就不介绍了

前BERT时代的两种经典RNN预训练模型

前文对迁移学习作了一个简单的介绍,其中在顺序迁移学习部分,提到这种迁移学习方法大致可以分为两步,即预训练和微调。自2013年Mikolov提出word2vec开始至2018年以前,基于神经网络的NLP方法所使用的的预训练“模型”基本上都是基于词向量的。词向量使得人们可以不再仅以0-1独热向量表示词语,而是可以获得词语的稠密表示,且可以通过一些向量运算发现词之间的关系。但是词向量模型的产生结果通常是一组独立于上下文的词向量,表示能力不够强。在2018年初,ULMFiT和ELMo两种基于LSTM的预训练模型相继问世,不仅在词的基础上引入了上下文信息,还通过多层结构同时引入了语法和语义信息。2018年底BERT的问世更是使NLP的预训练模型进入了一个新的时代,其与其子孙直至本文写作之日(2020年6月)仍繁荣不衰。由于BERT基于Transformer结构和自注意力机制,本系列文章尚未涉及,因此本文先介绍这之前两种经典的预训练模型ULMFiT和ELMo

ULMFiT

ULMFiT(Universal Language Model Fine-tuning)也是由Ruder提出,试图将CV领域里比较成熟的迁移学习技术引入NLP。在这之前,NLP领域已经有一些基于语言模型的预训练工作,但是这些工作需要大量领域相关文档微调,而且语言模型容易在小数据集上过拟合,在对分类问题微调时又容易灾难性遗忘。ULMFiT就是为了解决这样的问题而诞生

ULMFiT使用的是一个有三个隐藏层的双向AWD-LSTM,分三步解决具体问题:

  1. 预训练语言模型。在这个阶段,不区分具体问题领域,直接在收集到的通用语料上训练。这一步的目的是让各个层捕捉语言的整体特征。原文中的实验所用数据是Wikitext-103,有1亿个词
  2. 目标领域语言模型微调。目的是学习任务相关的语言特征
  3. 目标任务分类器微调。此时要保持模型底层参数不变,调整上层。此时需要引入两个额外的线性层,每层使用批归一化BN,ReLU做中间层激活函数,输入是预训练模型最后一个隐藏层状态的池化结果,输出使用softmax激活来获得所有类别的概率分布。这两层是从头开始学习

示意图如下图所示

神经翻译笔记4扩展d. 迁移学习概述与前BERT时代的NLP预训练模型_第2张图片

在目标领域上微调语言模型时,原文引入了如下技术

分层微调(discriminative fine-tuning, discr)。动机是网络的不同层捕捉的信息类型不同,因此被微调的程度也应不同,这种方法可以通过对不同层设置不同学习率来实现。设顶层学习率为 η ( L ) \eta^{(L)} η(L),实践表明各底层遵循 η ( l − 1 ) = η ( l ) / 2.6 \eta^{(l-1)} = \eta^{(l)} / 2.6 η(l1)=η(l)/2.6的设置效果较好

斜三角学习率(slanted triangular learning rates, STLR)。目的是让模型快速收敛到合适区域,然后缓慢微调。学习率调整策略具体为

c u t = ⌊ T ⋅ c u t _ f r a c ⌋ 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 ) o t h e r w i s e η t = η m a x ⋅ 1 + p ⋅ ( r a t i o − 1 ) r a t i o \begin{aligned} cut &= \lfloor T \cdot cut\_frac \rfloor \\ p &= \begin{cases} t/cut & {\rm if\ }t < cut \\ 1 - \frac{t-cut}{cut \cdot (1/cut\_frac - 1)} & {\rm otherwise}\end{cases} \\ \eta_t &= \eta_{max} \cdot \frac{1 + p\cdot (ratio - 1)}{ratio} \end{aligned} cutpηt=Tcut_frac={t/cut1cut(1/cut_frac1)tcutif t<cutotherwise=ηmaxratio1+p(ratio1)

各参数的意义为:

  • T T T为训练总共要进行的迭代次数
  • c u t _ f r a c cut\_frac cut_frac为一个0到1之间的数,由 c u t _ f r a c cut\_frac cut_frac T T T计算的 c u t cut cut决定在训练过程中,前 c u t cut cut步学习率线性递增, c u t cut cut步后线性递减
  • r a t i o ratio ratio是最大学习率 η m a x \eta_{max} ηmax与所允许最小学习率之间的比值

原文采用的配置是 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

在目标领域上微调分类模型时,除了上述两种技巧,还额外使用了如下方法

  • 连接池化,即送进新的线性层的输入实际是三个向量的拼接,分别是最后一个时刻 T T T的隐藏状态 h ( T ) \boldsymbol{h}^{(T)} h(T)、前面若干时间步(时间步多到能填满显存)所有状态的最大池化结果和这些状态的平均池化结果
  • 逐层解冻,即不马上同时微调所有层,而是先从最上层开始(因为其所蕴含的通用知识最少),在第一个epoch先只微调最上层,下一个epoch解冻次上层,微调两层……以此类推
  • 文本分类的BPTT,将文档分割为长度固定的batch,大小为 b b b,在每个batch开始之时,模型用前一个batch的最终状态初始化

原文通过一系列实验,得出如下结论

  • 迁移学习对少样本学习,效果很好
  • 预训练对大中小数据集均有效,甚至可以降低一半错误率
  • 结构简单,未经精细调参的语言模型也可以达到比较好的效果。使用普通RNN语言模型且不加dropout,在大数据集上错误率仅比精调过的AWD-LSTM低一个点
  • 语言模型微调、分类器微调这两步均有效,且对小数据集效果更明显
  • 使用双向模型可以进一步提升模型效果

ELMo

ELMo这一名字是Embeddings from Language Models的缩写,从名字可以看出ELMo是通过训练语言模型而得到词向量。不过这里所说的语言模型并非传统的、根据上文信息推断下一个词的语言模型,而是双向的语言模型,这样可以更好地捕捉单词的上下文信息。

对于给定的标识符 t k t_k tk,使用 L L L层双向语言模型可以得到 2 L + 1 2L+1 2L+1个向量表示
R k = { x k L M , h → k , j L M , h ← k , j L M ∣ j = 1 , … , L } = { h k , j L M ∣ j = 0 , … , L } \begin{aligned} R_k &= \{\boldsymbol{x}_{k}^{\rm LM}, \overrightarrow{\boldsymbol{h}}_{k,j}^{\rm LM}, \overleftarrow{\boldsymbol{h}}_{k,j}^{\rm LM} | j = 1, \ldots, L \} \\ &= \{\boldsymbol{h}_{k,j}^{\rm LM}|j=0, \ldots, L\} \end{aligned} Rk={xkLM,h k,jLM,h k,jLMj=1,,L}={hk,jLMj=0,,L}

其中 h k , 0 L M \boldsymbol{h}_{k,0}^{\rm LM} hk,0LM是嵌入层, h k , j L M = [ h → k , j L M ; h ← k , j L M ] \boldsymbol{h}_{k,j}^{\rm LM} = \left[\overrightarrow{\boldsymbol{h}}_{k,j}^{\rm LM};\overleftarrow{\boldsymbol{h}}_{k,j}^{\rm LM}\right] hk,jLM=[h k,jLM;h k,jLM]是每个双向LSTM隐藏层隐藏状态拼接后的结果。ELMo会把得到的这些表示组合成一个向量以传递给下游任务,即
E L M o k t a s k = E ( R k ; Θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M \boldsymbol{ELMo}_k^{\rm task} = E\left(R_k; \Theta^{\rm task}\right) = \gamma^{\rm task}\sum_{j=0}^L s_j^{\rm task}\boldsymbol{h}_{k,j}^{\rm LM} ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM

其中 s t a s k \boldsymbol{s}^{\rm task} stask是使用softmax归一化的权重,意义是控制各层向量的贡献比例,在下游任务中训练; γ t a s k \gamma^{\rm task} γtask是一个缩放因子,使得ELMo得到的向量尺度可以与下游任务相吻合。原文建议在每个隐藏层先做一个层归一化操作,然后再训练权重值。此外,加入适量的dropout,以及尝试加入L2正则化对ELMo的效果都有提升作用

得到ELMo的词向量表示以后,下游任务对输入序列的每个标识符 t k t_k tk不再只使用独立于语境的词向量 x k \boldsymbol{x}_k xk,而是将其与ELMo词向量 E L M o k t a s k \boldsymbol{ELMo}_k^{\rm task} ELMoktask拼接。对于某些任务,将隐藏层向量与ELMo词向量拼接也有好处。由于大多数NLP任务所使用的神经网络结构其底层都是相同的,因此ELMo词向量的适用领域非常广泛。此外实验表明,在下游任务上微调ELMo,语言模型的效果会显著提升

具体地,ELMo的体系结构为

  • 输入层使用基于字符的CNN来构建初始的词嵌入(无上下文信息),共2048个滤波器,使用2层高速公路网络1,输出层512维
  • 隐藏层是两层双向LSTM,每个单元4096维
  • 输出层是512维全连接层

网络使用残差连接,正向反向LSTM共享输入(词嵌入矩阵)和输出(softmax)

实验表明,ELMo词向量中低层的部分更多捕获了单词的语法信息,高层部分更多捕获了单词的语义信息

讨论:微调还是不调,这是一个问题

本节来自于Ruder论文的7.2节。原文即对比了上面提到的2018年上半年明星模型ELMo和下半年明星模型、开创NLP预训练模型新纪元的BERT,因此感觉结论更广泛,更有实效性

对于预训练模型,通常有两种使用方法:

  • 特征提取(EX):固定模型参数不变,整体传给下一个任务。优点是计算量更小
  • 微调(FT):在新任务上继续训练修改模型参数。优点是适应性强,适用于多个不同任务

原文将ELMo和BERT应用在了若干任务中,包括命名实体识别、情感分析、自然语言推理、同义句识别(paraphrase detection)和语义相似度检测,对比的基线模型使用了Skip-thoughts提取句子向量作为特征。两者效果均显著超越极限模型,对于ELMo,EX效果好于FT,但是对BERT则相反(不过BERT做EX的效果仍然优于ELMo做EX的效果)。对此,原文作了若干分析

  • 根据CV的经验,当目标任务与原始任务较远时,FT通常效果不佳。BERT微调后在语义相似度检测上表现好,是因为这个任务与BERT预训练时要对下一句话做预测相关;ELMo微调后在句子对相关的任务(自然语言推理、同义句识别和语义相似度检测)上效果不佳,是因为这些任务和语言模型离得有点远
  • LSTM难以对句子对之间的交互关系建模,除非引入额外的注意力机制;如果让BERT对句对中的两个句子分别编码,效果也会下降,所以BERT的表示中实际编码了句子间的关系
  • 在预训练模型上再加入新的参数,然后微调,会让模型效果变差。如果加入新的参数后,先固定预训练模型本身的参数,训练几轮新的参数再解封预训练模型一起微调,模型效果仍然会下降(所以认为不是新参数随机初始化的锅)
  • ELMo的微调比较难,需要仔细设置超参数

(这里没有记录全部结论)

参考文献

  • Ruder Ph. D. Thesis
  • [PanJialin2009]: Pan, S. J., & Yang, Q. (2009). A survey on transfer learning. IEEE Transactions on knowledge and data engineering, 22(10), 1345-1359.
  • [ULMFit]: Howard, J., & Ruder, S. (2018, July). Universal Language Model Fine-tuning for Text Classification. In Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (ACL 2018) (pp. 328-339).
  • [ELMo]: Peters, M. E., Neumann, M., Iyyer, M., Gardner, M., Clark, C., Lee, K., & Zettlemoyer, L. (2018). Deep contextualized word representations. In Proceedings of NAACL-HLT (pp. 2227-2237).

  1. 高速公路网络[Srivastava2015]有点像LSTM门机制和残差网络的组合体,简单说就是学习一个线性变换 T ( x , W T ) = σ ( W T T x + b T ) T(\boldsymbol{x}, \boldsymbol{W}_T) = \sigma(\boldsymbol{W}_T^\mathsf{T}\boldsymbol{x} +\boldsymbol{b}_T) T(x,WT)=σ(WTTx+bT),使得输出由两部分组成,一部分是隐藏层变换后的状态,一部分是原始输入。即 y = h ⊙ T ( x , W T ) + x ⊙ ( 1 − T ( x , W T ) ) \boldsymbol{y} = \boldsymbol{h}\odot T(\boldsymbol{x}, \boldsymbol{W}_T) + \boldsymbol{x} \odot (\boldsymbol{1}-T(\boldsymbol{x}, \boldsymbol{W}_T)) y=hT(x,WT)+x(1T(x,WT)) ↩︎

你可能感兴趣的:(神经翻译笔记)