XLNet详解

BERT本身很有效,但它也存在一些问题,比如不能用于生成、以及训练数据和测试数据的不一致(Discrepancy)。
在本文中,我们重点介绍比BERT更强大的预训练模型XLNet,它为了达到真正的双向学习,采用了Permutation语言模型、以及使用了双流自注意力机制,并结合了Transformer-XL的相对位置编码

1. Unsupervised Pre-training

目前神经网络在进行训练的时候基本都是基于反向传播(Back Propagation,BP)算法,通过对网络模型参数进行随机初始化,然后利用优化算法优化模型参数。但是在标注数据很少的情况下,通过神经网络训练出的模型往往精度有限,“预训练”则能够很好地解决这个问题,并且对一词多义进行建模

预训练是通过大量无标注的语言文本进行语言模型的训练,得到一套模型参数,利用这套参数对模型进行初始化,再根据具体任务在现有语言模型的基础上进行精调。预训练的方法在自然语言处理的分类和标记任务中,都被证明拥有更好的效果。目前,热门的预训练方法主要有:ELMo、OpenAI GPT、BERT和XLNet等。

在NLP中,早期的无监督预训练模型主要是word2vec(SkipGram、CBOW)和Glove,这些模型都使用了不考虑上下文嵌入的方式得到词向量。

ELMo:相较于传统的使用词嵌入(Word embedding)对词语进行表示,得到每个词唯一固定的词向量,ELMo 利用预训练好的双向语言模型,根据具体输入从该语言模型中可以得到在文本中该词语的表示。在进行有监督的 NLP 任务时,可以将 ELMo 直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。这篇论文提出的 ELMo 模型是 2013 年以来 Embedding 领域非常精彩的转折点,并在 2018 年及以后的很长一段时间里掀起了迁移学习在 NLP 领域的风潮。简单来说,ELMo 是一种基于语境的深度词表示模型(Word Representation Model),它可以捕获单词的复杂特征(词性句法),也可以解决同一个单词在不同语境下的不同表示(语义)

在ELMo的基础之上,OpenAI的研究人员在《Improving Language Understanding by Generative Pre-Training》提出了OpenAI GPT与ELMo为每一个词语提供一个显式的词向量不同,OpenAI GPT能够学习一个通用的表示,使其能够在大量任务上进行应用(比如GPT-2省去了微调的步骤,直接在末尾加上一定的标志便直接可以用于实际任务中)。GPT 采用无监督学习的 Pre-training 充分利用大量未标注的文本数据,利用监督学习的 Fine-tuning 来适配具体的 NLP 任务(如机器翻译等)。

ELMo和OpenAI GPT这两种预训练语言表示方法都是使用单向的语言模型来学习语言表示,而Google提出的BERT则实现了双向学习,并得到了更好的训练效果。
具体而言,BERT使用Transformer的编码器作为语言模型,并在语言模型训练时提出了两个新的目标:一个是 token-level 级别的MLM(Masked Language Model)和一个是 sentence-level 级别的NSP(Next Sentence Prediction)。MLM是指在输入的词序列中,随机的遮挡上 15% 的词,并对遮挡部分的词语进行双向预测。为了让模型能够学习到句子间关系,研究人员提出了让模型对即将出现的句子进行预测:对连续句子的正误进行二元分类,再对其取和求似然。
XLNet详解_第1张图片
自从ELMo、GPT和BERT出现之后,pretrain+finetune的两段式训练方法,成为NLP任务的主流做法。在公开的语料库上对大模型进行自监督或者无监督的预训练,然后在特定任务的语料库上对模型做微调。本文介绍另外一篇类似的算法XLNet。

2. AR与AE语言模型

AR:Autoregressive Language Modeling
AE:Autoencoding Language Modeling
XLNet详解_第2张图片
XLNet详解_第3张图片

3. XLNet提出的方法

3.1 Permutation Language Model

作者发现,只要在 AR中再加入一个步骤,就能够完美地将AR与AE的优点统一起来,那就是提出Permutation Language Model(PLM)。
XLNet详解_第4张图片
具体实现方式是,通过随机取一句话的一种排列,然后将末尾一定量的词给遮掩(和 BERT 里的直接替换 [MASK] 有些不同)掉,最后用 AR 的方式来按照这种排列依次预测被遮掩掉的词。
XLNet详解_第5张图片
我们可以发现==通过随机取排列(Permutation)中的一种,就能非常巧妙地通过 AR 的单向方式来习得双向信息了。==

论文中 Permutation 具体的实现方式是通过直接对 Transformer 的 Attention Mask 进行操作。
XLNet详解_第6张图片
比如说序号依次为 1234 的句子,先随机取一种排列3241。于是根据这个排列我们就做出类似上图的 Attention Mask。先看第1行,因为在新的排列方式中 1 在最后一个,根据从左到右 AR 方式,1 就能看到 234 全部,于是第一行的 234 位置是红色的(没有遮盖掉,会用到),以此类推。第2行,因为 2 在新排列是第二个,只能看到 3,于是 3 位置是红色。第 3 行,因为 3 在第一个,看不到其他位置,所以全部遮盖掉…

3.2 Two-Stream Self-Attention

为了实现 Permutation 加上 AR 预测过程,首先我们会发现,打乱顺序后位置信息非常重要,同时对每个位置来说,需要预测的是内容信息(对应位置的词),于是输入就不能包含内容信息,不然模型学不到东西,只需要直接从输入复制到输出就好了。

于是这里就造成了位置信息与内容信息的割裂,因此在 BERT 这样的位置信息加内容信息输入 Self-Attention (自注意力) 的流(Stream)之外,作者还增加了另一个只有位置信息作为 Self-Attention 中 Query 输入的流。文中将前者称为 Content Stream,而后者称为 Query Stream
XLNet详解_第7张图片
XLNet详解_第8张图片
XLNet详解_第9张图片
XLNet详解_第10张图片

3.3 Partial Prediction

XLNet详解_第11张图片

3.4 其他trick

相对位置编码见Transformer-XL
Relative Segment Encodings:

XLNet详解_第12张图片

4. 总结

XLNet详解_第13张图片

你可能感兴趣的:(NLP(包含深度学习))