Position信息的处理

42 篇文章 2 订阅
42 篇文章 1 订阅
本文深入探讨了Transformer模型中位置编码的重要性,分析了原始位置编码的局限性,包括其对长文本的影响以及无法捕捉方向信息的问题。通过引入有界周期性函数改进位置编码,但这种方法仍缺乏方向敏感性。TENER模型提出了解决方案,通过引入新的位置编码矩阵以体现方向信息。总结了位置编码在NLP任务中的关键角色,强调了保持相对位置信息的必要性。
摘要由CSDN通过智能技术生成
  • NLP问题中,位置的相关信息是非常重要的信息、
    • 如在RNN中,就能自然的处理出位置的相关信息
    • 但是在transformer模型中,由于self-attention的方法,会导致位置信息的丢失

最简单的形式

P E ( p o s i t i o n e m b e d d i n g ) = p o s = 0 , 1 , 2 , . . . , T − 1 PE(position embedding)=pos=0,1,2,...,T-1 PE(positionembedding)=pos=0,1,2,...,T1

  • 缺点:这样处理,在文本长的时候,PE的值会很大,影响了原来word embedding 的向量空间

归一化

P E = p o s T − 1 PE=\frac{pos}{T-1} PE=T1pos

  • 这样所有的位置编码都会落在[0,1]之间
  • 缺点: 不过,这样不同文本长度的位置编码步长是不相同的,我们最关心的就是相对次序的关系

Attention is All You Need

  • 1、 要提现同一单词在不同位置的区别
  • 2、要体现一定的先后次序关系,并且一定范围内的编码差异不依赖文本长度,具有一定不变性,且又要落在一定范围内

所以,有界的周期性函数能满足
简单构造为 P E ( p o s ) = s i n ( p o s α ) PE(pos)=sin({pos\over \alpha}) PE(pos)=sin(αpos),这样可以通过调节 α \alpha α来反应一定的区间内的相对编码信息。 α \alpha α较大的时候,波长比较长,相邻字之间的位置编码之间的差异比较小。

  • 不过这样在 α \alpha α较大的时候,相邻字符之间的位置差异提现的不明显;在 α \alpha α较小的时候在长文本的时候会有问题。
    我们假设字嵌入的维度是 d m o d e l d_{model} dmodel,所以也要用一个维度相同的向量来表示位置编码向量—— [ − 1 , 1 ] d m o d e l [-1,1]^{d_{model}} [1,1]dmodel

所以构造为
P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i d m o d e l ) PE(pos,2i)=sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}})\\ PE(pos,2i+1)=cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})\\ PE(pos,2i)=sin(10000dmodel2ipos)PE(pos,2i+1)=cos(10000dmodel2ipos)

  • 这里波长从 2 π 2\pi 2π 10000 ⋅ 2 π 10000\cdot 2\pi 100002π都有,每个pos在不同的维度都有一个编码。事实上,sin和cos交替,或者只是前一半(1~ d m o d e l / 2 d_{model}/2 dmodel/2)用sin,后一半用cos,这两种方式并没有什么性能上的差别,交替只是使编码更加的丰富,采用不同的波长也只是使用了一个手段来解决上面的问题,增加了函数的多样性来适应各种情况。

数学上这种编码在k固定时,关系是线性的
在这里插入图片描述

  • 就是可以用PE(k)和PE(pos)的组合来表示PE(pos+k),这样就具有了表示相对位置的能力
  • 这里不必深究这种函数是怎么得到的,很有可能就是凭经验来的
  • 缺点:但是这种编码方式还是缺乏位置的方向关系,下面证明

TENER: Adapting Transformer Encoder for Named Entity Recognition

  • 这篇论文证明了上面方法对方向性信息的缺失

性质

对偏置k和位置t, P E t + k T P E t PE_{t+k}^TPE_t PEt+kTPEt只取决于k

  • 这可以说明两个位置向量的点积可以反映单词间的距离
证明

P E t = [ s i n ( c 0 t ) c o s ( c 0 t ) ⋮ s i n ( c d 2 − 1 t ) c o s ( c d 2 − 1 t ) ] PE_t = \left[\begin{matrix} sin(c_0t)\\ cos(c_0t)\\ \vdots\\ sin(c_{\frac{d}{2}-1}t)\\ cos(c_{\frac{d}{2}-1}t) \end{matrix}\right] PEt=sin(c0t)cos(c0t)sin(c2d1t)cos(c2d1t)
c i = 1 1000 0 2 i d c_i=\frac{1}{10000^{\frac{2i}{d}}} ci=10000d2i1
P E t T P E t + k = ∑ j = 0 d 2 − 1 c o s ( c j k ) PE_t^TPE_{t+k}=\sum_{j=0}^{\frac{d}{2}-1}cos(c_jk) PEtTPEt+k=j=02d1cos(cjk)

对于偏置k和位置t, P E t T P E t − k = P E t T P E t + k PE_t^T PE_{t-k}=PE_{t}^TPE_{t+k} PEtTPEtk=PEtTPEt+k

  • 这说明原本的编码位置不能分辨方向
证明

j = t − k j=t-k j=tk
P E t T P E t + k = P E j T P E j + k = P E t − k T P E t PE_t^TPE_{t+k}=PE_j^TPE_{j+k}=PE_{t-k}^TPE_t PEtTPEt+k=PEjTPEj+k=PEtkTPEt

引入Q、K矩阵后原本的距离感知被削弱

  • 这时候得到编码为 P E t T W q T W k P E t + k = P E t T W P E t + k PE_t^TW_q^TW_kPE_{t+k}=PE_t^TWPE_{t+k} PEtTWqTWkPEt+k=PEtTWPEt+k
  • 这样使得原本的距离关系不那么明确

解决方法

Q , K , V = H W q , H W k , H W v R t − j = [ ⋯ s i n ( t − j 1000 0 2 i d k ) c o s ( t − j 1000 0 2 i d k ) ⋯   ] T A t , j r e l = Q t K j T + Q t R t − j T + u K j T + v R t − j T A t t n ( Q , K , V ) = s o f t m a x ( A r e l ) V Q,K,V=HW_q,HW_k,HW_v\\ R_{t-j}=[\cdots sin(\frac{t-j}{10000^{\frac{2i}{d_k}}})cos(\frac{t-j}{10000^{\frac{2i}{d_k}}})\cdots ]^T\\ A_{t,j}^{rel}=Q_tK_j^T+Q_tR^T_{t-j}+uK_j^T+vR_{t-j}^T\\ Attn(Q,K,V)=softmax(A^{rel})V Q,K,V=HWq,HWk,HWvRtj=[sin(10000dk2itj)cos(10000dk2itj)]TAt,jrel=QtKjT+QtRtjT+uKjT+vRtjTAttn(Q,K,V)=softmax(Arel)V
式子中的u、v为可学习的参数

  • 我们有
    R t = [ s i n ( c 0 t ) c o s ( c 0 t ) ⋮ s i n ( c d 2 − 1 t ) c o s ( c d 2 − 1 t ) ] R − t = [ − s i n ( c 0 t ) c o s ( c 0 t ) ⋮ − s i n ( c d 2 − 1 t ) c o s ( c d 2 − 1 t ) ] R_t = \left[\begin{matrix} sin(c_0t)\\ cos(c_0t)\\ \vdots\\ sin(c_{\frac{d}{2}-1}t)\\ cos(c_{\frac{d}{2}-1}t) \end{matrix}\right] R_{-t} = \left[\begin{matrix} -sin(c_0t)\\ cos(c_0t)\\ \vdots\\ -sin(c_{\frac{d}{2}-1}t)\\ cos(c_{\frac{d}{2}-1}t) \end{matrix}\right] Rt=sin(c0t)cos(c0t)sin(c2d1t)cos(c2d1t)Rt=sin(c0t)cos(c0t)sin(c2d1t)cos(c2d1t)
  • R t R_t Rt R − t R_{-t} Rt的不同使得具有了方向的信息
  • 其实就是简单的在attention的时候把相对的前后关系引入

上面的这些用公式的方法,都是基于经验的关系,并没有针对样本进行学习或说有先验关系,感觉不是很有鲁棒性

Convolutional Sequence to Sequence Learning

  • 由于使用卷积,也会失去位置信息
  • 所以对于样本输入的词向量要加上一个位置编码向量,这个位置编码向量用朴素embedding的方式
    • 这个就是不使用公式,而是直接使用样本训练出来的
  • 最终向量 e = w + p = ( w 1 + p 1 , w 2 + p 2 , . . . , w n + p n ) e=w+p=(w_1+p_1,w_2+p_2,...,w_n+p_n) e=w+p=(w1+p1,w2+p2,...,wn+pn)

这种直接对位置信息进行embedding的方法也是一种好方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值