系列文章,请多关注
Transformer家族1 – Transformer详解和源码分析
Transformer家族2 – 编码长度优化(Transformer-XL、Longformer)
Transformer家族3 – 计算效率优化(Adaptive-Span、Reformer、Lite-Transformer)
Transformer家族4 – 通用性优化(Universal-Transformer)
Transformer家族5 – 推理加速(Faster-Transformer、TurboTransformers)
NLP预训练模型1 – 综述
NLP中经常出现长程依赖问题,比如一个词语可能和它距离上千位置的另一个词语有关系。长程关系的建立十分困难。常见序列结构模型都有一些难点,如下。
为了提升模型的长程编码能力,从而提升模型在长文本,特别是document-level语料上的效果,我们必须对Transformer编码长度进行优化。本文带来了Transformer-XL、Longformer,详细分析他们如何实现编码长度优化。
LongFormer通过降低attention计算所需内存和算力,来实现长文本编码。我们也可以把它归入到算力优化中。但鉴于其名字就重点体现了它的长距离能力,故还是放在了编码长度优化中,和Transformer-XL一起来分析
论文信息:2019年01月,谷歌 & CMU,ACL 2019
论文地址 https://arxiv.org/abs/1901.02860
代码和模型地址 https://github.com/kimiyoung/transformer-xl
为了解决长文本编码问题,原版Transformer采用了固定编码长度的方案,例如512个token。将长文本按照固定长度,切分为多个segment。每个segment内部单独编码,segment之间不产生交互信息。这种方式的问题如下
Transformer-XL在编码后一个segment时,将前一个segment的隐层缓存下来。后一个segment的self-attention计算,会使用到前一个segment的隐层。后一个segment的第n+1层,对前一个segment的第n层隐层进行融合。故最大编码长度理论上为O(N × L)。在预测阶段,由于对segment隐层使用了缓存,故每预测一个词,不需要重新对之前的文本进行计算。大大提升了预测速度,最大可达到原始Transformer的1800倍。如下图所示
segment递归中有个比较大的问题,就是如何区分不同segment中的相同位置。如果采用原版Transformer中的绝对编码方案,两者是无法区分的。如下
不同segment中的相同位置,其position encoding会相同。这显然是有问题的。Transformer-XL将绝对位置编码改为了q和k之间的相对位置编码,代表了两个token之间的相对位置。从语义上讲,是make sense的。我们来看看具体实现方式。
绝对位置编码的attention计算如下
分为四部分
而采用相对位置编码后,attention计算如下
同样包含四部分,仍然为二者token encoding和position encoding之间的关联关系。区别在于
也有其他文章,采用了不同的相对位置编码方案。比如"Peter Shaw, Jakob Uszkoreit, and Ashish Vaswani.2018. Self-attention with relative position representations. arXiv preprint arXiv:1803.02155." 中只有a和b两部分,丢掉了c和d。Transformer-XL对两种方案进行了对比实验,证明前一种好。
在WikiText-103上的实验结果。WikiText-103包含词级别的超长文本,平均每篇文章长度为3.6K token。利用它可以验证模型的长文本编码能力。实验结果表明Transformer-XL large的PPL最低,效果最好。同时作者在One Billion Word、enwik8、text8上均进行了实验,都表明Transformer-XL效果最好。
模型可编码的有效长度如上,r为top-r难度样本上的表现。Transformer-XL比RNN长80%,比Transformer长450%。证明Transformer-XL可编码长度最长,长程捕获能力最强。
在不同segment长度下,模型预测速度的对比。和原始Transformer相比,预测速度最大可以提升1874倍。
文章对片段级递归和相对位置编码两个Method进行了消融分析,如下
两个改进点均有作用,其中片段级递归作用更大。
论文信息:2020年04月,allenai
论文地址 https://arxiv.org/abs/2004.05150
代码和模型地址 https://github.com/allenai/longformer
Transformer不能捕获长距离信息,本质原因还是因为计算量过大导致的。那我们通过降低attention计算量,是不是就可以提升长距离编码能力呢。答案是肯定的,LongFormer提出了三种attention稀疏化的方法,来降低计算量。
a是原始的全连接方式的attention。后面三种为文章使用的稀疏attention。
作者使用了TVM构建CUDA kernel,加快了longformer的速度,并降低了显存需求。这个又是另一个模型加速方面的话题,我们就先不展开了。
作者在大小模型上均实验了LongFormer的效果。小模型为12 layers,512 hidden。大模型为30 layers,512 hidden。在text8和enwik8数据集上。小模型达到了SOTA。大模型比18层的Transformer-XL好,虽然不如Adaptive-span-Transformer和Compressive,但胜在可以pretrain-finetune
从上表中我们发现,语料都是特别长的长文本。LongFormer真的是document级别的Transformer。
第一个table为RoBERTa和LongFormer在问答、指代消解、分类任务中的对比。第二个table为这几个任务数据集平均文本长度。每项任务都是超出RoBERTa,当文本长度大于512时,performance提升特别明显。更加说明了长程捕获能力在NLP中的重要性。
系列文章,请多关注
Transformer家族1 – Transformer详解和源码分析
Transformer家族2 – 编码长度优化(Transformer-XL、Longformer)
Transformer家族3 – 计算效率优化(Adaptive-Span、Reformer、Lite-Transformer)
Transformer家族4 – 通用性优化(Universal-Transformer)
Transformer家族5 – 推理加速(Faster-Transformer、TurboTransformers)
NLP预训练模型1 – 综述