一、写在前面的话
Transformer-XL主要是针对长文本问题提出了两点改进,一是对分段文本进行编码时,加入相连的上一段的编码信息(这一改进其实可以用在其他模型中,并不是Transformer这一结构特有的改进);二是对Transformer使用的位置编码进行改进,因为Transformer使用的是绝对位置编码,所以当对文本进行分段处理之后,绝对位置编码就会出现问题,故而通过对计算公式的改进,引入相对编码。
二、论文模型
Transformer-XL本质还是Transformer,其整体结构与Transformer一致:
1. 句段层级的循环机制
不论是循环神经网络还是Transfomer,其在处理长文本时都是采取将长文本切分成几个满足要求的独立的小文本,但这样的处理破坏了文本本身的上下文信息。
为了解决上述问题,Transformer-XL采用了句段层级的循环机制。当一条长句子被切分成若干小句段时,为了计算当前句段的表征,系统会缓存前一个句段的表征,并将其加入到当前句段的表征中:
问题的关键在于,在计算当前序列当前层的隐藏状态时,如何引入前一个序列上一层的隐藏状态。TransformerXL的做法很简单,就是按照序列长度的维度将他们concate起来。如下的公式所示:
2. 相对位置编码
由于我们使用句段层级的循环机制,所以我们对每一个句段使用绝对位置编码并不符合该词实际在原来的句子中的位置。因此,Transformer-XL引入相对编码替代绝对编码,同时设置更多的可学习参数帮助控制。
在传统的Transformer中,计算和键之间的attention计算式为:
展开就是:
在Transformer-XL中,对上述的attention计算方式进行了变换,转为相对位置的计算,而且不仅仅在第一层这么计算,在每一层都是这样计算。
可以发现Transformer-XL使用相对位置替代键的绝对位置,同时对权重进行区分,分为针对词向量的权重和位置的权重。个人认为其实的权重也做了相应的操作,但为了保险,作者在这里使用了和两个可学习的参数向量来替代这一操作(具体是否有必要个儿还没实验过,后续可能实验看看结果)。
三、实验结果
按照论文的描述,TransformerXL学习的依赖关系比RNN长80%,比传统Transformer长450%,在短序列和长序列上都获得了更好的性能,并且在评估阶段比传统Transformer快1800+倍。