ConvBERT:通过基于跨度的动态卷积改进BERT

摘要

像BERT及其变体这样的预训练语言模型最近在各种自然语言理解任务中取得了令人印象深刻的性能。然而,BERT严重依赖于全局自注意力机制,因此存在较大的内存占用和计算成本。尽管所有的注意力头都从全局角度查询整个输入序列以生成注意力图,但我们观察到一些头只需要学习局部依赖关系,这意味着存在计算冗余。因此,我们提出了一种新颖的基于跨度的动态卷积来替换这些自注意力头,以直接建模局部依赖关系。这种新颖的卷积头与其余的自注意力头一起,形成了一个新的混合注意力块,在全局和局部上下文学习中更加高效。我们为BERT配备了这种混合注意力设计,并构建了一个ConvBERT模型。实验表明,ConvBERT在各种下游任务中显著优于BERT及其变体,同时训练成本和模型参数更少。值得注意的是,ConvBERTBASE模型在GLUE基准测试中取得了86.4分,比ELECTRABASE高0.7分,而训练成本不到其四分之一。

1 引言

语言模型预训练已经显示出提高许多自然语言处理任务能力的巨大力量。大多数预训练模型,尽管种类繁多,但都遵循BERT架构,严重依赖多头自注意力来学习全面的表示。已经发现:1)尽管BERT中的自注意力模块是一个高度非局部的操作符,但由于自然语言的固有特性,很大一部分注意力头实际上学习的是局部依赖关系;2)在下游任务的微调过程中移除一些注意力头并不会降低性能。这两个发现表明,在当前模型设计中存在大量的计算冗余。在这项工作中,我们旨在解决这一内在冗余问题,并进一步提高BERT的效率和下游任务性能。我们考虑这样一个问题:我们能否通过使用一种自然的局部操作来替换一些注意力头,从而减少注意力头的冗余?我们注意到卷积在提取局部特征方面非常成功,因此提出使用卷积层作为自注意力的更高效补充,以解决自然语言中的局部依赖关系。

具体来说,我们提出将卷积集成到自注意力中,形成一种混合注意力机制,结合了两种操作的优点。自注意力使用所有输入标记来生成注意力权重以捕捉全局依赖关系,而我们期望执行局部“自注意力”,即接收当前标记的局部跨度来生成该跨度的“注意力权重”以捕捉局部依赖关系。
在这里插入图片描述

为了实现这一点,而不是部署标准卷积(所有输入标记共享固定参数),动态卷积[66]是一个很好的选择,它在捕捉不同标记的局部依赖关系方面提供了更高的灵活性。如图1b所示,动态卷积使用一个核生成器为不同的输入标记生成不同的核。然而,这种动态卷积无法区分不同上下文中的相同标记并生成相同的核(例如,图1b中的三个“can”)。

因此,我们开发了基于跨度的动态卷积,这是一种新颖的卷积,通过接收输入跨度而不是单个标记来生成更自适应的卷积核,这使得生成的核能够区分不同上下文中的相同标记。例如,如图1c所示,所提出的基于跨度的动态卷积为不同的“can”标记生成不同的核。通过基于跨度的动态卷积,我们构建了混合注意力以改进传统的自注意力,这为预训练带来了更高的效率,并在捕捉全局和局部信息方面提供了更好的性能。

为了进一步提高性能和效率,我们还在BERT中添加了以下新的架构设计。首先,设计了一个瓶颈结构,通过将输入标记嵌入到低维空间进行自注意力来减少注意力头的数量。这也缓解了注意力头中的冗余并提高了效率。其次,BERT中的前馈模块由两个全连接线性层和一个中间的激活函数组成,但内层的维度设置得比输入和输出的维度高得多(例如,4倍),这保证了良好的性能,但带来了大量的参数和计算。因此,我们为前馈模块设计了一个分组线性操作符,它在不损害表示能力的情况下减少了参数。将这些创新结合起来,使我们提出的模型,称为ConvBERT,变得小巧而高效。

我们的贡献总结如下。1)我们提出了一种新的混合注意力来替换BERT中的自注意力模块,它利用卷积的优点更好地捕捉局部依赖关系。据我们所知,我们是第一个探索卷积以提高BERT效率的。2)我们引入了一种新颖的基于跨度的动态卷积操作,利用多个输入标记动态生成卷积核。3)基于所提出的基于跨度的动态卷积和混合注意力,我们构建了ConvBERT模型。在GLUE基准测试中,ConvBERTBASE取得了86.4分的GLUE分数,比BERTBASE高5.5分,比ELECTRABASE高0.7分,同时需要更少的训练成本和参数。4)ConvBERT还包含一些新的模型设计,包括瓶颈注意力和分组线性操作符,这些设计对其他NLP模型开发具有独立的意义。

2 相关工作

语言模型预训练 语言模型预训练首先在大规模未标注文本语料库上预训练模型,然后在下游任务上微调模型。最初提出的是学习独立的词表示。随后,基于LSTM的CoVe和ELMo被开发出来以生成上下文相关的词表示。最近,由于包含多头自注意力和前馈模块的Transformer架构在许多NLP任务中显示出比LSTM更好的效果,GPT采用Transformer作为其生成式预训练的骨干,并在下游任务上取得了显著的性能提升。为了进一步提高预训练模型的效果,开发了更有效的预训练目标,包括BERT中的掩码语言建模和下一句预测,XLNet中的广义自回归预训练,SpanBERT中的跨度边界目标,以及ELECTRA中的替换标记检测。其他一些工作通过权重剪枝、权重共享、知识蒸馏和量化来压缩预训练模型。我们的方法与上述方法是正交的。还有一些工作通过融入知识、多语言和多模态来扩展预训练。然而,据我们所知,自GPT以来,没有研究在骨干架构设计方面改进预训练模型。这项工作是少数继续致力于设计更好的骨干架构以提高预训练模型性能和效率的工作之一。

NLP模型中的卷积 卷积块已被用于NLP模型中以编码上下文的局部信息和依赖关系,但在预训练领域尚未探索。例如,1D卷积被应用于特定的序列到序列学习任务,如机器翻译和摘要生成。深度可分离卷积被部署在翻译任务的文本编码器和解码器中,以减少参数和计算成本。最近的一项工作利用轻量级和动态卷积进一步增强卷积的表达能力。然而,所有这些模型在捕捉长句子的整个上下文的能力上都有限。为了增强这一点,一些工作以顺序或多分支的方式将卷积与Transformer结合。据我们所知,我们的工作是第一个探索将卷积应用于预训练模型的工作。

3 方法

我们首先详细阐述如何通过重新审视自注意力和动态卷积来识别自注意力头在学习局部依赖关系时的冗余。然后我们解释建模局部依赖关系的新颖的基于跨度的动态卷积,最后是我们提出的由混合注意力块构建的ConvBERT模型。

3.1 动机

自注意力 自注意力块是BERT的基本构建模块,它有效地建模了输入标记序列中的全局依赖关系。如图3a所示,给定输入 X ∈ R ( n × d ) X ∈ R^{(n×d)} XR(n×d),其中d是隐藏维度,n是标记的数量,自注意力模块对输入X应用三个线性变换,并将它们分别嵌入到键K、查询Q和值V中,其中 K , Q , V ∈ R ( n × d ) K, Q, V ∈ R^{(n×d)} K,Q,VR(n×d)。假设有H个自注意力头。键、查询和值嵌入被均匀分割成 d k = d / H d_k = d/H dk=d/H维的段。自注意力模块以以下形式给出输出:

S e l f − A t t n ( Q , K , V ) = s o f t m a x ( Q ⊤ K d k ) V . \mathrm{Self-Attn}(Q,K,V)=\mathrm{softmax}\left(\frac{Q^\top K}{\sqrt{d_k}}\right)V. SelfAttn(Q,K,V)=softmax(dk QK)V. (1)

在这里插入图片描述

BERT 及其变体成功应用了自注意力机制并取得了高性能。然而,尽管自注意力操作符具有非局部特性,但由于自然语言的固有属性,BERT中的一些注意力头确实学习了输入序列的局部依赖性 。如图2a所示,
在这里插入图片描述

BERT的平均注意力图明显显示出类似于[31]分析的对角线模式,这意味着很大一部分注意力头学习了局部依赖性。由于自注意力计算了所有标记对之间的注意力权重,如公式1所示,许多超出捕获的局部上下文的注意力权重是不必要计算的,因为它们与局部权重相比贡献较小。这导致了不必要的计算开销和模型冗余。受此启发,我们采用卷积操作来捕捉局部依赖性,考虑到它比自注意力更适合学习局部依赖性。

轻量级和动态卷积 轻量级卷积 可以有效地建模局部依赖性。设卷积核为 W ∈ R d × k W\in\mathbb{R}^{d\times k} WRd×k。位置i和通道c的深度卷积输出可以表示为 D W C o n v ( X , W c , : , i , c ) = ∑ j = 1 k W c , j \mathrm{DWConv}(X,W_{c,:},i,c)=\sum_{j=1}^{k}W_{c,j} DWConv(X,Wc,:,i,c)=j=1kWc,j。通过在通道维度上绑定权重,我们可以将卷积核简化为 W ∈ R k W\in\mathbb{R}^k WRk,得到以下轻量级卷积:

L C o n v ( X , W , i ) = ∑ j = 1 k W j ⋅ X ( i + j − ⌈ k + 1 2 ⌉ ) \mathrm{LConv}(X,W,i)=\sum_{j=1}^{k}W_{j}\cdot X_{(i+j-\lceil\frac{k+1}{2}\rceil)} LConv(X,W,i)=j=1kWjX(i+j2k+1⌉) (2)

与传统的深度卷积相比,这大大减少了参数大小(实际中为256或768)。然而,训练后,卷积核参数将对任何输入标记固定,不利于捕捉输入标记的多样性。因此,我们进一步考虑动态卷积,它根据特定输入标记生成卷积核参数。如图3b所示,经过线性投影和门控线性单元(GLU)后,从当前输入标记生成动态卷积核,并应用于与附近标记卷积以生成新的表示嵌入。与训练后固定的标准卷积核相比,动态卷积可以更好地利用输入信息并生成基于输入标记的卷积核。具体来说,使用位置i的位置依赖卷积核 W = f ( X i ) \mathrm{W}{=}f(X_i) W=f(Xi),其中f是具有可学习权重 W f ∈ R k × d k W_f\in\mathbb{R}^{k\times d_k} WfRk×dk的线性模型,后接softmax。我们将动态卷积表示为:

D C o n v ( X , W f , i ) = L C o n v ( X , s o f t m a x ( W f X i ) , i ) \mathrm{DConv}(X,W_f,i)=\mathrm{LConv}(X,\mathrm{softmax}(W_fX_i),i) DConv(X,Wf,i)=LConv(X,softmax(WfXi),i) (3)

与自注意力相比,自注意力对输入序列长度的计算复杂度为二次方,而线性复杂度的动态卷积更高效,更适合建模局部依赖性,并在机器翻译、语言建模和抽象摘要任务中显示出有效性。然而,我们观察到其卷积核仅依赖于输入的单个标记,忽略了局部上下文。在不同上下文中对具有不同含义和关系的相同标记使用相同的卷积核会损害模型性能。因此,我们提出以下基于跨度的动态卷积。

3.2 基于跨度的动态卷积

基于跨度的动态卷积首先使用深度可分离卷积来收集一定跨度内标记的信息,如图3c所示,然后动态生成卷积核。这有助于卷积核通过基于局部上下文(而非单个标记)生成输入标记的局部关系,从而更有效地捕捉局部依赖性。
在这里插入图片描述

此外,为了使基于跨度的动态卷积与自注意力兼容,我们对输入X应用线性变换以生成查询Q和值V,并使用深度可分离卷积生成跨度感知的Ks。从输入X转换而来的查询Q和跨度感知键Ks对的逐点乘法结果随后用于生成动态卷积核。具体来说,以查询和键对Q; Ks作为输入,卷积核通过以下方式生成:

f ( Q , K s ) = s o f t m a x ( W f ( Q ⊙ K s ) ) f(Q,K_s)=\mathrm{softmax}(W_f(Q\odot K_s)) f(Q,Ks)=softmax(Wf(QKs)) (4)

其中⊙表示逐点乘法。如图3c所示,我们称这种新操作为基于跨度的动态卷积。输出可以表示为:

S D C o n v ( Q , K s , V ; W f , i ) = L C o n v ( V , s o f t m a x ( W f ( Q ⊙ K s ) ) , i ) \mathrm{SDConv}(Q,K_s,V;W_f,i)=\mathrm{LConv}(V,\mathrm{softmax}(W_f(Q\odot K_s)),i) SDConv(Q,Ks,V;Wf,i)=LConv(V,softmax(Wf(QKs)),i) (5)

然后应用线性层进行进一步处理。除非另有说明,我们始终为深度可分离卷积和基于跨度的动态卷积保持相同的核大小。

3.3 ConvBERT架构

基于上述的跨度动态卷积,我们开发了新颖的混合注意力块和高效的ConvBERT模型。

混合注意力
混合注意力块集成了基于跨度的动态卷积和自注意力机制,以更好地建模全局和局部依赖关系,同时减少冗余,如图4所示。自注意力和基于跨度的动态卷积共享相同的查询,但使用不同的键作为参考来生成注意力图和卷积核。用Cat( , )表示连接操作,我们将混合注意力公式化为:
Mixed-Attn ( K , Q , K s , V ; W f ) = C a t ( S e l f − A t t n ( Q , K , V ) , S D C o n v ( Q , K s , V ; W f ) ) \text{Mixed-Attn}(K,Q,K_s,V;W_f)=\mathrm{Cat}(\mathrm{Self-Attn}(Q,K,V),\mathrm{SDConv}(Q,K_s,V;W_f)) Mixed-Attn(K,Q,Ks,V;Wf)=Cat(SelfAttn(Q,K,V),SDConv(Q,Ks,V;Wf)) (6)

最终输出被送入前馈层进行进一步处理。

自注意力的瓶颈设计
由于部分注意力头存在冗余,我们提出在引入基于跨度的动态卷积模块的同时减少注意力头的数量。我们称之为瓶颈结构,因为输入嵌入首先被投影到一个低维空间,然后通过自注意力模块,如图4所示。具体来说,在原始BERT中,维度为d的嵌入特征通过线性变换投影到原始Transformer架构中具有相同维度d的查询、键和值。相反,我们将嵌入特征投影到一个更小的维度 d / γ d/\gamma d/γ空间进行进一步处理,其中 γ > 1 \gamma>1 γ>1是缩减比例。同时,我们将注意力头的数量按比例 γ \gamma γ减少。这大大节省了自注意力内的计算成本,并迫使注意力头生成更紧凑和有用的注意力信息。

分组前馈模块
Transformer模型中大量的参数实际上来自前馈模块。为了在减少参数和计算成本的同时保持表示能力,我们提出以分组方式对前馈模块应用分组线性(GL)操作符,其定义如下:

M = Π i = 0 g [ f d g → m g i ( H [ : , i − 1 : i × d g ] ) ] , M ′ = G e L U ( M ) , H ′ = Π i = 0 g [ f m g → d g i ( M [ : , i − 1 : i × m g ] ′ ) ] M=\Pi_{i=0}^{g}\left[f_{\frac{d}{g}\to\frac{m}{g}}^{i}\left(H_{[:,i-1:i\times\frac{d}{g}]}\right)\right],M^{\prime}=\mathrm{GeLU}(M),H^{\prime}=\Pi_{i=0}^{g}\left[f_{\frac{m}{g}\to\frac{d}{g}}^{i}\left(M_{[:,i-1:i\times\frac{m}{g}]}^{\prime}\right)\right] M=Πi=0g[fgdgmi(H[:,i1:i×gd])],M=GeLU(M),H=Πi=0g[fgmgdi(M[:,i1:i×gm])](7)

其中, H ; H 0 ∈ R n × d , M ; M 0 ∈ R n × m , f d 1 → d 2 ( ⋅ ) H;H_0\in\mathbb{R}^{n\times d},M;M_0\in\mathbb{R}^{n\times m},f_{d_1\to d_2}(\cdot) H;H0Rn×d,M;M0Rn×m,fd1d2()表示将维度从 d 1 d_{1} d1转换到 d 2 d_{2} d2的全连接层,g 是分组数量, I I \mathrm{II} II表示拼接操作。这与原始的多头注意力机制一致,其中输入特征在嵌入维度上被分成多个组并独立处理,所有处理后的特征在嵌入维度上再次拼接。这比全连接层更高效,并且性能下降可以忽略不计。

通过以迭代方式堆叠混合注意力模块和分组前馈模块,我们构建了ConvBERT模型。正如第4节实验所证明的那样,ConvBERT在捕捉全局和局部上下文方面更轻量、更高效,并且性能更好。

4 实验

4.1 实现

我们在[9]提出的替换标记检测预训练任务上评估了我们提出的架构的有效性。关于任务和实现的更多细节列在附录中。我们评估了不同模型大小的ConvBERT。根据[9],对于小型模型,隐藏维度为256,而词嵌入维度减少到128。与原始Transformer架构一样,前馈模块的中间层大小为1024(隐藏维度的4倍),并且我们保持层数为12。对于注意力头的数量,小型模型保持为4。此外,我们还使用了一个中等大小的模型,嵌入维度为384,注意力头数为8。通过插入基于跨度的动态卷积并应用分组线性操作,模型可以减小到与小型模型相当的尺寸,同时具有更强的表示能力。对于基础大小的模型,我们采用了常用的BERT-base配置,隐藏维度为768,层数为12。对于注意力头的数量,基础模型使用12个作为基线。当应用瓶颈结构(即减少自注意力的隐藏空间维度)时,我们还将注意力头数减少γ=2倍,以保持每个头的大小不变。

在预训练期间,小型模型和基础模型的批量大小分别设置为128和256。使用长度为128的输入序列更新模型。我们展示了这些模型在预训练1M次更新后的结果,以及预训练更长时间(4M次更新)后的结果。更多关于预训练和微调的详细超参数列在附录中。

4.2 预训练与评估

预训练数据集
预训练任务主要依赖于大规模的文本数据。最初用于训练BERT的WikiBooks数据集是英文维基百科和BooksCorpus的组合。RoBERTa、XLNet[69]和ELECTRA[9]进一步提出使用更大的语料库,包括OpenWebText、STORIES、CCNEWS、ClueWeb和Gigaword以提高整体性能。然而,像BooksCorpus这样的数据集不再公开可用。在本文中,除非另有说明,我们在开源数据集OpenWebText(32G)上训练模型以方便复现,该数据集的大小与用于BERT训练的英文维基百科和BooksCorpus的组合相当。我们还在附录中展示了在BERT相同数据(即WikiBooks)上训练的模型结果。更多关于语料库信息以及如何收集和过滤文本数据的细节可以在[48]中找到。

评估
我们在通用语言理解评估(GLUE)基准以及问答任务SQuAD上评估我们的模型。GLUE基准包括各种任务,这些任务被格式化为单句或句子对分类。有关所有任务的更多细节请参见附录。SQuAD是一个问答数据集,其中每个示例由一个上下文、一个问题和一个来自上下文的答案组成。目标是根据给定的上下文和问题定位答案。在SQuAD V1.1中,答案始终包含在上下文中,而在V2.0中,某些答案不包含在上下文中。

我们测量MNLI、QNLI、QQP、RTE、SST的准确率,STS的Spearman相关性以及CoLA的Matthews相关性。GLUE分数是所有8个任务的平均值。由于SQuAD排行榜上几乎没有单一模型提交,我们仅在开发集上与其他模型进行比较。我们报告了v1.1和v2.0开发集上的精确匹配(Exact Match)和F1分数。为了公平比较,除非另有说明,我们保持与ELECTRA相同的配置。除了BERT和ELECTRA,我们还比较了基于知识蒸馏的方法,包括TinyBERT、MobileBERT和DistillBERT。所有结果均通过单任务微调获得。

4.3 消融研究

为了更好地研究每个组件,我们逐步向原始BERT架构中添加瓶颈结构、基于跨度的动态卷积和分组线性操作。此外,我们还增加了隐藏维度,以展示通过增加参数大小带来的性能提升。详细配置和结果如表1所示。
在这里插入图片描述

瓶颈结构和分组线性操作
一个有趣的发现是,引入瓶颈结构和分组线性操作可以在不显著影响性能的情况下减少参数数量和计算成本。在小型模型设置中,它甚至可能带来好处。这可能是因为剩余的注意力头被迫学习更紧凑的表示,从而具有更好的泛化能力。

卷积核大小
我们研究的另一个因素是动态卷积的卷积核大小。图5展示了在小型ConvBERT模型上应用不同卷积核大小的结果。
在这里插入图片描述

可以观察到,只要感受野没有覆盖整个输入句子,较大的卷积核会带来更好的结果。然而,当卷积核大小足够大且感受野覆盖所有输入标记时,使用大卷积核的好处会减弱。在后续实验中,除非另有说明,我们将所有动态卷积的卷积核大小设置为9,因为它提供了最佳结果。

卷积集成方式
我们在此测试了将卷积集成到自注意力机制中的不同方式。如表2所示,直接添加传统的深度可分离卷积与自注意力模块并行会损害性能,而插入动态卷积对基线BERT架构的平均GLUE分数几乎没有改进。通过进一步增加基于跨度的动态卷积的局部依赖性,性能可以显著提高。
在这里插入图片描述

4.4 对比结果

我们将ConvBERT模型与BERT、ELECTRA以及最先进的方法在GLUE和SQuAD上进行比较,以验证我们方法的优势。

GLUE上的结果
我们评估了所有方法在GLUE开发集和测试集上不同下游任务的性能。参见表3。由于篇幅限制,我们仅展示测试集的详细结果,并将开发集的结果放在附录中。从表3可以看出,我们的小型和基础模型在相似模型大小的情况下优于其他基线模型,同时需要更少的预训练成本。例如,与强基线ELECTRABASE相比,我们的ConvBERTBASE以不到1/4的训练成本实现了更好的性能。需要注意的是,TinyBERT [25]和MobileBERT [60]依赖于预训练的大型教师网络。我们的模型实际上是一个新的骨干网络,因此与这些压缩技术是正交的。由于计算资源限制,我们将大型模型的比较留待未来工作。

在这里插入图片描述

SQuAD上的结果
我们还在问答任务基准SQuAD 上评估了我们的模型。表4展示了我们提出的ConvBERT以及其他方法在相似模型大小下的结果。对于小型模型,我们的ConvBERTSMALL和ConvBERTMEDIUM-SMALL优于基线ELECTRASMALL,并取得了与BERTBASE相当的结果。MobileBERT的结果更高,因为它们使用了知识蒸馏,并基于SQuAD的开发集搜索模型架构和超参数。以更少的预训练成本,我们的基础模型在相似大小的模型中表现优于所有其他模型。

在这里插入图片描述

5 结论

我们提出了一种新颖的基于跨度的动态卷积操作符,并将其集成到自注意力机制中,形成了用于语言预训练的混合注意力块。我们还设计了一种应用于自注意力模块的瓶颈结构以及用于前馈模块的分组线性操作。实验结果表明,集成了上述创新的ConvBERT模型在显著减少预训练计算成本的同时,实现了性能的持续提升。

更广泛的影响
积极影响
预训练方案已在自然语言处理领域广泛部署。它提出首先通过在大规模语料库上进行自监督学习来训练一个大型模型,然后在下游任务上快速微调模型。这种预训练方案已经产生了一系列强大的语言模型,而BERT是最受欢迎的之一。在这项工作中,我们开发了一种新的基于预训练的语言理解模型——ConvBERT。与BERT模型相比,它具有更小的模型规模、更低的训练成本和更好的性能。ConvBERT具有多重积极影响。与进一步增加模型复杂性以提高性能的趋势相反,ConvBERT致力于使模型更高效并节省训练成本。这将使计算资源有限的应用受益。在方法论上,它着眼于模型骨干设计,而不是使用类似蒸馏的算法(这些算法仍然需要事先训练一个大型教师模型)来提高模型效率。我们鼓励研究人员基于ConvBERT构建NLP模型,用于我们预期特别有益的任务,例如基于文本的咨询。

消极影响
与BERT相比,ConvBERT更高效且节省训练成本,这可能被用于检测和理解社交平台上的个人文本帖子,从而带来隐私威胁。

6 附录

6.1 数据集

6.1.1 GLUE数据集

由引入的GLUE基准测试是九个自然语言理解任务的集合。作者隐藏了测试集的标签,研究人员需要将预测结果提交到评估服务器5以获得测试集的结果。为了公平比较,我们仅展示单任务设置的结果。GLUE基准测试包括以下数据集。

MNLI
多体裁自然语言推理语料库是一个带有文本蕴含注释的句子对数据集。给定一个前提句子和一个假设句子,任务是预测它们的关系,包括ENTENTAILMENT(蕴含)、CONTRADICTION(矛盾)和NEUTRAL(中立)。数据来自十种不同的书面和口语英语体裁。

QNLI
问题自然语言推理是从斯坦福问答数据集转换而来的二元句子对分类任务,这是一个问答数据集。QNLI的一个示例包含一个上下文句子和一个问题,任务是确定上下文句子是否包含问题的答案。

QQP
Quora问题对数据集是来自Quora(一个社区问答网站)的问题对集合,任务是确定一对问题在语义上是否等价。

RTE
识别文本蕴含(RTE)数据集与MNLI类似,但只有两类,即蕴含和不蕴含。它来自一系列年度文本蕴含挑战赛,包括RTE1、RTE2、RTE3和RTE5。

SST-2
斯坦福情感树库是一个由电影评论句子及其情感人工注释组成的数据集。GLUE使用双向(正面/负面)分类划分。

MRPC
微软研究释义语料库是一个来自在线新闻的数据集,包含句子对及其人工注释,用于判断句子对中的句子在语义上是否等价。

CoLA
语言可接受性语料库是一个二元单句分类数据集,包含标注为是否符合英语语法的句子示例。

SST-B
语义文本相似性基准是一个句子对集合,人工标注了1到5的相似性分数,模型需要预测这些分数。

WNLI
Winograd NLI是一个小型自然语言推理数据集,但正如GLUE网页6所指出的,其构建存在问题。因此,像之前的工作一样,我们排除该数据集以进行公平比较。

6.1.2 SQuAD数据集

斯坦福问答数据集(SQuAD v1.1)是一个问答(阅读理解)数据集,包含超过10万个问题。每个问题的答案是对应上下文段落中的一段文本,这意味着每个问题都可以回答。随后的版本SQuAD v2.0将现有数据与超过5万个无法回答的问题结合在一起。

6.2 预训练细节

我们首先简要介绍用于预训练的替换标记检测任务,该任务由提出。它通过预测序列中的标记是否被替换来以判别方式训练模型。同时,为了生成带有替换标记的句子作为训练示例,他们提出使用一个小型生成器,该生成器通过掩码语言建模进行训练。完整的输入序列首先被掩码,然后输入生成器以获取被掩码标记的预测。目标模型随后作为判别器,用于区分生成器错误预测的标记。生成器和判别器通过掩码语言建模损失和替换标记检测损失联合训练。

对于预训练配置,我们主要使用与ELECTRA相同的超参数。更多细节见表5。虽然使用128序列长度的示例进行预训练可以节省大量计算,但我们还发现使用更长序列长度的示例有助于提高具有较长上下文的下游任务的性能。我们在微调之前,使用长度为512的输入序列对模型进行10%的额外更新,以用于像SQuAD这样具有较长上下文的任务。这有助于位置嵌入更好地泛化到下游任务。

在这里插入图片描述

6.3 微调细节

根据之前的工作[9, 14],我们在{5e-5, 1e-4, 2e-4, 3e-4}中搜索学习率,并在{0.01, 0.1}中搜索权重衰减。对于训练轮数,我们在{10, 3}中搜索最佳值。见表6。

6.4 更多结果

我们在表7中展示了不同模型大小和预训练设置下GLUE开发集的更多结果。可以看出,无论预训练任务和数据集大小如何,我们的方法始终优于原始BERT 架构。

6.5 更多示例和注意力图分析

我们在图6中提供了更多注意力图的示例。我们还计算了注意力图M的对角线集中度作为定量指标。它定义为 C = ∑ ∣ i − j ∣ ≤ 4 M i , j ∑ ∣ i − j ∣ > 4 M i , j C=\frac{\sum_{|i-j|\leq4}M_{i,j}}{\sum_{|i-j|>4}M_{i,j}} C=ij>4Mi,jij4Mi,j。这表明注意力图捕捉了多少局部依赖性。
在这里插入图片描述

在这里插入图片描述

表8中的结果显示,BERT中的注意力更集中于局部依赖性。

在这里插入图片描述

6.6 推理速度

我们在Intel CPU(i7-6900K@3.20GHz)上测试了基础模型大小的混合注意力块和自注意力基线。如表9所示,混合注意力的浮点运算量(Flops)更低,且比自注意力更快。另一方面,我们在GPU和TPU上对混合注意力的实现尚未针对效率进行充分优化。
在这里插入图片描述

因此,当输入序列长度较短时,其加速效果可能不明显。我们将在底层实现上进一步改进。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4985.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)

近期因公司新办公区建设,原有的爱快路由器的SDWAN功能实现分支之间互联的服务还需要继续使用。在原有的小型网络中,使用的爱快路由器当作网关设备,所以使用较为简单,如下图所示。 现变更网络拓扑为三层网络架构,但原有的SDWAN分支…

豆包升级了“眼睛”,看APP截图就能写代码了!超低价让多模态AI普惠

金磊 发自 上海量子位 | 公众号 QbitAI 豆包的“眼睛”升级了,现在让它看一眼APP截图,就能直接给你生成代码! 话不多说,我们直接给它上一个难度。 例如我们先随机截取一张网站的图片: 再来到火山方舟的大模型广场&…

PyTorch使用教程(9)-使用profiler进行模型性能分析

1、简介 PyTorch Profiler是一个内置的性能分析工具,可以帮助开发者定位计算资源(如CPU、GPU)的瓶颈,从而更好地优化PyTorch程序。通过捕获和分析GPU的计算、内存和带宽利用情况,能够有效识别并解决性能瓶颈。 2、原…

vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权

文章目录 简介一、先看效果1.1 授权定位前,先弹出隐私协议弹框1.2 上述弹框点击同意,得到如下弹框1.3 点击三个点,然后点设置 1.4 在1.2步骤下,无论同意或者拒绝 二、manifest.json 文件配置三、微信公众平台配置3.1 登录进入微信…

vue3使用音频audio标签

文章目录 一、背景二、页面三、标签介绍四、代码五、代码说明场景1&#xff1a;针对加载固定格式的比如MP3文件&#xff0c;可直接使用\<audio>标签场景2&#xff1a;针对播放告警内容&#xff0c;比如中文或者英文词条情况 一、背景 项目使用vue3&#xff0c;需求针对告…

工业制造离不开的BOM

在制造业的浩瀚星空中&#xff0c;物料清单&#xff08;BOM&#xff09;犹如“北极星”&#xff0c;牢牢指引着产品从设计蓝图迈向实物诞生的全过程。 BOM的分类 按照设计制造的不同阶段&#xff0c;将BOM划分为设计BOM、工艺BOM、制造BOM三种类型。 设计BOM Engineering BO…

【Python】循环语句

while 基本语法格式 while 条件:循环体条件为真, 则执行循环体代码.条件为假, 则结束循环 num 1 while num < 10 :print(num)num 1注&#xff1a; 在 print 函数中&#xff0c;可以使用 end 参数来指定输出结束时使用的字符。默认情况下&#xff0c;end 参数的值为 &qu…

TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文

本篇内容将介绍TsMaster中常用的Panel面板控件以及使用Panel控件通过系统变量以及c小程序来修改信号的值&#xff0c;控制报文的发送等。 目录 一、常用的Panel控件介绍 1.1系统——启动停止按钮 1.2 显示控件——文本框 1.3 显示控件——分组框 1.4 读写控件——按钮 1.…

LeetCode:37. 解数独

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff…

PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍 torchinfo是一个为PyTorch用户量身定做的开源工具&#xff0c;其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程&#xff0c;让模型架构一目了然。通过torchinfo的summary函数&#xff0c;用户可以快速获取模型的详细结构和统计信息&#xff0…

【22】Word:小李-高新技术企业政策❗

目录 题目​ NO1.2 NO3 NO4 NO5.6 NO7.8 NO9.10 若文章中存在删除空白行等要求&#xff0c;可以到最后来完成。注意最后一定要检查此部分&#xff01;注意&#xff1a;大多是和事例一样即可&#xff0c;不用一摸一样&#xff0c;但也不要差太多。 题目 NO1.2 F12Fn&a…

TDengine 做 Apache SuperSet 数据源

‌Apache Superset‌ 是一个现代的企业级商业智能&#xff08;BI&#xff09;Web 应用程序&#xff0c;主要用于数据探索和可视化。它由 Apache 软件基金会支持&#xff0c;是一个开源项目&#xff0c;它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面…

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化&#xff1a; 文件是存储数据的一种非常基本且重要的方式。通过文件&#xff0c;我们可 以将程序运行时产生的数据永久保存下来&#xff0c;以便将来使用。 跨平台兼容性&#xff1a; 文件是一种通用…

STM32单片机:GPIO模式

GPIO有八种工作模式&#xff0c;分别是推挽输出、开漏输出、复合推挽输出、复合开漏输出、模拟输入、上拉输入、下拉输入、浮空输入。 在了解这些之前&#xff0c;我们先来看一下GPIO口内部的结构&#xff1a; I/O引脚一般工作电压为3.3V&#xff0c;在它边的两个二极管起到保…

[Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器

目录 前言&#xff1a;Qt与操作系统的关系 一、Qt事件 1.事件介绍 2.事件的表现形式 常见的Qt事件&#xff1a; 常见的事件描述: 3.事件的处理方式 处理鼠标进入和离开事件案例 控件添加到对象树底层原理 二、鼠标事件 1.鼠标按下和释放事件&#xff08;单击&#x…

Linux下MySQL的简单使用

Linux下MySQL的简单使用 导语MySQL安装与配置 MySQL安装密码设置 MySQL管理 命令 myisamchkmysql其他 常见操作 C语言访问MYSQL 连接例程错误处理使用SQL 总结参考文献 导语 这一章是MySQL的使用&#xff0c;一些常用的MySQL语句属于本科阶段内容&#xff0c;然后是C语言和M…

ElasticSearch索引别名的应用

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview Elasticsearch 索引别名是一种极为灵活且强大的功能&#xff0c;它允许用户为一个或多个索引创建逻辑上…

火狐浏览器Firefox一些配置

没想到还会开这个…都是Ubuntu的错 一些个人习惯吧 标签页设置 常规-标签页 1.按最近使用顺序切换标签页 2.打开新标签而非新窗口&#xff08;讨厌好多窗口&#xff09; 3.打开新链接不直接切换过去&#xff08;很打断思路诶&#xff09; 4.关闭多个标签页时不向我确认 启动…

数据结构-队列

目录 前言一、队列及其抽象数据类型1.1 队列的基本概念1.2 队列的抽象数据类型 二、队列的实现2.1 顺序表示2.1.1 结构定义2.1.2 基本操作的实现 2.2 链式表示2.2.1 结构定义2.2.2 基本操作的实现 总结 前言 本篇文章介绍队列的基础知识&#xff0c;包括队列的抽象数据类型以及…

STM32-串口-UART-Asynchronous

一&#xff0c;发送数据 #include "stdio.h" uint8_t hello[]"Hello,blocking\r\n"; HAL_UART_Transmit(&huart1,hello,sizeof(hello),500); 二&#xff0c;MicroLIB-printf(" hello\r\n") #include "stdio.h" #ifdef __GNUC…