1. 背景
-
2个概念-2种语言模型方法:
-
自编码(Auto Encoder):根据上下文的信息来生成当前词的方式,BERT使用的就是此种方式
-
优点:
-
模型具备上下文信息(双向信息)
-
Long-Term Dependency(长期记忆特性)
-
-
缺点:
-
预训练任务与下游任务目标不一样,预训练时其中一个任务是MLM,但是在fine-tuning的时候,文本里面是没有[MASK]的
-
缺乏生成能力
-
一条文本里,多个[MASK]预测的时候,并不考虑其他[MASK]信息,也就是说[MASK]之间是独立的(☺类似于朴素bayes的那种感觉)
-
-
LOSS
-
-
自回归(Auto Regressive):根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。
即便是ELMO做了两个方向(从左到右以及从右到左两个方向的语言模型),但是是分别有两个方向的自回归LM,然后把LSTM的两个方向的隐节点状态拼接到一起,来体现双向语言模型 h=[h1,h2],h1是正向的AR产生的Hidden States,h2是逆向的AR产生的Hidden States
-
优点:
-
具备生成能力
-
上文和下文之间紧密的相关性
-
无监督的
-
严格的数学表达 P(w1,w2,...,wn)=P(w1)P(w2|w1)...P(wn|w1,...wn-1)
-
-
缺点:
-
单向信息,只有上文,没有下文
-
离得近,未必有关系
-
-
LOSS:
-
-
-
Transformer
缺点:
-
只能处理定长序列,且对于过长的序列,其计算复杂度非常高,假设输入序列长度为N,那么在self-attention中将产生N*N的矩阵,且transformer模块在bert中存在至少12层。
-
Transformer序列长度的极限一般在512,无法建模超过固定长度的依赖关系,对长文本编码效果差。
-
Transformer把要处理的文本分割成等长的片段,通常不考虑句子(语义)边界,导致上下文碎片化(context fragmentation),片段之间没有任何的信息交互
-
-
改造目标:采用AR方式达到如下效果
-
预训练时不采用[MASK]的MLM任务
-
让AR也具备双向的编码能力(难点)
-
被MASK的词之间的关系
-
处理长文本
-
2. 原理详述
-
核心思路
XLNet仍然遵循两阶段的过程,第一个阶段是语言模型预训练阶段;第二阶段是任务数据Fine-tuning阶段。它主要希望改动第一个阶段,就是说不像Bert那种带Mask符号的Denoising Auto Encoder的模式,而是采用自回归LM的模式
-
Permutation Language Model
使用单词的排列来构建上下文信息的使用,如图,如果要预测单词3,则随机产生几种排列如3241,2431,1423,4312,第一种因为3是第一个,所以没有上文信息,第二个2和4在3的前面,所以2和4作为了3的上下文(2是上文,4是下文),第三种142均在3前面,所以使用142来构建上下文序列预测3,第四种同理。
损失函数:
-
Attention Mask
需要强调一点,尽管上面讲的是把句子X的单词排列组合后,再随机抽取例子作为输入,但是,实际上你是不能这么做的,因为Fine-tuning阶段你不可能也去排列组合原始输入。所以,就必须让预训练阶段的输入部分,看上去仍然是x1,x2,x3,x4这个输入顺序,但是可以在Transformer部分做些工作,来达成我们希望的目标。
-
Two-Stream Attention
h:内容表示,乘以对应的Q,K,V矩阵后产生对应的表示
g:当前位置表示,乘以对应的Q,K,V矩阵后产生对应的表示
==How to Understand==
Content Stream Attention:它是Transformer中的标准自注意力
Query Stream Attention:XLNet引入它来替换BERT中的 [MASK] token
如果BERT想用上下文单词x1和x2的知识来预测x3,它可以使用[MASK]来表示x3 token。[MASK]只是一个占位符。x1和x2的嵌入包含位置信息,帮助模型“知道”[MASK]的是x3
XLNet的情况有所不同:一个token x3将服务两种角色。当它被用作内容来预测其他标记时,我们可以使用内容表示(通过内容流注意力来学习)来表示x3。但是如果我们想要预测x3,我们应该只知道它的位置而不是它的内容。这就是为什么XLNet使用查询表示(通过查询流注意力来学习)来保留x3之前的上下文信息,只保存x3的位置信息。
==For Example==
-
假设一个句子,原始顺序是
[x1, x2, x3, x4]
-
随机得到一个分解的顺序为
[x3, x2, x4, x1]
-
图(a)是内容表示的计算。如果要预测x1的内容表示,应该拥有所有4个token内容信息。
KV = [h1, h2, h3, h4]
和Q = h1
-
图(b)是查询表示的计算。如果要预测x1的查询表示,不能看到x1本身的内容表示。
KV = [h2, h3, h4]
,Q = g1
-
图(c)是整个计算过程。首先,
h
和g
被初始化为e(xi)
和w
。在内容掩码和查询掩码之后,双流注意力将输出第一层输出h^(1)
和g^(1)
,然后计算第二层。
-
-
Transformer-XL (==XL是extra long的意思==)
-
提出片段级递归机制(segment-level recurrence mechanism),引入一个记忆(memory)模块(类似于cache或cell),循环用来建模片段之间的联系。
-
使得长距离依赖的建模成为可能;
-
使得片段之间产生交互,解决上下文碎片化问题。
-
-
提出相对位置编码机制(relative position embedding scheme),代替绝对位置编码。
self-attention的计算公式:
transformer-XL中将其改写为如下:
-
改写逻辑如下:
-
首先将所有的U(j)改为R(i-j),表示对key来说将绝对位置转换为相对query(xi)的位置。R(i-j)也是基于正弦波的,可以理解为R1=U1,R2=U2,...
-
(c)和(d)中,UW 表示query相关的绝对位置向量,改为相对位置以后,query应该和自己的位置没关系,所以将每个head对应的UW使用一个和位置i无关的向量u表示,v也是同理。由于Wq是一个trainable的参数,所以u和v也是trainable
-
-
-
-
主要改进点:
XLNet是Bert、GPT 2.0和Transformer XL的结合:
-
通过PLM预训练目标,吸收了Bert的双向语言模型
-
GPT2.0的核心其实是更多更高质量的预训练数据,也被XLNet所应用;
-
Transformer XL的主要思想也被吸收到XLNET中
-
-
解决的问题:
-
使用PLM的预训练目标,使得AR(自回归)语言模型也具备了双向语言的信息
-
Two-Stream Attention机制解决了在输入顺序保持原状的情况下,无法获得Permutation ML训练方式的问题
-
使用Transformer-XL解决了Transformer对于长文档NLP应用不够友好的问题
-
-
与其他模型的对比
比较项 BERT XLNET 预训练MASK机制 是 否 长文本多segment信息传递 否 相对位置编码以及分段RNN机制 相对位置编码 否 是 序列双向信息(上下文) 是 是 预训练语料 较少 囊括更多语料,并对质量进行了筛选过滤 -
模型评价指标
-
XLNet对于阅读理解类任务,相对Bert,性能有极大幅度地提升
其中,RACE和SQuAD 2.0是文档长度较长的阅读理解任务,任务难度也相对高。可以看出,在这两个任务中,XLNet相对 Bert_Large,确实有大幅性能提升(Race提升13.5%,SQuAD 2.0 F1指标提升8.6)。在Squad1.1上提升尽管稍微小些,F1提升3.9%,但是因为基准高,所以提升也比较明显。
-
其他任务上的性能对比
MNLI:自然语言推断任务,,即给出一对(a pair of)句子,判断两个句子是entailment(相近),contradiction(矛盾)还是neutral(中立)的。 由于也是分类问题, 也被称为sentence pair classification tasks
QNLI(Question Natural Language Inference): 也是一个二分类问题,两个句子是一个
(question, answer)
对. 正样本为answer
是对应question
的答案,负样本则相反QQP(Quora Question Pairs): 这是一个二分类数据集,目的是判断两个来自于
Quora
的问题句子在语义上是否是等价的RTE(Recognizing Textual Entailment): 是一个二分类问题,类似于MNLI, 但是数据量少很多
SST-2(Stanford Sentiment Treebank): 单句的二分类问题,句子的来源于人们对一部电影的评价,判断这个句子的情感
MRPC(Microsoft Research Paraphrase Corpus): 句子对来源于对同一条新闻的评论, 判断这一对句子在语义上是否相同
CoLA(Corpus of Linguistic Acceptability): 单句的二分类问题,判断一个英文句子在语法上是不是可接受的
STS-B(Semantic Textual Similarity Benchmark): 这是一个类似回归的问题。给出一对句子, 使用
1~5
的评分评价两者在语义上的相似程度WNLI(Winograd NLI),自然语言推断任务,是一项阅读理解任务,其中系统必须读一个带有代词的句子,并从列表中找到代词的指代对象。
-
3. 算法应用场景
其实XLNET与bert一样,是一个特征提取的深度网络,可以支持很多下游任务:
-
文本分类
-
情感分析
-
智能问答
-
阅读理解
-
文本生成
-
文章摘要
-
智能写作
-
机器翻译
-
-
序列标注
-
实体识别
-
词性识别
-
...
-
附图
一个诗句生成任务,将形式和主题转换为[形式,标识符 1,主题,标识符 2 ]的初始序列,然后将初始序列给到模型,并对主体字段逐个进行解码。在解码过程中,并不需要硬约束来保证形式的正确性。相反,该模型能够在解码时,自动分配逗号和句号的位置。当完成诗歌的生成时,会以「EOS」的 token 来结束这一过程。
效果: