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)} X∈R(n×d),其中d是隐藏维度,n是标记的数量,自注意力模块对输入X应用三个线性变换,并将它们分别嵌入到键K、查询Q和值V中,其中 K , Q , V ∈ R ( n × d ) K, Q, V ∈ R^{(n×d)} K,Q,V∈R(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. Self−Attn(Q,K,V)=softmax(dkQ⊤K)V. (1)
BERT 及其变体成功应用了自注意力机制并取得了高性能。然而,尽管自注意力操作符具有非局部特性,但由于自然语言的固有属性,BERT中的一些注意力头确实学习了输入序列的局部依赖性 。如图2a所示,
BERT的平均注意力图明显显示出类似于[31]分析的对角线模式,这意味着很大一部分注意力头学习了局部依赖性。由于自注意力计算了所有标记对之间的注意力权重,如公式1所示,许多超出捕获的局部上下文的注意力权重是不必要计算的,因为它们与局部权重相比贡献较小。这导致了不必要的计算开销和模型冗余。受此启发,我们采用卷积操作来捕捉局部依赖性,考虑到它比自注意力更适合学习局部依赖性。
轻量级和动态卷积 轻量级卷积 可以有效地建模局部依赖性。设卷积核为 W ∈ R d × k W\in\mathbb{R}^{d\times k} W∈Rd×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 W∈Rk,得到以下轻量级卷积:
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=1kWj⋅X(i+j−⌈2k+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} Wf∈Rk×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(Q⊙Ks)) (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(Q⊙Ks)),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(Self−Attn(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[fgd→gmi(H[:,i−1:i×gd])],M′=GeLU(M),H′=Πi=0g[fgm→gdi(M[:,i−1: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;H0∈Rn×d,M;M0∈Rn×m,fd1→d2(⋅)表示将维度从 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=∑∣i−j∣>4Mi,j∑∣i−j∣≤4Mi,j。这表明注意力图捕捉了多少局部依赖性。
表8中的结果显示,BERT中的注意力更集中于局部依赖性。
6.6 推理速度
我们在Intel CPU(i7-6900K@3.20GHz)上测试了基础模型大小的混合注意力块和自注意力基线。如表9所示,混合注意力的浮点运算量(Flops)更低,且比自注意力更快。另一方面,我们在GPU和TPU上对混合注意力的实现尚未针对效率进行充分优化。
因此,当输入序列长度较短时,其加速效果可能不明显。我们将在底层实现上进一步改进。
相关文章:
ConvBERT:通过基于跨度的动态卷积改进BERT
摘要 像BERT及其变体这样的预训练语言模型最近在各种自然语言理解任务中取得了令人印象深刻的性能。然而,BERT严重依赖于全局自注意力机制,因此存在较大的内存占用和计算成本。尽管所有的注意力头都从全局角度查询整个输入序列以生成注意力图࿰…...
C# 网络协议第三方库Protobuf的使用
为什么要使用二进制数据 通常我们写一个简单的网络通讯软件可能使用的最多的是字符串类型,比较简单,例如发送格式为(head)19|Msg:Heart|100,x,y,z…,在接收端会解析收到的socket数据。 这样通常是完全可行的,但是随着数据量变大&…...
「2024 博客之星」自研Java框架 Sunrays-Framework 使用教程
文章目录 0.序言我的成长历程遇到挫折,陷入低谷重拾信心,迎接未来开源与分享我为何如此看重这次评选最后的心声 1.概述1.主要功能2.相关链接 2.系统要求构建工具框架和语言数据库与缓存消息队列与对象存储 3.快速入门0.配置Maven中央仓库1.打开settings.…...
【Elasticsearch】Springboot编写Elasticsearch的RestAPI
RestAPI 初始化RestClient创建索引库Mapping映射 判断索引库是否存在删除索引库总结 ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。 官方文档地址 由于ES目前最新版本是8.8,提供了全…...
Swift语言的学习路线
Swift语言的学习路线 引言 在现代程序开发中,Swift语言逐渐成为了移动应用程序开发的重要工具,尤其是在iOS和macOS平台上。自2014年发布以来,Swift以其易读性和强大的功能,受到越来越多开发者的青睐。对于初学者而言,…...
63,【3】buuctf web Upload-Labs-Linux 1
进入靶场 点击pass1 查看提示 既然是上传文件,先构造一句话木马,便于用蚁剑连接 <?php eval($_POST[123])?> 将这两处的检查函数删掉 再上传木马 文件后缀写为.php 右键复制图片地址 打开蚁剑连接 先点击测试连接,显示成功后&…...
Leetcode:2239
1,题目 2,思路 循环遍历满足条件就记录,最后返回结果值 3,代码 public class Leetcode2239 {public static void main(String[] args) {System.out.println(new Solution2239().findClosestNumber(new int[]{-4, -2, 1, 4, 8})…...
自然语言处理与NLTK环境配置
自然语言处理(Natural Language Processing, NLP)是人工智能的重要分支,专注于计算机如何理解、分析和生成自然语言。自然语言是人类用于交流的语言,如中文、英文等,这使得自然语言处理成为沟通人与计算机的桥梁。近年来,NLP在诸多领域得到广泛应用,包括文本分析、语言翻…...
分布式搜索引擎02
1. DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,…...
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
在开发 Spring Boot 项目时,日志是调试和监控的重要工具。Spring Boot 默认支持 Logback 作为日志系统,并提供了 logback.xml 和 logback-spring.xml 两种配置方式。这篇文章将详细介绍这两者的区别、各自的优缺点以及最佳实践。 目录 一、什么是 Logbac…...
【爬虫开发】爬虫开发从0到1全知识教程第12篇:scrapy爬虫框架,介绍【附代码文档】
本教程的知识点为:爬虫概要 爬虫基础 爬虫概述 知识点: 1. 爬虫的概念 requests模块 requests模块 知识点: 1. requests模块介绍 1.1 requests模块的作用: 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点:…...
鸿蒙UI(ArkUI-方舟UI框架)-开发布局
文章目录 开发布局1、布局概述1)布局结构2)布局元素组成3)如何选择布局4)布局位置5)对子元素的约束 2、构建布局1)线性布局 (Row/Column)概述布局子元素在排列方向上的间距布局子元素在交叉轴上的对齐方式(…...
代码随想录_字符串
字符串 344.反转字符串 344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 思路: 双指针 代…...
2025年1月17日(点亮三色LED)
系统信息: Raspberry Pi Zero 2W 系统版本: 2024-10-22-raspios-bullseye-armhf Python 版本:Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习目标:…...
Spring Boot自动配置原理:如何实现零配置启动
引言 在现代软件开发中,Spring 框架已经成为 Java 开发领域不可或缺的一部分。而 Spring Boot 的出现,更是为 Spring 应用的开发带来了革命性的变化。Spring Boot 的核心优势之一就是它的“自动配置”能力,它极大地简化了 Spring 应用的配置…...
React技术栈搭配(全栈)(MERN栈、PERN栈)
文章目录 1. MERN 栈2. PERN 栈3. React Next.js Node.js4. JAMstack (JavaScript, APIs, Markup)5. React GraphQL Node.js6. React Native Node.js结论 React作为前端框架已经成为了现代web开发的重要组成部分。在全栈开发中,React通常…...
Linux - 线程池
线程池 什么是池? 池化技术的核心就是"提前准备并重复利用资源". 减少资源创建和销毁的成本. 那么线程池就是提前准备好一些线程, 当有任务来临时, 就可以直接交给这些线程运行, 当线程完成这些任务后, 并不会被销毁, 而是继续等待任务. 那么这些线程在程序运行过程…...
以Python构建ONE FACE管理界面:从基础至进阶的实战探索
一、引言 1.1 研究背景与意义 在人工智能技术蓬勃发展的当下,面部识别技术凭借其独特优势,于安防、金融、智能终端等众多领域广泛应用。在安防领域,可助力监控系统精准识别潜在威胁人员,提升公共安全保障水平;金融行业中,实现刷脸支付、远程开户等便捷服务,优化用户体…...
使用Sum计算Loss和解决梯度累积(Gradient Accumulation)的Bug
使用Sum计算Loss和解决梯度累积的Bug 学习 https://unsloth.ai/blog/gradient:Bugs in LLM Training - Gradient Accumulation Fix 这篇文章的记录。 在深度学习训练过程中,尤其是在大批量(large batch)训练中,如何高…...
mfc操作json示例
首先下载cJSON,加入项目; 构建工程,如果出现, fatal error C1010: unexpected end of file while looking for precompiled head 在cJSON.c文件的头部加入#include "stdafx.h"; 看情况,可能是加到.h或者是.cpp文件的头部,它如果有包含头文件, #include &…...
C语言练习(18)
一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生成绩和该生的序号。 #include <stdio.h>#define STUDENT_NUM 10 // 定义学生数量int main() {int scores[STUDENT_NUM]; // 定义存储学生成绩的一维数组int i;// 输入10个…...
LeetCode 热题 100_全排列(55_46_中等_C++)(递归(回溯))
LeetCode 热题 100_两数之和(55_46) 题目描述:输入输出样例:题解:解题思路:思路一(递归(回溯)): 代码实现代码实现(思路一(…...
编译chromium笔记
编译环境: windows10 powershell7.2.24 git 2.47.1 https://storage.googleapis.com/chrome-infra/depot_tools.zip 配置git git config --global user.name "John Doe" git config --global user.email "jdoegmail.com" git config --global …...
PHP语言的数据库编程
PHP语言的数据库编程 引言 随着互联网的发展,动态网站已成为主流,而动态网站的核心就是与数据库进行交互。PHP(超文本预处理器)是一种流行的开源服务器端脚本语言,被广泛用于Web开发。它以其简单易学和功能强大而受到…...
【PGCCC】PostgreSQL 中表级锁的剖析
本博客解释了 PostgreSQL 中的锁定机制,重点关注数据定义语言 (DDL) 操作所需的表级锁定。 锁定还是解锁的艺术? 人们通常将数据库锁与物理锁进行比较,这甚至可能导致您订购有关锁的历史、波斯锁和撬锁技术的书籍。我们大多数人可能都是通过…...
1.10 自洽性(Self-Consistency):多路径推理的核心力量
自洽性(Self-Consistency):多路径推理的核心力量 随着人工智能尤其是大规模语言模型的不断进化,如何提升其推理能力和决策准确性成为了研究的重点。在这一背景下,**自洽性(Self-Consistency)**作为一种新的推理方法,逐渐展现出其强大的潜力。自洽性方法通过多路径推理…...
【24】Word:小郑-准考证❗
目录 题目 准考证.docx 邮件合并-指定考生生成准考证 Word.docx 表格内容居中表格整体相较于页面居中 考试时一定要做一问保存一问❗ 题目 准考证.docx 插入→表格→将文本转换成表格→✔制表符→确定选中第一列→单击右键→在第一列的右侧插入列→布局→合并单元格&#…...
Linux 信号(Signal)详解
信号(Signal)是 Linux 系统中用于进程间通信的一种机制。它是一种异步通知,用于通知进程发生了某个事件。信号可以来自内核、其他进程或进程自身。 信号的基本概念 信号的作用: 通知进程发生了某个事件(如用户按下 Ct…...
【数据分享】1929-2024年全球站点的逐年最低气温数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标!说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站点…...
app版本控制java后端接口版本管理
java api version 版本控制 java接口版本管理 1 自定义 AppVersionHandleMapping 自定义AppVersionHandleMapping实现RequestMappingHandlerMapping里面的方法 public class AppVersionHandleMapping extends RequestMappingHandlerMapping {Overrideprotected RequestCondit…...
2024年度总结-CSDN
2024年CSDN年度总结 Author:OnceDay Date:2025年1月21日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…...
基于python的博客系统设计与实现
摘要:目前,对于信息的获取是十分的重要,我们要做到的不是裹足不前,而是应该主动获取和共享给所有人。博客系统就能够实现信息获取与分享的功能,博主在发表文章后,互联网上的其他用户便可以看到,…...
服务器日志自动上传到阿里云OSS备份
背景 公司服务器磁盘空间有限,只能存近15天日志,但是有时需要查看几个月前的日志,需要将服务器日志定时备份到某个地方,需要查询的时候有地方可查。 针对这个问题,想到3个解决方法: 1、买一个配置比较低…...
优化使用 Flask 构建视频转 GIF 工具
优化使用 Flask 构建视频转 GIF 工具 优化后的项目概述 在优化后的版本中,我们将实现以下功能: 可设置每个 GIF 的帧率和大小:用户可以选择 GIF 的帧率和输出大小。改进的用户界面:使用更现代的设计使界面更美观、整洁。自定义…...
leetcode:511. 游戏玩法分析 I
难度:简单 SQL Schema > Pandas Schema > 活动表 Activity: ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_playe…...
windows git bash 使用zsh 并集成 oh my zsh
参考了 这篇文章 进行配置,记录了自己的踩坑过程,并增加了 zsh-autosuggestions 插件的集成。 主要步骤: 1. git bash 这个就不说了,自己去网上下,windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…...
【Python运维】Python与网络监控:如何编写网络探测与流量分析工具
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着互联网技术的快速发展,网络性能的监控与分析成为保障信息系统稳定运行的关键环节。本文深入探讨了如何利用Python语言构建高效的网络探…...
OpenCV相机标定与3D重建(61)处理未校准的立体图像对函数stereoRectifyUncalibrated()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为未校准的立体相机计算一个校正变换。 cv::stereoRectifyUncalibrated 是 OpenCV 库中的一个函数,用于处理未校准的立体图像对。该函…...
字玩FontPlayer开发笔记12 Vue3撤销重做功能
字玩FontPlayer开发笔记12 Vue3撤销重做功能 字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 ElementUI开发,源代码:github | gitee 笔记 撤销重做功能是设计工具必不可少的模块,以前尝试使用成熟的库实现撤销重做功能…...
无人机图传模块:深入理解其工作原理与实际效用
无人机图传模块作为无人机系统的关键组成部分,承担着将无人机拍摄的图像和视频实时传输至地面控制站或接收设备的重任。本文将深入探讨无人机图传模块的工作原理及其在实际应用中的效用,帮助读者更好地理解这一技术的奥秘。 一、无人机图传模块的工作原…...
PDF文件提取开源工具调研总结
概述 PDF是一种日常工作中广泛使用的跨平台文档格式,常常包含丰富的内容:包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用,尤其是RAG项目中,通过将非结构化数据转化为结构化和可访问的信息࿰…...
Linux(Centos 7.6)命令详解:dos2unix
1.命令作用 将Windows格式文件件转换为Unix、Linux格式的文件(也可以转换成其他格式的) 2.命令语法 Usage: dos2unix [options] [file ...] [-n infile outfile ...] 3.参数详解 options: -c, --convmode,转换方式,支持ascii, 7bit, iso, mac,默认…...
梯度提升决策树树(GBDT)公式推导
### 逻辑回归的损失函数 逻辑回归模型用于分类问题,其输出是一个概率值。对于二分类问题,逻辑回归模型的输出可以表示为: \[ P(y 1 | x) \frac{1}{1 e^{-F(x)}} \] 其中 \( F(x) \) 是一个线性组合函数,通常表示为ÿ…...
跨域问题分析及解决方案
1、跨域 指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 2、同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域; 3、跨域流程…...
【三国游戏——贪心、排序】
题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int a[N], b[N], c[N]; int w[4][N]; int main() {int n;cin >> n;for(int i 1; i < n; i)cin >> a[i];for(int i 1; i < n; i)cin >> b[i…...
深入理解 Java 的数据类型与运算符
Java学习资料 Java学习资料 Java学习资料 在 Java 编程中,数据类型与运算符是构建程序的基础元素。它们决定了数据在程序中的存储方式以及如何对数据进行各种操作。 一、数据类型 (一)基本数据类型 整型: 用于存储整数数值&…...
WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测
WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测 目录 WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-GRU-Attention、…...
(二叉树)
我们今天就开始引进一个新的数据结构了:我们所熟知的:二叉树; 但是我们在引进二叉树之前我们先了解一下树; 树 树的概念和结构: 树是⼀种⾮线性的数据结构,它是由 n ( n>0 ) …...
Linux shell 批量验证端口连通性
脚本 #!/bin/bash # #database check #set -o nounset LOCALIPifconfig | grep inet | head -1 | awk {print $2} | sed s/addr\:// IPLIST192.168.1.99 192.168.1.98 192.168.1.97 PORTLIST81 82 83 84 85 86 check_nc(){ for CHECK_IP in $IPLIST dofor CHECK_PORT in $PORT…...
Java 中实体类与操作类分离
目录 一、为啥要把实体类和操作类分开 二、实体类长啥样,怎么用 三、操作类的使命与实现 四、实战演练:实体类与操作类协同工作 五、拓展思考:这种分离带来的好处与进一步优化 六、总结与展望 家人们,今天我想跟你们唠唠我在…...