• 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 RtR − 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的方法也是一种好方法

Position信息的处理相关推荐

  1. 聊一聊搜索推荐中的 Position Bias

    作者 | Chilia 哥伦比亚大学 NLP搜索推荐 整理 | NewBeeNLP 在搜索推荐系统中,Bias可以说无处不在.之前我们整理过搜索.推荐.广告中的曝光偏差问题,今天来看看 positio ...

  2. 爬取BOSS直聘信息并进行清理和可视化分析(python小白)

    年底了,学习数据分析快四个月了.为了尽快找到一份数据分析相关的工作,计划把BOSS直聘上的相关职位都爬取下来分析分析,也好检验一下最近的学习成果.python新手,代码写的乱,将就看吧.首先,对给BO ...

  3. 推荐系统中的biasdebias(二):position bias的消偏

    前面提到过position bias,即用户倾向于点击排在前面的结果,这使得"优势位置"的item会获得更高的后验点击率. 这本质上是和用户的注意力,用户对item的情绪有关,而和 ...

  4. mysql主从库配置ps:mysql5.6

    1 Mysql cluster版本主从服务器搭建实践 主从的作用:MySQL的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表. ...

  5. 【leetcode】二叉树与经典问题

    文章目录 笔记 leetcode [114. 二叉树展开为链表](https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list ...

  6. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  7. 【原创】Kakfa utils源代码分析(三)

    Kafka utils包最后一篇~~~ 十五.ShutdownableThread.scala 可关闭的线程抽象类! 继承自Thread同时还接收一个boolean变量isInterruptible表 ...

  8. 关于Transformer,那些的你不知道的事

    作者 | 小莫 来源 | 阿泽的学习笔记(ID: aze_learning) 引言 本博客主要是本人在学习 Transformer 时的「所遇.所思.所解」,通过以 「十六连弹」 的方式帮助大家更好的 ...

  9. 超越卷积、自注意力机制:强大的神经网络新算子involution

    视学算法发布 转载自:机器之心 作者:李铎 这篇工作主要是由我和SENet的作者胡杰一起完成的,也非常感谢HKUST的两位导师 陈启峰和张潼老师的讨论和建议. 本文是对我们CVPR 2021被接收的文 ...

最新文章

  1. python 保存内容到记事本里面
  2. SSH分客户端openssh-client和openssh-server
  3. 数据库中间件mycat
  4. ASP.NET MVC随想录——漫谈OWIN
  5. C++ BUILDER 消息处理的深入探索
  6. 信息安全系统设计基础第三周学习总结—20135227黄晓妍
  7. 设计模式笔记——Bridge
  8. 【JAVA SE】第五章 数组、多维数组和Arrays类
  9. 2019胡润女企业家榜公布:碧桂园杨惠妍继续领跑
  10. golang从简单的即时聊天来看架构演变
  11. OpenSSL SSL_connect: Connection was reset in connection to github.com:443
  12. Linux 中安装软件报缺少共享库文件的错误
  13. php pathinfo 解析,php 解析pathinfo 类
  14. 【hightopo】【基础图标】 HT for Web简单图标的制作:进度图标
  15. javax.mail 发送163邮件
  16. 软件测试面试题-那些让我印象深刻的bug
  17. 楚留香获取服务器信息卡主,楚留香手游沧海主线任务bug原因及解决方法一览
  18. 全面剖析可行性研究报告的内容
  19. 派森语言python干什么的-Python(派森)
  20. JM(264)基础知识整理

热门文章

  1. casaos国内安装
  2. Java黄金矿工小游戏,适合新手入门练手项目
  3. vmware操作linux,linux虚拟机初步 vmware的简单操作【鸟哥的私房菜第五章】
  4. 这个开源小区物业管理系统,太强了
  5. 火柴游戏 这是一个纵横火柴棒游戏。如图[1.jpg],在3x4的格子中,游戏的双方轮流放置火柴棒。
  6. 【源码】二维码生成及美化
  7. 安卓手机哪个便签好用 比较好用的便签软件
  8. 精彩!安全圈的技术分享,竟成了他人割韭菜的工具?
  9. 2020.12京东数科运营岗实习面试
  10. MySQL多表SQL查询