XLNet模型: Generalized Autoregressive Pretraining for Language Understanding

链接

一、背景知识

1.AR语言模型:

  • 假设我们现在给定一个输入序列: X = [ x 1 , x 2 , … , x T ] X=[x_1,x_2,…,x_T] X=[x1,x2,,xT], AR语言模型通过最大化下面这个前向自回归分解函数来完成训练: max ⁡ θ l o g p θ ( X ) = ∑ t = 1 T l o g p θ ( x t ∣ x &lt; t ) = ∑ t = 1 T l o g e x p ⁡ ( h θ ( x 1 : t − 1 ) T e ( x t ) ) ∑ x ′ e x p ⁡ ( h θ ( x 1 : t − 1 ) T e ( x ′ ) ) \max_θ logp_θ (X)=∑_{t=1}^Tlogp_θ (x_t |x_{&lt;t})=∑_{t=1}^Tlog\frac{ exp⁡(h_θ (x_{1:t-1} )^T e(x_t))}{∑_x&#x27;exp⁡(h_θ (x_{1:t-1} )^T e(x&#x27;)) } θmaxlogpθ(X)=t=1Tlogpθ(xtx<t)=t=1Tlogxexp(hθ(x1:t1)Te(x))exp(hθ(x1:t1)Te(xt))
  • 其中 h θ ( x 1 : t − 1 ) h_θ (x_{1:t-1}) hθ(x1:t1)表示的是t位置上下文表示,一般由神经网络产生,如:RNN或者transformer; e ( x ) e(x) e(x)表示的是 x x x的词向量。

2.AE语言模型:

  • BERT模型就是一个典型的AE语言模型,对于给定一个文本序列X:
    • 首先,从X中随机选取一定比例(15%)的词用[MASK]代替,得到序列 X ^ \hat{X} X^,记那些被mask的字符为 x ‾ \overline{x} x
    • BERT预训练的目标就是从序列 X ^ \hat{X} X^中预测 x ‾ \overline{x} x,通过最大化下面公式达到这一目的: max ⁡ θ l o g p θ ( x ‾ ∣ X ^ ) ≈ ∑ t = 1 T m t l o g p θ ( x t ∣ X ^ ) = ∑ t = 1 T m t l o g e x p ⁡ ( H θ ( X ^ ) t T e ( x t ) ∑ x ′ e x p ⁡ ( H θ ( X ^ ) t T e ( x ′ ) ) \max_θ logp_θ (\overline{x}|\hat{X})≈∑_{t=1}^T m_t logp_θ (x_t |\hat{X})=∑_{t=1}^Tm_t log \frac{ exp⁡(H_θ (\hat{X})_t^T e(x_t )}{∑_{x&#x27;}exp⁡(H_θ (\hat{X})_t^T e(x&#x27; )) } θmaxlogpθ(xX^)t=1Tmtlogpθ(xtX^)=t=1Tmtlogxexp(Hθ(X^)tTe(x))exp(Hθ(X^)tTe(xt) 其中 m t = 1 m_t=1 mt=1表示 x t x_t xt 被masks了,没被mask掉的词 m t = 0 m_t=0 mt=0 H θ H_θ Hθ为transformer模型。

3.两种语言模型对比:

  • 由BERT中的 ≈ ≈ 号,可以看出BERT做了一个假设:被mask的字符 x ‾ \overline{x} x之间是独立的。而再AR模型中没用这种假设。
  • BERT模型的输入中手动加入了特殊字符 [ M A S K ] [MASK] [MASK],这个字符几乎不会再下游任务中出现,这样导致了预训练和微调的不符,同时给输入带来了噪声。但是AR模型中没用。
  • AR模型无法使用当前位置的后面的上下文信息。而BERT可以使用当前位置两侧的上下文信息。

二、排列语言模型

  • 由上面的分析我们知道AR模型与BERT模型各有优势,为了结合他们的优势避免他们缺点,论文提出了排列语言模型 (permutation language modeling objective),他保留AR模型的优点,并且允许模型去捕获双向的上下文信息。对于长度为 T T T的输入序列 X X X,他的排列数有 T ! T! T!种。如果我们将所以的排列都作为AR模型的输入,那么模型就可以学到获取双向的上下文信息。

  • 排列语言模型可以用下面公式表示: max ⁡ θ E z ∈ Z T [ ∑ t = 1 T l o g P θ ( x z t ∣ x z &lt; t ) ] \max_θ E_{z\in Z_T} [∑_{t=1}^TlogP_θ (x_{z_t } |x_{z&lt;t})] θmaxEzZT[t=1TlogPθ(xztxz<t)]其中 Z T Z_T ZT表示 [ 1 , 2 , 3 , … , T ] [1,2,3,…,T] [1,2,3,,T]所有排列的情况的集合。这个公式的实质是每次从排列集合中取出一个顺序,然后将联合概率分布 P θ ( X ) P_θ (X) Pθ(X)按照这个顺序进行展开。经过这个公式对于每个位置可以利用出当前位置词以外的所有词来预测当前词。如下图:

    在这里插入图片描述

  • 如果使用标准Transformer和参数共享来实现排列语言模型,可能会有问题。假设我们预测原始输入序列 X X X的某个排列第 z t z_t zt个词 x z t x_{z_t} xzt时我们使用下面公式: P θ ( X z t = x │ x z &lt; t ) = e x p ⁡ ( e ( x ) T h θ ( x z &lt; t ) ) ∑ x ′ e x p ⁡ ( e ( x ′ ) T h θ ( x z &lt; t ) ) P_θ (X_{z_t }=x│x_{z&lt;t} )=\frac{exp⁡(e(x)^T h_θ (x_{z&lt;t}))}{∑_x&#x27;exp⁡(e(x&#x27;)^T h_θ (x_{z&lt;t}))} Pθ(Xzt=xxz<t)=xexp(e(x)Thθ(xz<t))exp(e(x)Thθ(xz<t))其中 h θ ( x z &lt; t ) h_θ (x_{z&lt;t}) hθ(xz<t)表示在适当mask之后由共享Transformer网络产生的 x z &lt; t x_{z&lt;t} xz<t的隐藏层表示。我们可以发现 h θ ( x z &lt; t ) h_θ (x_{z&lt;t}) hθ(xz<t)不依赖于需要预测词 x z t x_{z_t } xzt的位置 z t z_t zt,即因此无论 z t z_t zt为多少预测值是一样的,这是一个很大的错误。

  • 注:举一个例子来解释上面的原因,对于长度为5的输入序列 X X X,它会产生这样两种排列: 2 − 3 − 1 − 4 − 5 2-3-1-4-5 23145 2 − 3 − 1 − 5 − 4 2-3-1-5-4 23154,两个排列中,4和5的上文一样,按照上面公式得到的输出概率分布就会一样,很显然这是错误的。

  • 为了解决这个问题,论文中用下面公式来替换上面的公式: P θ ( X z t = x │ x z &lt; t ) = e x p ⁡ ( e ( x ) T g θ ( x z &lt; t , z t ) ) ∑ x ′ e x p ⁡ ( e ( x ′ ) T g θ ( x z &lt; t , z t ) ) P_θ (X_{z_t }=x│x_{z&lt;t} )=\frac{exp⁡(e(x)^T g_θ (x_{z&lt;t},z_t))}{∑_x&#x27;exp⁡(e(x&#x27;)^T g_θ (x_{z&lt;t},z_t))} Pθ(Xzt=xxz<t)=xexp(e(x)Tgθ(xz<t,zt))exp(e(x)Tgθ(xz<t,zt))即将需要预测词的位置加入到上下文表示当中去。

  • 这样我们得到两种表示:

    • 内容表示(content representation) h z t = h θ ( x z ≤ t ) h_{z_t}=h_θ (x_{z≤t}) hzt=hθ(xzt),这于标准的transformer中的隐藏层状态是一样的。注意 z ≤ t z≤t zt
    • 询问表示(query representation) g z t = g θ ( x z &lt; t , z t ) g_{z_t}=g_θ (x_{z&lt;t},z_t) gzt=gθ(xz<t,zt),它不包含 x t x_t xt自身信息。
  • 这样排列语言模型的每一个transformer层都会输出两个表示: h z t h_{z_t } hzt g z t g_{z_t } gzt。它们的计算公式为: g z t ( m ) ← A t t e n t i o n ( Q = g z t ( m − 1 ) ) , K V = h z &lt; t ( m − 1 ) ; θ ) g_{z_t}^{(m)}←Attention(Q=g_{z_t}^{(m-1)} ),KV = h_{z&lt;t}^{(m-1)}; θ) gzt(m)Attention(Q=gzt(m1)),KV=hz<t(m1);θ) h z t ( m ) ← A t t e n t i o n ( Q = h z t ( m − 1 ) ) , K V = h z ≤ t ( m − 1 ) ; θ ) h_{z_t}^{(m)}←Attention(Q=h_{z_t}^{(m-1)} ),KV = h_{z≤t}^{(m-1)}; θ) hzt(m)Attention(Q=hzt(m1)),KV=hzt(m1);θ)其中 Q , K , V Q,K,V QKV的含义于标准的transformer中是一样的。初始化为: g i ( 0 ) = w , h i ( m ) = e ( x i ) g_i^{(0)}=w,h_i^{(m)}=e(x_i) gi(0)=whi(m)=e(xi). w w w是可训练的向量(可以理解为位置向量), e ( x i ) e(x_i) e(xi)表示为第 i i i个词的词向量。

    在这里插入图片描述
    使用最上层的 g z t ( M ) g_{z_t}^{(M)} gzt(M)来预测当前词。

  • 由上图我们一发现,任何一个排列都可以用一个mask矩阵来唯一表示。

  • 部分预测:模型并没有对整个输入序列的每个词进行预测,而是只预测序列后面部分的几个词。

    在这里插入图片描述
    其中 c c c是一个分界点,即预测 c c c以后的所有词, c c c由一个超参数K指定: k ≈ ∣ z ∣ ∣ z ∣ − c k≈\frac{|z|}{|z|-c} kzcz

  • 这不仅加快了模型的训练而且还节约了存储空间,因为不需要预测的词我们就不需要计算它的 g z t ( m ) g_{z_t}^{(m)} gzt(m)

三、引入Transformer-XL

  • 由于我们的排列语言模型是AR模型,所有我们将最先进的AR语言模型Transformer-XL作为我们的基本模型,并在其后面引入了我们上面的方法。
  • Transformer-XL模型有两个重要的技术:相对位置编码方案段循环机制,现在我们考虑如何在我们的排列语言模型中使用这两个重要的技术:
    • 相对位置编码:我们的模型使用原始序列中相对位置来进行相对位置编码。
    • 段循环:
      • 不失一般性,假设我们有两个来自长序列S的段: x ^ = S 1 : T \hat{x}=S_{1:T} x^=S1:T x = S T + 1 : 2 T x=S_{T+1:2T} x=ST+1:2T; x ^ \hat{x} x^ z z z分布是 [ 1 , 2 , … , T ] [1,2,…,T] [1,2,,T] [ T + 1 , T + 2 , … , 2 T ] [T+1,T+2,…,2T] [T+1,T+2,,2T]的排列。
      • 基于排列 z ^ \hat{z} z^,我们处理第一段 x ^ \hat{x} x^,然后缓存每一层的隐藏层状态 h ^ ( m ) \hat{h}^{(m)} h^(m).
      • 然后处理第二段 x x x,第二段的运算公式如下: h ^ z t ( m ) ← A t t e n t i o n ( Q = h ^ z t ( m − 1 ) , K V = [ h ^ ( m − 1 ) , h ^ z ≤ t ( m − 1 ) ] ) \hat{h}_{z_t }^{(m)}←Attention(Q=\hat{h}_{z_t}^{(m-1)},KV=[\hat{h}^{(m-1)},\hat{h}_{z≤t}^{(m-1)}]) h^zt(m)Attention(Q=h^zt(m1),KV=[h^(m1),h^zt(m1)])其中 [ . , . ] [., .] [.,.]表示拼接操作。
      • 注意:由于相对位置编码取决于原始序列,而各种排列 z ^ \hat{z} z^只决定使用什么样的mask矩阵,所有一旦前一段的隐藏层状态 h ^ ( m ) \hat{h}^{(m)} h^(m)得到以后,后面的运算就与 z ^ \hat{z} z^无关了。也就是说后一段的运动不需要知道前一段知道前一段排列顺序。
      • 上面是内容表示 h ^ z t ( m ) \hat{h}_{z_t }^{(m)} h^zt(m)的更新,对于询问表示 g z t ( m ) g_{z_t}^{(m)} gzt(m)的更新是类似的。

四、模拟多段任务

  • 许多下游任务具有多个输入段,例如问答任务的问题和回答。
  • 在预训练阶段,与BERT类似,我们随机采样两个段(来自相同的上下文或不相同)并将两个段的拼接为一个序列再输入排列语言模型。但是我们只重用属于同一上下文的上一段上隐藏层状态 h ^ z t ( m − 1 ) \hat{h}_{z_t }^{(m-1)} h^zt(m1)
  • 我们的数据格式与BERT类似: [ A , S E P , B , S E P , C L S ] [A,SEP,B,SEP,CLS] [A,SEP,B,SEP,CLS],其中“SEP”和“CLS”是两个特殊符号,但是我们并不预测是否为下一句话。
  • 相对段编码:我们没用像BERT那样将段的embedding向量加入到每个词的词向量中去,我们将相对位置编码扩展到段编码中来:
    • 给定序列中的一对位置i和j,如果 i i i j j j来自同一段,我们使用段编码 s i j = s + s_{ij}=s^+ sij=s+,否则 s i j = s − s_{ij}=s^- sij=s,其中 s + s^+ s+ s − s^- s是每个注意力头(attention head)的模型参数是可学习的。换句话说,我们只考虑这两个位置是否属于同一段,而不是考虑它们来自哪个段
    • 当计算 i i i位置对 j j j位置的注意力分数时,我们使用 s i j s_{ij} sij来计算注意力分数的权重: a i j = ( q i + b ) T s i j , q i a_{ij}=(q_i+b)^T s_{ij}, q_i aij=(qi+b)Tsij,qi时询问向量(query vector), b b b是每个注意力头的偏置项参数向量,是可学习的。最后将 a i j a_ij aij添加到标准的注意力分数( Q T ∗ K ) Q^T*K) QTK)中去。

五、XLNet模型总结

  • 面举一个例来具体说一下XLNet模拟,假设我们当前的排序为: 3 → 2 → 4 → 1 3→2→4→1 3241
  • content stream mask self-attention计算图如下:
    在这里插入图片描述
  • query stream mask self-attention计算如下图:
    在这里插入图片描述
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值