0
点赞
收藏
分享

微信扫一扫

DeFormer Decomposing Pre-trained Transformers for Faster Question Answering

bncmGV.png

DeFormer: Decomposing Pre-trained Transformers for Faster Question Answering

DeFormer:分解预先训练好的Transformers以提高问题回答速度

TF code

Abstract

​ BERTQA中应用了大量的自注意力,导致了模型训练的速度很慢并且占用大量内存。本文提出一个Deformer模型用于分解transformer,具体来说用较低层的question-wide和passage-wide的self-attention(分别计算self-attention)替代question-passage的全局注意力,由于Deformer与原始模型很相似,因此用原始的transformer的预训练权重初始化Deformer。速度提升了4倍,通过简单的知识蒸馏,准确度仅下降1%。

1 Introduction

​ 基于Transformer的模型中,大部分的计算开销都是来自每一层的自注意力计算。在MRC式的QA中,算力主要是消耗在问题和passage的自注意力计算,虽然自注意力有助于模型创建高效的问题上下文表示,但是构建context表示需要更多的时间,因为context的长度总是比question长的多,如果context可以独立于问题进行处理,那么最难计算的context表示就减少了一部分和question的attention计算,可以加速QA过程。有研究表明:transformer较低层编码倾向于关注一些局部特征,如词形、语法等;较高层才逐渐编码与下游任务相关的全局语义信息(远距离信息)。也就是说:在较低层passage编码对question的依赖不高,因此本文采用的在较低层对question和context分别编码,在较高层联合处理(形成question-context联合表征进行交互编码),如图1所示:

bncV5q.png

​ 假设n层模型中的前K个较低层独立的处理question和context,Deformer将两个第K层的表示作为输入馈送到第K+1层,这种方法很显然能减少运算量和内存。Deformer的上层应该生成与transformer相应层相同类型信息的表示,因此本文增加了两个蒸馏式损失,目的是用于最小化分解模型和原始模型之间的高层表征和分类层logits

​ 在三个QA数据集上进行评估模型,分别基于BERT和XLNet。速度提升了2.7 to 3.4倍,内存减少了65.8% to 72.9%,性能减少了0.6 to 1.8。BERT-large比BERT-base速度更快,精确度更高。

2 The Approach

​ 基于transformer模型的MRC框架是计算question-context上的self-attention。这种方式产生了输入对的高效表示,因为从文本中提取什么信息通常取决于问题。想要降低复杂性,可以牺牲一些代表性能力来换取脱机处理文本的能力(脱机文件:一般指保存的网页,即不联网也能浏览网页的内容)。本文也测量了文本表示在与不同问题配对时的变化(计算了上下文与不同问题配对时的段落表征方差),得出结论:在较低层中文本表示的变化不像在较高层中的那么大,这表明在较低层中忽略question-context的注意力计算影响不会太大。先前的研究也表明:较低层倾向于对局部现象(词性、句法类别等)建模较高层倾向于对依赖任务(实体共指)的更多语义现象进行建模

2.1 DeFormer

定义两段文本表示 T a 、 T b T_a、T_b TaTb的配对任务的transformer计算。

T a Ta Ta嵌入的表示是: A = [ a 1 ; a 2 ; . . . ; a q ] \mathrm{A}=[a_1;a_2;...;a_q] A=[a1;a2;...;aq]

T b T_b Tb嵌入的表示是: B = [ b 1 ; b 2 ; . . . ; b p ] \mathrm{B}=[b_1;b_2;...;b_p] B=[b1;b2;...;bp]

完整的输入序列X表示为: X = [ A ; B ] \mathrm{X}=[\mathrm{A};\mathrm{B}] X=[A;B]

Transformer如果有n层,第i层表示为 L i L_i Li,这些层按顺序转换表示为:
x l + 1 = L i ( x l ) \mathrm{x}^{l+1}=L_i(\mathrm{x}^l) xl+1=Li(xl)
将第i层到第j层的层叠表示为: L i : j L_{i:j} Li:j

完整transformer、 A n \mathrm{A}^n An B n \mathrm{B}^n Bn的输出为:
[ A n ; B n ] = L 1 : n ( [ A 0 ; B 0 ] ) [\mathrm{A}^n;\mathrm{B}^n]=L_{1:n}([\mathrm{A}^0;\mathrm{B}^0]) [An;Bn]=L1:n([A0;B0])
模型图3所示:

bncMMF.png

简单的去除 T a \mathrm{T}_a Ta T b \mathrm{T}_b Tb表示之间的交叉交互,分解较低层计算(到第K层)。分解后的输出为:

[ A n ; B n ] = L k + 1 : n ( [ L 1 : k ( A 0 ) ; L 1 : k ( B 0 ) ) ] ) [\mathrm{A}^n;\mathrm{B}^n]=L_{k+1:n}([L_{1:k}(\mathrm{A}^0);L_{1:k}(\mathrm{B}^0))]) [An;Bn]=Lk+1:n([L1:k(A0);L1:k(B0))])
基于transformer的问答系统通过一组自我关注层将输入问题和上下文一起处理。因此,将此分解应用于Transformer for QA允许我们独立处理问题和上下文文本,这反过来又允许我们离线计算较低层的上下文文本表示。

在较低层的时间复杂度从 O ( ( p + q ) 2 ) O((p+q)^2) O((p+q)2) O ( q 2 + c ) O(q^2+c) O(q2+c),其中 c c c表示加载缓存表示的成本。

2.2 Auxiliary Supervision for DeFormer辅助监督

​ 使用transformer预训练的权重参数训练DeFormer。由于section2.1在较低层将question和passage进行独立编码,因此会丢失一些信息,本文通过对上层微调弥补这一缺点,并且还添加了辅助损失,使DeFormer的预测及其上层表示更接近于transformer的预测和相应的层表示

2.2.1 Knowledge Distillation Loss知识蒸馏损失

将分解transformer的预测分布 P A P_A PA和transformer预测分布 P B P_B PB之间的KL散度最小化:
L k d = D K L ( P A ∣ ∣ P B ) \mathcal{L_{kd}}= D_{KL}(P_A||P_B) Lkd=DKL(PAPB)

2.2.2 Layerwise Representation Similarity Loss

通过最小化分解transformer上层的token表示与transformer之间的欧几里得距离使得DeFormer的上层表示更接近于transformer的token表示
L l r s = ∑ i = k n ∑ j = 1 m ∣ ∣ v j i − u j i ∣ ∣ 2 \mathcal{L_{lrs}}=\sum_{i=k}^{n}\sum^{m}_{j=1}{||\mathrm{v}_j^i-\mathrm{u}_j^i||}^2 Llrs=i=knj=1mvjiuji2
v i j \mathrm{v}_i^j vij是transformer中第i层的第j个token的表示 u i j \mathrm{u}_i^j uij是Deformer中对应的表示

2.2.3 最终损失

本文将知识蒸馏损失 L k d \mathcal{L_{kd}} Lkd和分层表示相似性损失 L l r s \mathcal{L_{lrs}} Llrs与特定任务的监督损失 L t s \mathcal{L_{ts}} Lts相加,通过超参数来调整它们的相对重要性,超参数使用贝叶斯优化来调整的,这种方法减少了寻找最优化参数组合所需要的步骤数。
L t o t a l = γ L t s + α L k d + β L l r s \mathcal{L_{total}}=\gamma\mathcal{L_{ts}}+\alpha\mathcal{L_{kd}}+\beta\mathcal{L_{lrs}} Ltotal=γLts+αLkd+βLlrs

3 Experiment

3.1 Datasets

SQuAD:众包工作者在维基百科上生成的超过10万个问答对

RACE:从英语考试中收集到的阅读理解数据集,旨在评估初中生的阅读和理解能力。超过28K个段落和100K个问题

BooIQ:15942个由是/否的问题组成的,这些问题出现在无提示、不受约束的环境中。

MNLI:是一个由43.3万个句子对组成的众包语料库,用文本蕴涵信息进行标注

QQP:由超过40W个来自Quora的潜在重复问题对组成

3.2 Implementation Details

对于DeFormer-Bert和DeFormer-XLNet,通过离线计算其中一个输入段的表示并缓存它。对于问答,缓存段落;对于自然语言推理,缓存前提;对于问题相似度,缓存第一个问题

3.3 Result

表1显示了使用9个下层和3个上层时BERT-BASE和DeFormer-BERT-BASE的性能、推理速度和内存需求的主要比较结果

bncn2T.png

在所有数据集中观察到显著的加速比和显著的内存减少,同时保持了原始模型的大部分有效性,XLNet在同一表格中的结果证明了不同预先训练的transformer架构的分解有效性。

表2显示,在采用成对输入序列的QQP和MNLI数据集上,分解带来了2倍的推理加速和超过一半的内存减少。

bnceP0.png

3.3.1 Small Distilled or Large Decomposed?小蒸馏还是大蒸馏?

表3比较了BERT-BASE、BERT-LARGE和DeFormer-BERTLarge的性能、速度和内存。

bncEan.png

DeFormer-Bert-Large比较小的Bert-Base模型快1.6倍。事实证明,分解较大的模型也比使用较小的基础模型(+2.3点)更有效。这表明,通过分解,大型transformer可以比尺寸为其一半的小型transformer运行得更快,同时也更精确。

3.4 Divergence of DeFormer and original BERT representations

最初的Bert和DeFormer-Bert之间的主要区别是在较低的层没有交叉注意。本文分析了这两个模型在所有层的表示之间的差异。

为此本文从SQuAD开发人员数据集中随机选择了100个段落,并随机选择了与每个段落相关的数据集中已经存在的5个不同的问题。对于每一篇文章,我们使用精调的原始BERT-BASE模型和DeFormerBERT-BERT模型对所有5个question-passage对序列进行编码,并==计算它们在每一层的向量表示的距离==。

图5显示了问题和文章在不同层次上的平均距离。

bucsNn.png

两个模型的pasage和question的低层表征保持相似,但上层表征有显著差异,缺乏交叉注意对低层的影响小于高层得到了证明。此外,使用上层的辅助监督可以强制DeFormer生成更接近原始模型的表示,从而达到预期效果。对于问题表征,这种影响不那么明显。

4 启示

  1. 损失函数超参数的调整能够减少算力开销
  2. 可以通过RNN进行替代,先分开编码再联合编码、先用RNN分开编码,再用BERT学习联合特征,这样会不会BERT的所有层都学习的全局的信息呢?(更多的语义信息)。
举报

相关推荐

0 条评论