Position信息的处理
- 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,...,T−1
- 缺点:这样处理,在文本长的时候,PE的值会很大,影响了原来word embedding 的向量空间
归一化
P E = p o s T − 1 PE=\frac{pos}{T-1} PE=T−1pos
- 这样所有的位置编码都会落在[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 10000⋅2π都有,每个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(c2d−1t)cos(c2d−1t)⎦⎥⎥⎥⎥⎥⎤
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=0∑2d−1cos(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} PEtTPEt−k=PEtTPEt+k
- 这说明原本的编码位置不能分辨方向
证明
令 j = t − k j=t-k j=t−k
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=PEt−kTPEt
引入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,HWvRt−j=[⋯sin(10000dk2it−j)cos(10000dk2it−j)⋯]TAt,jrel=QtKjT+QtRt−jT+uKjT+vRt−jTAttn(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(c2d−1t)cos(c2d−1t)⎦⎥⎥⎥⎥⎥⎤R−t=⎣⎢⎢⎢⎢⎢⎡−sin(c0t)cos(c0t)⋮−sin(c2d−1t)cos(c2d−1t)⎦⎥⎥⎥⎥⎥⎤ - R t R_t Rt和 R − t R_{-t} R−t的不同使得具有了方向的信息
- 其实就是简单的在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的方法也是一种好方法
Position信息的处理相关推荐
- 聊一聊搜索推荐中的 Position Bias
作者 | Chilia 哥伦比亚大学 NLP搜索推荐 整理 | NewBeeNLP 在搜索推荐系统中,Bias可以说无处不在.之前我们整理过搜索.推荐.广告中的曝光偏差问题,今天来看看 positio ...
- 爬取BOSS直聘信息并进行清理和可视化分析(python小白)
年底了,学习数据分析快四个月了.为了尽快找到一份数据分析相关的工作,计划把BOSS直聘上的相关职位都爬取下来分析分析,也好检验一下最近的学习成果.python新手,代码写的乱,将就看吧.首先,对给BO ...
- 推荐系统中的biasdebias(二):position bias的消偏
前面提到过position bias,即用户倾向于点击排在前面的结果,这使得"优势位置"的item会获得更高的后验点击率. 这本质上是和用户的注意力,用户对item的情绪有关,而和 ...
- mysql主从库配置ps:mysql5.6
1 Mysql cluster版本主从服务器搭建实践 主从的作用:MySQL的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表. ...
- 【leetcode】二叉树与经典问题
文章目录 笔记 leetcode [114. 二叉树展开为链表](https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list ...
- mysql主从数据库含义_(转)Mysql数据库主从心得整理
管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...
- 【原创】Kakfa utils源代码分析(三)
Kafka utils包最后一篇~~~ 十五.ShutdownableThread.scala 可关闭的线程抽象类! 继承自Thread同时还接收一个boolean变量isInterruptible表 ...
- 关于Transformer,那些的你不知道的事
作者 | 小莫 来源 | 阿泽的学习笔记(ID: aze_learning) 引言 本博客主要是本人在学习 Transformer 时的「所遇.所思.所解」,通过以 「十六连弹」 的方式帮助大家更好的 ...
- 超越卷积、自注意力机制:强大的神经网络新算子involution
视学算法发布 转载自:机器之心 作者:李铎 这篇工作主要是由我和SENet的作者胡杰一起完成的,也非常感谢HKUST的两位导师 陈启峰和张潼老师的讨论和建议. 本文是对我们CVPR 2021被接收的文 ...
最新文章
- python 保存内容到记事本里面
- SSH分客户端openssh-client和openssh-server
- 数据库中间件mycat
- ASP.NET MVC随想录——漫谈OWIN
- C++ BUILDER 消息处理的深入探索
- 信息安全系统设计基础第三周学习总结—20135227黄晓妍
- 设计模式笔记——Bridge
- 【JAVA SE】第五章 数组、多维数组和Arrays类
- 2019胡润女企业家榜公布:碧桂园杨惠妍继续领跑
- golang从简单的即时聊天来看架构演变
- OpenSSL SSL_connect: Connection was reset in connection to github.com:443
- Linux 中安装软件报缺少共享库文件的错误
- php pathinfo 解析,php 解析pathinfo 类
- 【hightopo】【基础图标】 HT for Web简单图标的制作:进度图标
- javax.mail 发送163邮件
- 软件测试面试题-那些让我印象深刻的bug
- 楚留香获取服务器信息卡主,楚留香手游沧海主线任务bug原因及解决方法一览
- 全面剖析可行性研究报告的内容
- 派森语言python干什么的-Python(派森)
- JM(264)基础知识整理