[NLP]Transformer-XL论文解读
关于Transformer的具体内容,可以访问:https://www.cnblogs.com/mj-selina/p/12369797.html
简介
Transformer是Google Brain2017年提出的一种模型,它的编码能力超越了RNN,但是对于长距离依赖的建模能力依然不足。为解决长距离依赖问题,Google Brain提出了Transformer-XL模型(XL是extra long的意思),不仅能够获取长距离依赖,而且解决了文本碎片化的问题。Transformer-XL是基于vanilla Transformer进行创新的,它不仅能比vanilla Transformer处理4.5倍长的长距离依赖关系,而且在评估期间要比vanilla Transformers快1800倍。
注1:文本碎片化是vanilla Transformer中会遇到的问题,因为vanilla Transformer只能处理固定长度的序列,如果序列过长,会将其切割成两个或者多个序列,如果序列之间存在语义关系,而vanilla Transformer在编码的时候会丢失这种语义关系(在编码时,序列与序列之间不产生信息交换),产生文本碎片化问题。
Vanilla Transformer
VanillaTransformer输入固定长度的序列,如果输入序列比规定的长度长,则会将输入序列不考虑语义的切割成多个segment,如下图(a)所示。这种不考虑语义的切割方法,会导致文本碎片化问题,每个segment只能获取到自己的语义信息,而丢失之前segment的语义信息。
而在评估时,vanilla模型只会考虑同样长度的segment,一般它会取最后一个位置的隐向量作为输出。如下图(b)所示,在预测输出时,模型每次会向右移动一步,并根据新的segment片段预测此刻的单词。这种使用当前序列重新预测的方法,会导致计算量大增,预测速度较慢,且不能利用更早的信息。
Transformer-XL
1、片段级递归机制(segment-level recurrence mechanism):在Transformer中引入了循环机制,在训练当前segment的时候,会保存并使用上一个segment每一层的输出向量。这样就可以利用之前segment的信息,提高Transformer长期依赖的能力,在训练时前一个segment的输出只参与前向计算,而不参与反向传播。
如上图所示,可以看出,在训练当前segment时,Transformer-XL会利用前一个segment的信息(图中绿色线段)。如果GPU内存允许,可以使用前多个segment的信息。
循环机制的另一个优点是测试速度快,它每次可以前进一个segment的距离,而不是像vanilla一样,一次只能前进一个表征。
2、相对位置编码(Relative Positional Encodings):Transformer中使用一个序列的绝对位置计算positional encoding,再与单词的encoding相加即可。但是Transformer-XL中,将序列分成多个segment,每个segment都会存在相同位置的Embedding,positional encoding的位置信息就失去了意义。因此Transformer-XL提出了相对位置编码,在计算当前位置隐向量的时候,考虑其互相依赖的token的位置关系。具体做法是,在计算attention score的时候,只考虑query向量与key向量的相对位置关系,并将这种相对位置关系加入到每一层Transformer的attention的计算中,具体的计算法师如下:
(1)内容权重:没有添加原始位置编码的原始分数
(2)相对于当前内容的位置偏差:指从前一个seglment的第一个位置(假设index为0)到当前segment的当前word的位置(假设index为k),则位置偏差为k-t,并对位置偏差使用正弦函数进行位置向量计算
(3)可学习的全局内容偏差:该模型添加了一个可学习的向量,用于调整其他表征内容(Kj)的重要性
(4)可学习的全局偏差:另一个可学习向量,仅根据表征之间的距离调整重要性(例如,最后一个词可能比前一个segment中的词更重要)
关于相对位置的具体计算方法,可以看[4]
参考资料:
[1] https://zhuanlan.zhihu.com/p/70745925
[2] https://www.infoq.cn/article/wt-KaTfcsAv9E7exzIkF
[3] https://zhuanlan.zhihu.com/p/84159401
[4] http://www.linzehui.me/2019/05/07/%E4%BB%A3%E7%A0%81%E7%9B%B8%E5%85%B3/%E5%85%B3%E4%BA%8Etransformer-xl%E4%B8%ADrel-shift%E5%AE%9E%E7%8E%B0%E7%9A%84%E8%A7%A3%E8%AF%BB/
[NLP]Transformer-XL论文解读的更多相关文章
- NLP论文解读:无需模板且高效的语言微调模型(上)
原创作者 | 苏菲 论文题目: Prompt-free and Efficient Language Model Fine-Tuning 论文作者: Rabeeh Karimi Mahabadi 论文 ...
- [论文解读] 阿里DIEN整体代码结构
[论文解读] 阿里DIEN整体代码结构 目录 [论文解读] 阿里DIEN整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x04 模型基类 4.1 基本逻辑 ...
- 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现
文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...
- 论文解读丨表格识别模型TableMaster
摘要:在此解决方案中把表格识别分成了四个部分:表格结构序列识别.文字检测.文字识别.单元格和文字框对齐.其中表格结构序列识别用到的模型是基于Master修改的,文字检测模型用到的是PSENet,文字识 ...
- 人工智能论文解读精选 | PRGC:一种新的联合关系抽取模型
NLP论文解读 原创•作者 | 小欣 论文标题:PRGC: Potential Relation and Global Correspondence Based Joint Relational ...
- itemKNN发展史----推荐系统的三篇重要的论文解读
itemKNN发展史----推荐系统的三篇重要的论文解读 本文用到的符号标识 1.Item-based CF 基本过程: 计算相似度矩阵 Cosine相似度 皮尔逊相似系数 参数聚合进行推荐 根据用户 ...
- CVPR2019 | Mask Scoring R-CNN 论文解读
Mask Scoring R-CNN CVPR2019 | Mask Scoring R-CNN 论文解读 作者 | 文永亮 研究方向 | 目标检测.GAN 推荐理由: 本文解读的是一篇发表于CVPR ...
- AAAI2019 | 基于区域分解集成的目标检测 论文解读
Object Detection based on Region Decomposition and Assembly AAAI2019 | 基于区域分解集成的目标检测 论文解读 作者 | 文永亮 学 ...
- Gaussian field consensus论文解读及MATLAB实现
Gaussian field consensus论文解读及MATLAB实现 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.Introduction ...
- zz扔掉anchor!真正的CenterNet——Objects as Points论文解读
首发于深度学习那些事 已关注写文章 扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 关注他 JustDoIT 等 ...
随机推荐
- CF575A Fibonotci [线段树+矩阵快速幂]
题意 \(s\{\}\) 是一个循环数列 循环节为 \(n\),你可以改掉 \(m\) 项,这 \(m\) 项独立,且不影响循环节 考虑线段树维护矩阵,单点修改最多m次,每次矩阵快速幂就完事了 // ...
- .net mvc中epplus导出excel
帮助类 using OfficeOpenXml; using OfficeOpenXml.Style; using System; using System.Collections.Generic; ...
- UVA1601-双向广度优先搜索
#include <iostream> #include <cstdio> #include <queue> #include <cstring> us ...
- github的版本控制master和branch develop
一.git版本控制原理 master(主分支), develop(分支),虽然是主分支和分支,却是平级关系,develop可以理解为开发库,master为生产库. 本地版本:master, devel ...
- [HNOI2009]图的同构记数
题意 在所以置换下,本质不同的\(n\)阶图个数 做法 可以假想成\(K_n\),边有黑白两色,黑边存在于原图,白边存在于补图 由于\(n\le 60\),可以手算出拆分数不大,所以我们爆搜置换群 对 ...
- SpringMVC中的参数绑定
SpringMVC中的参数绑定 参数绑定的定义 所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller.从客户端请求key/value数据(比如ge ...
- python scraping webs - python取得NIPS oral paper列表
from lxml import html import requests # using xpath # page = requests.get('http://econpy.pythonanywh ...
- PAT 基础编程题目集 6-10 阶乘计算升级版 (20 分)
本题要求实现一个打印非负整数阶乘的函数. 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000.如果N是非负整数,则该 ...
- [CF1303F] Number of Components - 并查集,时间倒流
有一个 \(n \times m\) 矩阵,初态下全是 \(0\). 如果两个相邻元素(四连通)相等,我们就说它们是连通的,且这种关系可以传递. 有 \(q\) 次操作,每次指定一个位置 \((x_i ...
- 每天进步一点点------Modelsim添加Xilinx仿真库的详细步骤
Modelsim,可以选型SE和XE两个版本.Modelsim XE可以直接被ISE调用,而Modelsim SE需要手动添加仿真库.但SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的 ...