新智元从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史( 二 )


1.2 Self-Attention
接下来简单介绍BERT以及XLNet、MPNet所使用Transformer的核心模块:自注意力机制 。
新智元从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史
本文插图
Self-Attention
自注意力机制重点在于学习输入序列自身的内部信息 。 具体地 , 每个可以观察到序列中其他所有的信息 , 并通过”注意力“交互 , 其余的会产生不同大小地权重(整个过程类似加权) 。 上例中 , “西子”和“西湖”关系紧密 , 因此它们之间的attention权重更大(大于“西子”和“淡妆”) 。 最终自注意力层的输出涵盖了序列所有的语义信息 , 实现了双向编码上下文 。
同时 , 这种双向性使得模型可以同时观测序列的所有位置 , 解决了RNN等递归模型无法高效并行的瓶颈 。
1.3 Denoising Auto Encoder
由于架构采用12层双向Transformer且训练目标包含还原位置的信息 , BERT被称为去噪自编码语言模型(DAE) 。
而在BERT之前 , NLP领域的语言模型几乎是Auto Regression(自回归)类型 , 即当前位置的字符预测需要编码之前tokens的语义信息 , 使得模型训练/预测只能单向进行 。
虽然ELMO采用了BiLSTM , 但只是前向、后向两次输出的简单拼接 , 包含的全局语义信息依然较弱 。
1.4 BERT缺点
虽然效果好 , BERT的缺点也很明显 。 从建模本身来看 , 随机选取15%的字符mask忽视了被mask字符之间可能存在语义关联的现象 , 从而丢失了部分上下文信息 。 同时 , 微调阶段没有mask标记 , 导致预训练与微调的不一致 。
2.XLNet 原理及 PLM 简述
【新智元从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史】和BERT不同 , XLNet本质上是用自回归语言模型来同时编码双向语义信息的思路 , 可以克服BERT存在的依赖缺失和训练/微调不一致的问题 。 同时为了弥补自回归模型训练时无法同时看到上下文的缺陷 , XLNet曲线救国地提出了PLM排列语言模型的训练方式 。
2.1 排列语言模型 - Permutation Language Model
对于一个长度为N的序列 , 我们知道其存在种因式分解顺序 , 通过一次采样一种序列的因式分解组合 , 每个token总是能够在不同的序列中观察到其他所有token;同时模型参数对于所有的因式分解顺序共享 , 因此从期望的角度上看 , XLNet模型能够双向地编码上下文 。
新智元从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史
本文插图
例如 , 初始序列为 , 这里的只能关注到前面的 , 但在某种因式分解排列中 , 具备了关注的能力 。 另外 , XLNet的原始输入和BERT相同 , 依然是正常排序的 。
2.2 双流自注意力
那XLNet是如何在保持输入顺序不变的同时 , 对序列进行乱序编码的呢?
简单而言 , 通过Attention掩码机制 , 将当前token及其之后的token(不该看到的部分)嵌入信息用attention-mask掩盖 。 具体实现上 , 使用了一种双流自注意力机制 。
例如某个序列的因式分解顺序为和 , 如果需要预测第三个位置的token , 传统的自回归模型通过的编码来预测后面的token , 概率表达式为 。 然而这样会带来一个问题:x2和x1的编码和需要预测的下一个token是无关的 , xt既可以是x4也可以是x3 , 即P(x3|x2,x1) = P(x4|x2,x1) , 这显然不合理(传统RNN是按正常的序列进行递归预测 , 位置是正确的 , 所以不存在这个问题) 。 因此XLNet需要引入待预测token的位置信息 , 例如或 , 确保生成合理的结果 。
然而这又带来了新的矛盾 。 对于某个因式分解顺序 , 在预测x4的时候 , 模型不能编码自身的token-embedding , 只能编码前面的以及自身的position-embedding , 否则训练就没有意义了;然而在预测x3的时候 , 又需要用到x4的完整的编码信息 。 如果继续沿用BERT的自注意力机制必然存在问题 , 因此XLNET将自注意力机制拆分为Query流和Content流 。 Query流中当前token只能关注到前面的token和自身的位置信息 , Content流中当前token可以关注到自身 。