[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 等 ...
随机推荐
- Java后端API调用身份验证的思考
在如今信息泛滥的数字时代中对产品安全性的要求越来越高了,就比如说今天要讨论的Java后端API调用的安全性,在你提供服务的接口中一定要保证调用方身份的有效性和合法性,不能让非法的用户进行调用,避免数据 ...
- openlayers轨迹播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- gulp常用插件之gulp-cache使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-cache这是一款基于临时文件的gulp缓存代理任务. 更多使用文档请点击访问gulp-cache工具官网. 安装 一键安装不多解释 n ...
- web服务器的解析漏洞罗列
前言 服务器相关中间件存在一些解析漏洞,攻击者可通过上传一定格式的文件,被服务器的中间件进行了解析,这样就对系统造成一定危害.常见的服务器解析漏洞涉及的中间件有IIS,apache.nginx等.可利 ...
- pandas玩转excel-> (1)如何利用pandas创建【行,列,单元格】
import pandas as pd #------新建单元格的方法一:通过先创建字典的形式 #可以先新建一个字典d={'x':100,'y':200,'z':300} #打印字典的索引print( ...
- 小白月赛22 E : 方格涂色
E:方格涂色 考察点 : 思维,模拟 坑点 : long long 其他的好像没什么,读懂题意就可以 AC 不要被样例画的图所迷惑 Code: #include <vector> #inc ...
- Hadoop学习之路(5)Mapreduce程序完成wordcount
程序使用的测试文本数据: Dear River Dear River Bear Spark Car Dear Car Bear Car Dear Car River Car Spark Spark D ...
- unity ui中使用onmouseover
unity ui中鼠标移进或者移出的触发方式与2d.3d的不同,2d.3d物体使用的是onmouseover,ui使用的是OnPointerEnter.需要实现以下两个接口. public class ...
- java中堆栈的一些理解备忘
堆:用来存放对象的信息,同一个类存放各自的成员变量,共享对象的方法. 栈:用来保存局部变量的值,包括基本数据类型的值.保存类的实例(堆区对象的引用).保存加载方法的帧. 常量池:包含了一个类型所有的对 ...
- 想要学好Git,应该掌握哪些基础知识?
说到Git,作为程序员的你,在项目开发中一定会使用到或将来也一定会使用到的,但是我相信,很多在使用Git的人,都只是停留一些简单的操作上,比如提交(commit).拉取(pull).推送(push). ...