NLP-5:XLNET

以下内容来自贪心学院NLP直播课。
简介:BERT本身很有效,但它本身也存在一些问题比如不能用于生成,以及训练数据和测试数据的不一致(Discrephancy)。本 次我们重点介绍XLNet模型,为了达到真正的双向学习,本身采用了Permutation语言模型,以及结合了对Transformer本身的改进,并采用Transformer-XL框架。
XLNet 作者的讲解:xlnet
在这里插入图片描述
XLNET 在设计的时候,提出了很多问题,他们是沿着这些问题 来设计这个算法的。
在这里插入图片描述
BERT 的目标函数来自于Auto-encoding(DAE)
XLNet属于 Autogressive。
我们之前说过 双向LSTM 其实并不是真正的双向,所以论文中如何做‘? Permutation language Model, 但是这个model 如何应用呢?Two-stream self Attention。

另外, Transformer-XL 后面会加上详细的解读。

1. Unsupervised pre-training

在这里插入图片描述
在NLP中,无监督数据是非常多的。
在这里插入图片描述
我们希望尽量将 无label的data 用起来,达到提升模型的效果。
如果只用label data,得到的效果可能没有 加上 无 label data的 效果好。

在这里插入图片描述
这样就有了Transfer,我们在Pre-training 训练的,希望可以应用到 上面预测,这也就是 迁移学习。
在这里插入图片描述
NLP中无监督学习有很多。
Elmo 和 Bert 有一些缺点 所以我们提出了XLnet.

2. Autogressive vs Auto-encoding

什么叫Autoencoder?
最初Auto-encoder 目的是想学出 图片更加有效的表示(compact representation)。
一般是用它来做一个降维操作的。
对于传统的Autoencoder,我们的目标函数 : 给一个输入,想重新得到一个向量,这个向量与输入越近越好。

所以目标函数是:||xi- x’i || 越来越小。x’= f(x_i)(f是模型).

什么叫Denoising AE?
我们希望在训练环境中,加上噪声,使得模型 鲁棒性更好。
那么我们在原来数据基础上 添加一个噪声,通过一层层转换 得到新的输出 X’。
我们希望这里得到输出与输入 越接近越好。只是这里的 f 模型的输入包含 X 和噪声▲

在这里插入图片描述
其实 BERT 本身就是DAE,因为他就是通过加入 MASK这个噪声 进行预测。
在这里插入图片描述
在这里插入图片描述
我们有2种目标函数 去训练模型

  • 左侧的Autoregressive

    1. 典型模型ELMo
    2. 语言模型
    3. 概率(通过之前时刻的单词 预测当前时刻的单词)Product Rule
    4. 从左到右的过程。
      问题就在: 理想的是 当我们预测 city 时 我们希望是 能考虑 city 前后的单词,但是这个模型只能从左到右,或者从右到左。所以问题就是 uni-directional. 只能考虑单向的 不能同时考虑两边。
      好处:考虑单词之间的连贯性 因为是基于前面预测后面,完全符合语言模型
  • 右侧的Autoencoding

    1. 典型模型就是BERT
    2. DAE
    3. 通过 Mask掉 New York, 通过后面的单词 预测起前面的 2个词。后面x’ 是 没有被Mask 的单词, 前面X 是被mask
      问题在于:被预测的Mask的词 之间的独立性假设。使得最终的结果会有问题。
      所以BERT 的问题 2个:1)独立性假设,2)【Mask】 在训练时有 但是 在预测时(使用时)并没有mask token(因为我们不需要添加mask token,直接把原始数据拿来预测就行了),所以存在不一致的问题

请注意 左侧和右侧 一个是等号 一个是近似等于。因为右侧使用的是一个 独立假设。左侧是完全符合 product rule。对于右侧的P是拆成2个独立的假设 进行 New 和 York 进行预测。并没有考虑这两个单词之间的关系。
在这里插入图片描述
在这里插入图片描述
所以XLnet 结合Elmo 和 Bert 的 优缺点,提出了XLNet。

总结:

  • Autoregressive
    优点:1) No discrepancy, 2)考虑依赖关系
    缺点:单向性
  • Autoencoding
    优点:考虑双向
    缺点:discrepancy. Indepency
    我们希望模型 满足 以下优点:1)双向,2)考虑依赖关系,3)No discrepancy
    在这里插入图片描述
    我们有2种方法 达到新的模型,改进Auto-regressive 或者 Auto-encoding.
    但是目前改进BERT 比较难,所以我们改建Auto-regressive 使得它是双向的。

3. Permutation Language Model

Permutation Language Model(基于排列的语言建模)一共3个步骤:

  1. sample a factorization order 每次先sample 一个分解顺序
  2. Determine the attention masks based on the order 根据分解顺序 来决定 哪些词可以参与预测
  3. Optimize a standard language modeling objective.根据上面的分解顺序 优化一个标准的语言模型目标函数
    在这里插入图片描述

好处是:

  • Autoregressive, avoiding disadvantages of AE 这是自回归的模型,所以可以避开AE的缺点
  • Able to model bidirectional context 因为分解顺序是不固定的所以可以根据上下文进行建模

目标:改进Auto-regressive 为双向(Permutation)

在这里插入图片描述
考虑所有的Permutation,最终取得一个 期望值。
就是改造的方式 是 使用 Permutation language model。(思路来自于NADE 2011 Hugo
如果一个句子特别长(20),那么通过采样的方式 取得一个期望,而并没有把所有的组合都罗列出来。

所以我们得到一个新的 目标函数,如下:
在这里插入图片描述
Z T Z_T 是所有的下标组合 的集合。 z代表某一个下标组合。最终我们取一个期望。
z   Z T z ~ Z_T :从 Z T Z_T 中采样某一个z。每个z计算一个loss最后取一个平均值。这里T是从1-T,但是这里面只是预测 被mask的 已知的不预测。

在XLNet中,我们的输入顺序是不变的, 无论下标如何 组合。文中通过下标 mask的方式 来实现依赖关系。
在这里插入图片描述
假如我们要预测 第3个词:

  • 在左上图中 , 3是第一个,
  • 在右上种,3前面是2和4,所以这两个会参与预测中,1在3后面,不会参与。
  • 在左下中,142 都在3前面,所以都参与3的计算。
  • 在右下中,4在3前面参与计算,12 在3后面不参与计算。
    在这里插入图片描述
    这个叫做 Attention mask,这是一个0 1 矩阵。
  • 预测1的时候 可以依赖前面3个。
  • 预测2的时候 只有3是红色的。
  • 预测3的时候 没有一个是红色。
  • 预测4的时候 只依赖3和2。

在Attention mask的存在,所以我们可以保持我们输入不变,只是通过attention Mask 调整我们实际的依赖关系。

改进总结

在XLNet中, 通过改变 auto-regressive 单向 为 双向。但是需要考虑下面问题:
1) auto-regressive 模型不能变,如何双向? —>通过改变输入数据使得 其成为双向
2) 输入数据双向?—>下标组合的方式,permutation 方法
3) 但是输入数据顺序是不能变化的,如何构造不同顺序的下标依赖关系—> Attention mask

4. Two-stream self Attention

在这里插入图片描述
目标函数上, BERT 是 完全 独立的。XLnet 是可以考虑前后关系的。
XLNet 有前后顺序的,先预测 New 或者 York,接下来 再给定这个词之后预测下一个词。

通过 之前时刻的 词 预测 当前的,接下来我们把后面的概率展开,得到一个红框里面的 softmax概率。
其中 h θ ( x 1 : t 1 ) T h_{\theta}(x{1:t-1})^T 是 前面这些单词 所代表的意思 encode 到这里。 e ( x t ) e(x_t) 是当前时刻词的 embedding。 也就是 假设知道之前1-t-1时刻的词后,当前单词是 下一个词的概率有多大(通过内积的方法)。分母是下一个单词是任何单词的概率和。这是Autoregressive 的方法。
但是存在一个问题:
句子1: is a city [New York] , 句子2: is a city [York New]
P1(New|is a city) = P2(New|is a city)
上面2个句子 ,new的位置不一样,但是计算的概率是一样的。只考虑了 is a city这个含义但是没有考虑 new的位置在哪个位置上。所以我们希望考虑new的位置信息。
所以在下面的新的目标函数里面 增加一个 一个 g θ ( X z < t , z t ) g_{\theta}(X_{z<t},z_t) ,这个函数代表xt的位置,那么如何得到g 这个函数?
在这里插入图片描述

在这里插入图片描述
图中左侧:我们需要做的是 预测x2 , order是 3241,那么我们需要知道 :

  • x3的信息
  • x2的位置
  • 但是不能包含x2的内容信息
    所以下图中 每个g与x3连接起来(包含3的信息)

图中右侧,需要预测x4,那么需要知道到的是:

  • x2 和x3的全部信息
  • x4的位置信息
  • 不能知道x4内容信息

左图和右图中,有一个矛盾左侧不要2的内容信息,右侧要2的内容。所以2种情况 要兼顾。那么提出了two stream。

  • 只要 位置: query stream
  • 要全部: context stream

在这里插入图片描述

那么对每一个单词 我们都定义2个输出。一个是h (context stream 位置+内容) 一个是g(query stream),预测的时候 分开用。
最底层的 h 0 h^0 用一个共同的参数 w 来初始化,通过训练得到结果。
在这里插入图片描述
我们可以看到 2个stream来计算,并且2个stream的mask也不一样的 ,两个的唯一区别是 对角线上 一个是空的 (看不到自己,query stream),一个是满的(看得到自己 context stream)。
在这里插入图片描述
两个公式的唯一区别是 z < t z < = t z<t 与 z<=t 就是能不能看到自己。

Context stream:similar to encoder. 因为会把所有的上下文都encode进来。
Query stream:similar to decoder.很像decoder 因为只有其他的context信息,看不到自己。

XLNet 可以应用于 Seq2seq generation.

5. summary

在这里插入图片描述
BERT的独立性假设和MASK导致训练和预测不一性问题 ,使得考虑改进auto-regressive模型(将单向改为双向),于是提出了permutation language model。
因为原始输入的数据顺序是不变的,所以XLNET同过attention mask 来获得permutation采样序列,从而使得预测试可以看到上下文,并且可以学到上下文依赖。
但是加上排序的模型 用标准化的语言建模的参数化方法,还是会有问题。因为无法区分被预测词的位置关系,变成了一个reduced bag of words。
于是提出了改进方法,在encode feature时把位置信息加上去。
但是会带来另外一个问题,就是同一个feature一方面要encode 自己,一方面又不需要encode自己。
于是提出了two stream attention. 一个是context stream,一个query stream. 并且这两个share 参数 不会有额外参数增加。

XLNet 的参数 layer 24层,hidden size 1024, attention heads 16, attention head size 64…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了31 篇原创文章 · 获赞 5 · 访问量 6499

猜你喜欢

转载自blog.csdn.net/m0_37531129/article/details/104441114
NLP
今日推荐