DEBERTA:具有解耦注意力机制的解码增强型BERT
摘要
近年来,预训练神经语言模型的进展显著提升了许多自然语言处理(NLP)任务的性能。本文提出了一种新的模型架构DeBERTa(具有解耦注意力机制的解码增强型BERT),通过两种新技术改进了BERT和RoBERTa模型。第一种是解耦注意力机制,其中每个词用两个向量表示,分别编码其内容和位置,词之间的注意力权重通过分别基于内容和相对位置的解耦矩阵计算。第二种是增强的掩码解码器,在解码层引入绝对位置信息以预测预训练中的掩码词。此外,我们提出了一种新的虚拟对抗训练方法用于微调,以提升模型的泛化能力。实验表明,这些技术显著提高了模型预训练的效率和下游自然语言理解(NLU)与生成(NLG)任务的性能。与RoBERTa-Large相比,DeBERTa在仅使用一半训练数据的情况下,在多个NLP任务上表现更优,例如在MNLI任务上提升+0.9%(90.2% vs. 91.1%),在SQuAD v2.0上提升+2.3%(88.4% vs. 90.7%),在RACE上提升+3.6%(83.2% vs. 86.8%)。值得注意的是,我们通过训练一个包含48层Transformer和15亿参数的更大版本DeBERTa,进一步扩展了模型规模。这一显著性能提升使得单个DeBERTa模型首次在SuperGLUE基准测试(Wang et al., 2019a)上以宏观平均分(89.9 vs. 89.8)超越人类表现,而集成DeBERTa模型截至2021年1月6日位居SuperGLUE排行榜榜首,显著超越人类基线(90.3 vs. 89.8)。预训练的DeBERTa模型和源代码已发布在:https://github.com/microsoft/DeBERTa。
1 引言
Transformer已成为神经语言建模中最有效的神经网络架构。与按顺序处理文本的循环神经网络(RNN)不同,Transformer通过自注意力机制并行计算输入文本中每个词的注意力权重,从而衡量每个词对其他词的影响,这使得大规模模型训练的并行化能力远超RNN(Vaswani et al., 2017)。自2018年以来,一系列基于Transformer的大规模预训练语言模型(PLM)崛起,例如GPT(Radford et al., 2019; Brown et al., 2020)、BERT(Devlin et al., 2019)、RoBERTa(Liu et al., 2019c)、XLNet(Yang et al., 2019)、UniLM(Dong et al., 2019)、ELECTRA(Clark et al., 2020)、T5(Raffel et al., 2020)、ALUM(Liu et al., 2020)、StructBERT(Wang et al., 2019c)和ERINE(Sun et al., 2019)。这些PLM通过任务特定标签进行微调,在许多下游NLP任务中创造了新的技术标杆(Liu et al., 2019b; Minaee et al., 2020; Jiang et al., 2020; He et al., 2019a;b; Shen et al., 2020)。本文提出了一种新的基于Transformer的神经语言模型DeBERTa(具有解耦注意力机制的解码增强型BERT),通过两种新技术改进了现有最先进的PLM:解耦注意力机制和增强的掩码解码器。
解耦注意力机制:与BERT中每个词通过词(内容)嵌入和位置嵌入的向量和表示不同,DeBERTa中每个词用两个向量分别表示其内容和位置,词之间的注意力权重通过分别基于内容和相对位置的解耦矩阵计算。这一设计的动机是观察到词对的注意力权重不仅取决于其内容,还取决于它们的相对位置。例如,当“deep”和“learning”相邻时,它们之间的依赖关系比出现在不同句子中时更强。
增强的掩码解码器:与BERT类似,DeBERTa通过掩码语言建模(MLM)进行预训练。MLM是一种填空任务,模型通过学习掩码词周围的上下文来预测被掩码的词。DeBERTa利用上下文词的内容和位置信息进行MLM。解耦注意力机制已经考虑了上下文词的内容和相对位置,但未考虑这些词的绝对位置,而这在许多情况下对预测至关重要。例如,在句子“a new store opened beside the new mall”中,斜体词“store”和“mall”被掩码以进行预测。尽管这两个词的局部上下文相似,但它们在句子中扮演不同的句法角色(例如,主语是“store”而非“mall”)。这些句法细微差别在很大程度上取决于词在句子中的绝对位置,因此在语言建模过程中考虑词的绝对位置非常重要。DeBERTa在softmax层之前引入绝对位置嵌入,模型基于词内容和位置的聚合上下文嵌入解码掩码词。
此外,我们提出了一种新的虚拟对抗训练方法,用于将PLM微调至下游NLP任务。该方法在提升模型泛化能力方面效果显著。
通过全面的实验研究,我们展示了这些技术显著提高了预训练效率和下游任务性能。在NLU任务中,与RoBERTa-Large相比,DeBERTa在仅使用一半训练数据的情况下,在多个NLP任务上表现更优,例如在MNLI任务上提升+0.9%(90.2% vs. 91.1%),在SQuAD v2.0上提升+2.3%(88.4% vs. 90.7%),在RACE上提升+3.6%(83.2% vs. 86.8%)。在NLG任务中,DeBERTa将Wikitext-103数据集的困惑度从21.6降至19.5。我们进一步扩展了DeBERTa,预训练了一个包含48层Transformer和15亿参数的更大模型。单个15亿参数的DeBERTa模型在SuperGLUE基准测试(Wang et al., 2019a)上显著优于110亿参数的T5模型(89.3% vs. 89.9%),并首次超越人类基线(89.9 vs. 89.8)。截至2021年1月6日,集成DeBERTa模型位居SuperGLUE排行榜榜首,显著超越人类基线(90.3 vs. 89.8)。
2 背景
2.1 Transformer
基于Transformer的语言模型由堆叠的Transformer块组成(Vaswani et al., 2017)。每个块包含一个多头自注意力层和一个全连接的位置前馈网络。标准的自注意力机制缺乏自然编码词位置信息的方式。因此,现有方法为每个输入词嵌入添加位置偏置,使得每个输入词通过一个依赖于其内容和位置的向量表示。位置偏置可以通过绝对位置嵌入(Vaswani et al., 2017; Radford et al., 2019; Devlin et al., 2019)或相对位置嵌入(Huang et al., 2018; Yang et al., 2019)实现。研究表明,相对位置表示在自然语言理解和生成任务中更为有效(Dai et al., 2019; Shaw et al., 2018)。本文提出的解耦注意力机制与现有方法的不同之处在于,我们通过两个独立的向量分别表示输入词的内容和位置,词之间的注意力权重通过分别基于内容和相对位置的解耦矩阵计算。
2.2 掩码语言模型(Masked Language Model, MLM)
基于Transformer的大规模预训练语言模型(PLM)通常通过自监督目标在大规模文本上进行预训练,以学习上下文词表示,这一目标被称为掩码语言模型(MLM)(Devlin et al., 2019)。具体来说,给定一个序列 X = { x i } X=\{x_i\} X={xi},我们通过随机掩码15%的tokens将其破坏为 X ~ \tilde{X} X~,然后训练一个由参数 θ \theta θ参数化的语言模型,通过基于 X ~ \tilde{X} X~预测被掩码的tokens x ~ \tilde{x} x~来重建 X X X:
max θ log p θ ( X ∣ X ~ ) = max θ ∑ i ∈ C log p θ ( x ~ i = x i ∣ X ~ ) \max_{\theta}\log p_{\theta}(X|\tilde{X})=\max_{\theta}\sum_{i\in\mathcal{C}}\log p_{\theta}(\tilde{x}_{i}=x_{i}|\tilde{X}) θmaxlogpθ(X∣X~)=θmaxi∈C∑logpθ(x~i=xi∣X~)
其中, C \mathcal{C} C是序列中被掩码tokens的索引集。BERT的作者提出,保留10%的被掩码tokens不变,另外10%替换为随机选择的tokens,其余部分替换为[MASK]tokens。
3 DEBERTA架构
3.1 解耦注意力机制:内容与位置的双向量嵌入方法
对于序列中位置 i i i的tokens,我们使用两个向量 { H i } \{H_i\} {Hi}和 { P i ∣ j } \{P_{i|j}\} {Pi∣j}来表示它,分别表示其内容和与位置 j j j的tokens的相对位置。tokens i i i和 j j j之间的交叉注意力得分可以分解为四个部分:
A i , j = { H i , P i ∣ j } × { H j , P j ∣ i } ⊺ = H i H j ⊺ + H i P j ∣ i ⊺ + P i ∣ j H j ⊺ + P i ∣ j P j ∣ i ⊺ \begin{aligned} A_{i,j}&=\{H_{i},P_{i|j}\}\times\{H_{j},P_{j|i}\}^{\intercal}\\ &=H_{i}H_{j}^{\intercal}+H_{i}P_{j|i}^{\intercal}+P_{i|j}H_{j}^{\intercal}+P_{i|j}P_{j|i}^{\intercal} \end{aligned} Ai,j={Hi,Pi∣j}×{Hj,Pj∣i}⊺=HiHj⊺+HiPj∣i⊺+Pi∣jHj⊺+Pi∣jPj∣i⊺
也就是说,词对的注意力权重可以计算为四个注意力得分的和,分别基于内容和位置的解耦矩阵:内容到内容、内容到位置、位置到内容和位置到位置。
现有的相对位置编码方法使用单独的嵌入矩阵来计算注意力权重中的相对位置偏置(Shaw et al., 2018; Huang et al., 2018)。这相当于仅使用公式[2]中的内容到内容和内容到位置项来计算注意力权重。我们认为位置到内容项也很重要,因为词对的注意力权重不仅取决于它们的内容,还取决于它们的相对位置,而只有同时使用内容到位置和位置到内容项才能完全建模这种依赖关系。由于我们使用相对位置嵌入,位置到位置项并未提供太多额外信息,因此在我们的实现中从公式[2]中移除了该项。
以单头注意力为例,标准的自注意力操作(Vaswani et al., 2017)可以表示为:
Q = H W q , K = H W k , V = H W v , A = Q K ⊺ d Q=HW_{q},\quad K=HW_{k},\quad V=HW_{v},\quad A=\frac{QK^{\intercal}}{\sqrt{d}} Q=HWq,K=HWk,V=HWv,A=dQK⊺
H o = s o f t m a x ( A ) V H_{o}=\mathrm{softmax}(A)V Ho=softmax(A)V
其中, H ∈ R N × d H\in R^{N\times d} H∈RN×d表示输入的隐藏向量, H o ∈ R N × d H_o\in R^{N\times d} Ho∈RN×d表示自注意力的输出, W q , W k , W v ∈ R d × d W_{q},W_{k},W_{v}\in R^{d\times d} Wq,Wk,Wv∈Rd×d表示投影矩阵, A ∈ R N × N A\in R^{N\times N} A∈RN×N表示注意力矩阵, N N N表示输入序列的长度, d d d表示隐藏状态的维度。
设 k k k为最大相对距离, δ ( i , j ) ∈ [ 0 , 2 k ) \delta(i,j)\in[0,2k) δ(i,j)∈[0,2k)表示从tokens i i i到tokens j j j的相对距离,其定义为:
δ ( i , j ) = { 0 当 i − j ⩽ − k 2 k − 1 当 i − j ⩾ k i − j + k 其他情况。 \delta(i,j)=\left\{ \begin{array}{cc} 0 & \text{当}\quad i-j\leqslant -k \\ 2k-1 & \text{当}\quad i-j\geqslant k \\ i-j+k & \text{其他情况。} \end{array} \right. δ(i,j)=⎩ ⎨ ⎧02k−1i−j+k当i−j⩽−k当i−j⩾k其他情况。
我们可以将带有相对位置偏置的解耦自注意力表示为公式 A \mathbb{A} A,其中 Q c , K ^ c Q_c, \hat{K}_c Qc,K^c和 V c V_c Vc分别是使用投影矩阵 W q , c , W k , c , W v , c ∈ R ˉ d × d W_{q, c}, W_{k, c}, W_{v, c}\in \bar{R} ^{d\times d} Wq,c,Wk,c,Wv,c∈Rˉd×d生成的内容向量, P ∈ R 2 k × d \boldsymbol{P}\in R^{2k\times d} P∈R2k×d表示在所有层之间共享的相对位置嵌入向量(即在正向传播过程中保持不变), Q r Q_{r} Qr和 K r K_{r} Kr分别是使用投影矩阵 W q , r , W k , r ∈ R d × d W_{q,r}, W_{k,r}\in R^{d\times d} Wq,r,Wk,r∈Rd×d生成的相对位置向量。
公式(4)如下:
Q c = H W q , c , K c = H W k , c , V c = H W v , c , Q r = P W q , r , K r = P W k , r A ~ i , j = Q i c K j c ⊤ ⏟ ( a ) 内容到内容 + Q i c K δ ( j , i ) r ⊤ ⏟ ( b ) 内容到位置 + Q δ ( i , j ) r K j c ⊤ ⏟ ( c ) 位置到内容 H o = s o f t m a x ( A ~ 3 d ) V c \begin{aligned} Q_{c}=HW_{q,c},\quad K_{c}&=HW_{k,c},\quad V_{c}=HW_{v,c},\quad Q_{r}=PW_{q,r},\quad K_{r}=PW_{k,r}\\ \tilde{A}_{i,j}&=\underbrace{Q_{i}^{c}K_{j}^{c\top}}_{\mathrm{(a)~内容到内容}} + \underbrace{Q_{i}^{c}K_{\delta(j,i)}^{r\top}}_{\mathrm{(b)~内容到位置}} + \underbrace{Q_{\delta(i,j)}^{r}K_{j}^{c\top}}_{\mathrm{(c)~位置到内容}}\\ H_{o}&=\mathrm{softmax}\left(\frac{\tilde{A}}{\sqrt{3d}}\right)V_{c} \end{aligned} Qc=HWq,c,KcA~i,jHo=HWk,c,Vc=HWv,c,Qr=PWq,r,Kr=PWk,r=(a) 内容到内容 QicKjc⊤+(b) 内容到位置 QicKδ(j,i)r⊤+(c) 位置到内容 Qδ(i,j)rKjc⊤=softmax(3dA~)Vc
其中, A ~ i , j \tilde{A}_{i,j} A~i,j是注意力矩阵 A ~ \tilde{A} A~的元素,表示从tokens i i i到tokens j j j的注意力得分。 Q i c Q_{i}^{c} Qic是 Q c Q_{c} Qc的第 i i i行, K j c K_{j}^{c} Kjc是 K c K_{c} Kc的第 j j j行, K δ ( i , j ) r K_{\delta(i,j)}^{r} Kδ(i,j)r是 K r K_{r} Kr的第 δ ( i , j ) \delta(i,j) δ(i,j)行(与相对距离 δ ( i , j ) \delta(i,j) δ(i,j)相关), Q δ ( j , i ) r Q_{\delta(j,i)}^{r} Qδ(j,i)r是 Q r Q_{r} Qr的第 δ ( j , i ) \delta(j,i) δ(j,i)行(与相对距离 δ ( j , i ) \delta(j,i) δ(j,i)相关)。需要注意的是,这里我们使用 δ ( j , i ) \delta(j,i) δ(j,i)而不是 δ ( i , j ) \delta(i,j) δ(i,j),这是因为对于给定位置 i i i,位置到内容项计算的是键内容在 j j j处相对于查询位置在 i i i处的注意力权重,因此相对距离是 δ ( j , i ) \delta(j,i) δ(j,i)。位置到内容项的计算公式为 K j c Q δ ( j , i ) r ⊤ K_{j}^{c}Q_{\delta(j,i)}^{r\top} KjcQδ(j,i)r⊤,内容到位置项的计算方式类似。
最后,我们对 A ~ \tilde{A} A~应用缩放因子 1 3 d \frac{1}{\sqrt{3d}} 3d1。该因子对于稳定模型训练(Vaswani et al., 2017)非常重要,尤其是对于大规模预训练语言模型(PLM)。
3.1.1 高效实现
对于一个长度为 N N N的输入序列,存储每个tokens的相对位置嵌入需要 O ( N 2 d ) O(N^2d) O(N2d)的空间复杂度(Shaw et al., 2018; Huang et al., 2018; Dai et al., 2019)。然而,以内容到位置为例,我们注意到由于 δ ( i , j ) ∈ [ 0 , 2 k ) \delta(i,j)\in[0,2k) δ(i,j)∈[0,2k),且所有可能的相对位置嵌入始终是 K r ∈ R 2 k × d K_r\in R^{2k\times d} Kr∈R2k×d的子集,因此我们可以在所有查询的注意力计算中重用 K r K_r Kr。
在我们的实验中,预训练时设置最大相对距离 k k k为512。解耦注意力权重可以通过算法 Π \Pi Π高效计算。设 δ \delta δ为根据公式B计算的相对位置矩阵,即 δ [ i , j ] = δ ( i , j ) \delta[i,j]=\delta(i,j) δ[i,j]=δ(i,j)。我们不再为每个查询分配不同的相对位置嵌入矩阵,而是将每个查询向量 Q c [ i ~ , : ] Q_{c}[\tilde{i},:] Qc[i~,:]与 K r ⊺ ∈ R d × 2 k K_{r}^{\intercal}\in R^{d\times2k} Kr⊺∈Rd×2k相乘,如第3-5行所示。然后,使用相对位置矩阵 δ \delta δ作为索引提取注意力权重,如第6-10行所示。为了计算位置到内容的注意力得分,我们计算 A ~ p → c [ : , j ] \tilde{A}_{p\to c}[:,j] A~p→c[:,j],即注意力矩阵 A ~ p → c \tilde{A}_{p\to c} A~p→c的列向量,通过将每个键向量 K c [ j , : ] K_{c}[j,:] Kc[j,:]与 Q r ⊺ Q_{r}^{\intercal} Qr⊺相乘,如第11-13行所示。最后,通过相对位置矩阵 δ \delta δ作为索引提取相应的注意力得分,如第14-18行所示。通过这种方式,我们无需为每个查询分配内存来存储相对位置嵌入,从而将空间复杂度降低到 O ( k d ) O(kd) O(kd)(用于存储 K r K_{r} Kr和 Q r Q_{r} Qr)。
3.2 增强的掩码解码器:考虑绝对词位置
DeBERTa通过掩码语言建模(MLM)进行预训练,模型通过学习掩码词周围的上下文来预测被掩码的词。DeBERTa利用上下文词的内容和位置信息进行MLM。解耦注意力机制已经考虑了上下文词的内容和相对位置,但未考虑这些词的绝对位置,而这在许多情况下对预测至关重要。
以句子“a new store opened beside the new mall”为例,其中“store”和“mall”被掩码以进行预测。仅使用局部上下文(例如相对位置和周围词)不足以让模型区分句子中的“store”和“mall”,因为两者都以相同的相对位置跟在“new”之后。为了解决这一限制,模型需要将绝对位置作为相对位置的补充信息。例如,句子的主语是“store”而不是“mall”。这些句法细微差别在很大程度上取决于词在句子中的绝对位置。
有两种方法可以引入绝对位置:BERT模型在输入层引入绝对位置,而在DeBERTa中,我们在所有Transformer层之后、但在用于掩码词预测的softmax层之前引入绝对位置,如图[2]所示。通过这种方式,DeBERTa在所有Transformer层中捕获相对位置,仅在解码掩码词时将绝对位置作为补充信息。因此,我们将DeBERTa的解码组件称为增强的掩码解码器(EMD)。在实证研究中,我们比较了这两种引入绝对位置的方法,发现EMD效果更好。我们推测,BERT早期引入绝对位置可能会阻碍模型学习足够的相对位置信息。此外,EMD还使我们能够在预训练中引入除位置之外的其他有用信息。我们将此留待未来研究。
4 尺度不变的微调
本节介绍了一种新的虚拟对抗训练算法——尺度不变的微调(SiFT),它是Miyato et al. (2018)和Jiang et al. (2020)中描述的算法的变体,用于微调。
虚拟对抗训练是一种正则化方法,用于提高模型的泛化能力。它通过提高模型对对抗样本的鲁棒性来实现这一点,对抗样本是通过对输入进行微小扰动生成的。模型被正则化,使得在给定任务特定样本时,模型生成的输出分布与在该样本的对抗扰动上生成的输出分布相同。
对于NLP任务,扰动应用于词嵌入而不是原始词序列。然而,嵌入向量的值范围(范数)在不同词和模型之间有所不同。对于具有数十亿参数的大型模型,这种差异会更大,导致对抗训练的不稳定性。
受层归一化(Ba et al., 2016)的启发,我们提出了尺度不变的微调(SiFT)算法,通过将扰动应用于归一化的词嵌入来提高训练稳定性。具体来说,在我们的实验中,当将DeBERTa微调至下游NLP任务时,SiFT首先将词嵌入向量归一化为随机向量,然后将扰动应用于归一化后的嵌入向量。我们发现,归一化显著提高了微调模型的性能,且对于更大的DeBERTa模型,改进更为显著。需要注意的是,在我们的实验中,我们仅将SiFT应用于SuperGLUE任务中的DeBERTa 1.5 B _{1.5B} 1.5B,未来我们将对SiFT进行更全面的研究。
5 实验
本节报告了DeBERTa在各种自然语言理解(NLU)任务上的结果。
5.1 NLU任务的主要结果
遵循之前关于预训练语言模型(PLM)的研究,我们报告了使用大模型(large)和基础模型(base)的结果。
5.1.1 大模型的性能
我们按照BERT(Devlin et al., 2019)的设置预训练我们的大模型,不同之处在于我们使用了Radford et al. (2019) 和 Liu et al. (2019c) 的BPE词汇表。对于训练数据,我们使用了以下数据集:
- Wikipedia(英文维基百科数据,12GB)
- BookCorpus(Zhu et al., 2015,6GB)
- OpenWebText(公开的Reddit内容,Gokaslan & Cohen, 2019,38GB)
- Stories(CommonCrawl的子集,Trinh & Le, 2018,31GB)。
经过数据去重(Shoeybi et al., 2019)后,总数据量约为78GB。预训练数据集的详细描述请参见附录A.2。
我们使用6台DGX-2机器(96块V100 GPU)训练模型。单个模型以2K的批量大小和1M的训练步数进行训练,耗时约20天。详细的超参数请参见附录A。我们在表[T]中总结了DeBERTa在GLUE(Wang et al., 2019b)的八个NLU任务上的结果,并将其与结构相似的基于Transformer的预训练语言模型(PLM)进行了比较,包括BERT、RoBERTa、XLNet、ALBERT和ELECTRA。需要注意的是,RoBERTa、XLNet和ELECTRA是在160G训练数据上预训练的,而DeBERTa是在78G训练数据上预训练的。RoBERTa和XLNet以8K样本每步预训练了500K步,总计40亿训练样本;而DeBERTa以2K样本每步预训练了1M步,总计20亿训练样本,约为RoBERTa或XLNet的一半。
表 Π \Pi Π显示,与BERT和RoBERTa相比,DeBERTa在所有任务中表现一致更优。同时,DeBERTa在八个任务中的六个任务上优于XLNet。特别是在MRPC(比XLNet高1.1%,比RoBERTa高1.0%)、RTE(比XLNet高2.4%,比RoBERTa高1.7%)和CoLA(比XLNet高1.5%,比RoBERTa高2.5%)任务上,改进显著。DeBERTa在平均GLUE得分上也优于其他最先进的PLM,如ELECTRA l a r g e _\mathrm{large} large和XLNet l a r g e _\mathrm{large} large。
在GLUE的所有任务中,MNLI最常被用作监测PLM研究进展的指示性任务。DeBERTa在MNLI上显著优于所有现有相似规模的PLM,并创造了新的技术标杆。
除了GLUE任务外,DeBERTa还在以下三类自然语言理解(NLU)基准上进行了评估:
- 问答任务:SQuAD v1.1(Rajpurkar et al., 2016)、SQuAD v2.0(Rajpurkar et al., 2018)、RACE(Lai et al., 2017)、ReCoRD(Zhang et al., 2018)和SWAG(Zellers et al., 2018);
- 自然语言推理任务:MNLI(Williams et al., 2018);
- 命名实体识别任务:CoNLL-2003。
为了进行比较,我们纳入了ALBERT xxlarge _\text{xxlarge} xxlarge(Lan et al., 2019)和Megatron(Shoeybi et al., 2019)的三种不同模型规模,分别表示为Megatron 336 M _{336\text{M}} 336M、Megatron 1.3 B _{1.3\text{B}} 1.3B和Megatron 3.9 B _{3.9\text{B}} 3.9B,这些模型使用与RoBERTa相同的数据集进行训练。需要注意的是,Megatron 336 M _{336\text{M}} 336M的模型规模与上述其他模型相似。
我们在表2中总结了结果。与模型规模相似的现有最先进PLM(即BERT、RoBERTa、XLNet、ALBERT large _\text{large} large和Megatron 336 M _{336\text{M}} 336M)相比,DeBERTa在所有七个任务中均表现出更优的性能。以RACE基准为例,DeBERTa显著优于XLNet,提升了+1.4%(86.8% vs. 85.4%)。尽管Megatron 1.3 B _{1.3\text{B}} 1.3B的规模是DeBERTa的三倍,但DeBERTa在四个基准中的三个上表现更优。我们还在附录A.4中报告了DeBERTa在文本生成任务上的表现。
5.1.2 基础模型的性能
我们对基础模型的预训练设置与大模型类似。基础模型的结构遵循BERT基础模型,即 L = 12 L=12 L=12(层数)、 H = 768 H=768 H=768(隐藏层维度)、 A = 12 A=12 A=12(注意力头数)。我们使用4台DGX-2机器(64块V100 GPU)训练基础模型。以批量大小2048进行1M训练步数的单次预训练耗时约10天。我们使用相同的78G数据集训练DeBERTa,并将其与在160G文本数据上训练的RoBERTa和XLNet进行比较。
我们在表B中总结了基础模型的结果。在所有三个任务中,DeBERTa一致优于RoBERTa和XLNet,且改进幅度大于大模型。例如,在MNLI-m任务上,DeBERTa b a s e _\mathrm{base} base比RoBERTa b a s e _\mathrm{base} base提升了+1.2%(88.8% vs. 87.6%),比XLNet b a s e _\mathrm{base} base提升了+2%(88.8% vs. 86.8%)。
5.2 模型分析
在本节中,我们首先通过消融实验量化DeBERTa中引入的不同组件的相对贡献。然后,我们研究模型的收敛特性以表征训练效率。我们使用基础模型设置进行分析实验:模型在Wikipedia + BookCorpus数据集上进行预训练,训练步数为1M,批量大小为256,使用一台配备16块V100 GPU的DGX-2机器,耗时7天。由于篇幅限制,我们在附录A.7中可视化了DeBERTa和RoBERTa的不同注意力模式。
5.2.1 消融实验
为了验证我们的实验设置,我们从零开始预训练了RoBERTa基础模型。重新预训练的RoBERTa模型记为RoBERTa-ReImp b a s e _\mathrm{base} base。为了研究DeBERTa中不同组件的相对贡献,我们开发了三种变体:
-
-EMD:不包含增强掩码解码器(EMD)的DeBERTa基础模型。
-
-C2P:不包含内容到位置项(公式(4)中的©项)的DeBERTa基础模型。
-
-P2C:不包含位置到内容项(公式(4)中的(b)项)的DeBERTa基础模型。由于XLNet也使用相对位置偏置,该模型接近于XLNet加上EMD。
表 A ‾ \overline{A} A总结了四个基准数据集上的结果。首先,RoBERTa-ReImp在所有基准数据集上的表现与RoBERTa相似,验证了我们的实验设置是合理的。其次,我们发现移除DeBERTa中的任何一个组件都会导致性能显著下降。例如,移除增强掩码解码器(-EMD)会导致RACE任务上1.4%的性能损失(71.7% vs. 70.3%),SQuAD v1.1任务上0.3%的损失(92.1% vs. 91.8%),SQuAD v2.0任务上1.2%的损失(82.5% vs. 81.3%),以及MNLI-m/mm任务上0.2%(86.3% vs. 86.1%)和0.1%(86.2% vs. 86.1%)的损失。同样,移除内容到位置或位置到内容项都会导致所有基准任务的性能下降。正如预期的那样,移除两个组件会导致更显著的性能损失。
5.3 扩展到15亿参数
更大的预训练模型已显示出更好的泛化效果(Raffel et al., 2020; Brown et al., 2020; Shoeybi et al., 2019)。因此,我们构建了一个包含15亿参数的更大版本DeBERTa,记为DeBERTa 1.5 B _{1.5B} 1.5B。该模型由48层组成,隐藏层维度为1,536。DeBERTa 1.5 B _{1.5B} 1.5B在160G的预训练数据集上进行训练,类似于Liu et al. (2019c)的设置,并使用该数据集构建了一个包含128K词汇的新词表。为了训练DeBERTa 1.5 B _{1.5B} 1.5B,我们对模型架构进行了如下优化:
- 共享投影矩阵:在所有注意力层中,将相对位置嵌入的投影矩阵 W k , r W_{k,r} Wk,r和 W q , r W_{q,r} Wq,r分别与 W k , c W_{k,c} Wk,c和 W q , c W_{q,c} Wq,c共享,以减少模型参数数量。我们在基础模型上的消融实验(表I3)表明,投影矩阵共享在减少模型规模的同时保持了模型性能。
- 引入卷积层:在第一个Transformer层旁添加一个卷积层,以引入子词编码的n-gram知识,并将其输出与Transformer层的输出相加后输入到下一层。
表[5]报告了SuperGLUE(Wang et al., 2019a)的测试结果,这是最受欢迎的NLU基准之一。SuperGLUE包含多种NLU任务,包括问答任务(Clark et al., 2019; Khashabi et al., 2018; Zhang et al., 2018)、自然语言推理任务(Dagan et al., 2006; Bar-Haim et al., 2006; Giampiccolo et al., 2007; Bentivogli et al., 2009)、词义消歧任务(Pilehvar & Camacho-Collados, 2019)和推理任务(Levesque et al., 2011; Roemmele et al., 2011)。自2019年发布以来,全球顶级研究团队一直在开发大规模PLM,推动了SuperGLUE性能的显著提升。通过将DeBERTa扩展到更大规模,其性能显著提升,使得单个DeBERTa 1.5 B _{1.5B} 1.5B模型在2020年12月29日首次以宏观平均分(89.9 vs. 89.8)超越人类表现,而集成DeBERTa模型(DeBERTa E n s e m b l e _{Ensemble} Ensemble)在2021年1月6日位居SuperGLUE基准排行榜榜首,显著超越人类基线(90.3 vs. 89.8)。与包含110亿参数的T5相比,15亿参数的DeBERTa在训练和维护上更加节能,且更容易压缩并部署到各种应用场景中。
6 结论
本文提出了一种新的模型架构DeBERTa(具有解耦注意力机制的解码增强型BERT),通过两种新技术改进了BERT和RoBERTa模型。第一种是解耦注意力机制,其中每个词用两个向量分别表示其内容和位置,词之间的注意力权重通过分别基于内容和相对位置的解耦矩阵计算。第二种是增强的掩码解码器,它在解码层中引入绝对位置信息以预测预训练中的掩码词。此外,我们提出了一种新的虚拟对抗训练方法用于微调,以提高模型在下游任务中的泛化能力。
通过全面的实验研究,我们展示了这些技术显著提高了模型预训练的效率和下游任务的性能。具有15亿参数的DeBERTa模型首次在SuperGLUE基准测试中以宏观平均分超越了人类表现。
DeBERTa在SuperGLUE上超越人类表现标志着通用人工智能的一个重要里程碑。尽管在SuperGLUE上取得了令人瞩目的成果,但该模型远未达到人类水平的自然语言理解智能。人类非常擅长利用从不同任务中学到的知识来解决新任务,而无需或只需极少任务特定的示范。这种能力被称为组合泛化,即能够泛化到由熟悉组件(子任务或基本问题解决技能)组成的新组合(新任务)。未来,值得探索如何使DeBERTa以更显式的方式融入组合结构,从而实现类似于人类的自然语言神经与符号计算的结合。
A 附录
A.1 数据集
-
GLUE:通用语言理解评估(GLUE)基准是一个包含九项自然语言理解(NLU)任务的集合。如表6所示,它包括问答任务(Rajpurkar et al., 2016)、语言可接受性任务(Warstadt et al., 2018)、情感分析任务(Socher et al., 2013)、文本相似性任务(Cer et al., 2017)、释义检测任务(Dolan & Brockett, 2005)以及自然语言推理任务(NLI)(Dagan et al., 2006; Bar-Haim et al., 2006; Giampiccolo et al., 2007; Bentivogli et al., 2009; Levesque et al., 2012; Williams et al., 2018)。任务的多样性使GLUE非常适合评估NLU模型的泛化能力和鲁棒性。
-
SuperGLUE:SuperGLUE是GLUE基准的扩展,但难度更大,包含八项NLU任务。它涵盖了多种任务,包括问答任务(Zhang et al., 2018; Clark et al., 2019; Khashabi et al., 2018)、自然语言推理任务(Dagan et al., 2006; Bar-Haim et al., 2006; Giampiccolo et al., 2007; Bentivogli et al., 2009; De Marneffe et al., 2019)、共指消解任务(Levesque et al., 2012)和词义消歧任务(Pilehvar & Camacho-Collados, 2019)。
-
RACE:RACE是一个大规模机器阅读理解数据集,收集自中国的中学和高中英语考试(Lai et al., 2017)。
-
SQuAD v1.1/v2.0:斯坦福问答数据集(SQuAD)v1.1和v2.0(Rajpurkar et al., 2016; 2018)是流行的机器阅读理解基准。其段落来自大约500篇维基百科文章,问题和答案通过众包获得。SQuAD v2.0数据集包含关于相同段落的不可回答问题。
-
SWAG:SWAG是一个用于基于常识推理任务的大规模对抗性数据集,它统一了自然语言推理和物理基础推理(Zellers et al., 2018)。SWAG包含113k个关于实际情境的多项选择题。
-
CoNLL 2003:CoNLL 2003是一个包含来自多种来源文本的英语数据集,包含4种命名实体类型。
A.2 预训练数据集
对于DeBERTa的预训练,我们使用了以下数据集:
- Wikipedia(英文维基百科数据,12GB)
- BookCorpus(Zhu et al., 2015,6GB)
- OpenWebText(公开的Reddit内容,Gokaslan & Cohen, 2019,38GB)
- Stories(CommonCrawl的子集,Trinh & Le, 2018,31GB)。
经过数据去重(Shoeybi et al., 2019)后,总数据量约为78GB。在预训练过程中,我们还从训练数据中采样5%作为验证集以监控训练过程。表7比较了不同预训练模型使用的数据集。
A.3 实现细节
我们遵循RoBERTa(Liu et al., 2019c)的设置,采用动态数据批处理。此外,我们还引入了跨度掩码(Joshi et al., 2020)作为额外的掩码策略,最大跨度为3。表[8]中列出了预训练的详细超参数。在预训练中,我们使用Adam优化器(Kingma & Ba, 2014)并加入权重衰减(Loshchilov & Hutter, 2018)。在微调阶段,尽管在某些任务(如CoLA、RTE和RACE)上使用RAdam(Liu et al., 2019a)可以获得更好且更稳定的结果,但为了公平比较,我们仍使用Adam优化器(Kingma & Ba, 2014)。在微调过程中,我们通过超参数搜索程序训练每个任务,每次运行在DGX-2节点上耗时约1-2小时。所有超参数列于表9中。模型选择基于任务特定开发集上的表现。
我们的代码基于Huggingface Transformers [ m ] ^{[\mathrm{m}]} [m]、FairSeq [ z ] ^{[\mathrm{z}]} [z]和Megatron(Shoeybi et al., 2019)实现。
A.3.1 预训练效率
为了研究模型预训练的效率,我们绘制了微调模型在下游任务上的性能随预训练步数的变化曲线。如图[1]所示,对于RoBERTa-ReImp base _\text{base} base和DeBERTa base _\text{base} base,我们每150K预训练步数保存一个检查点,然后在两个代表性的下游任务(MNLI和SQuAD v2.0)上微调该检查点,并分别报告准确率和F1分数。作为参考,我们还报告了原始RoBERTa base _\text{base} base(Liu et al., 2019c)和XLNet base _\text{base} base(Yang et al., 2019)的最终模型性能。结果表明,在预训练过程中,DeBERTa base _\text{base} base始终优于RoBERTa-ReImp base _\text{base} base。
A.4 生成任务的主要结果
除了自然语言理解(NLU)任务外,DeBERTa还可以扩展到处理自然语言生成(NLG)任务。为了使DeBERTa能够像自回归模型一样用于文本生成,我们使用三角矩阵进行自注意力计算,并将自注意力掩码的上三角部分设置为 − p -p −p,遵循Dong et al. (2019)的方法。
我们在Wikitext-103(Merity et al., 2016)数据集上评估DeBERTa的自回归语言模型(ARLM)任务。为此,我们训练了一个新版本的DeBERTa,记为DeBERTa-MT。它像UniLM(Dong et al., 2019)一样,联合使用MLM和ARLM任务进行预训练。预训练的超参数与DeBERTa base _\text{base} base相同,只是训练步数较少(200k)。为了进行比较,我们使用RoBERTa作为基线,并加入GPT-2和Transformer-XL作为额外参考。DeBERTa-AP是DeBERTa的一个变体,其中绝对位置嵌入像RoBERTa一样被引入输入层。为了公平比较,所有这些模型都是在类似设置下预训练的基础模型。
表10总结了Wikitext-103上的结果。我们可以看到,DeBERTa base _\text{base} base在开发集和测试集上均获得了更低的困惑度(perplexity),而联合使用MLM和ARLM任务进行训练进一步降低了困惑度。DeBERTa-AP的表现不如DeBERTa,这表明将词的绝对位置嵌入引入解码层(如DeBERTa中的EMD)比像RoBERTa那样引入输入层更为有效。
A.5 处理长序列输入
由于采用了相对位置偏置,我们选择将最大相对距离截断为 k k k,如公式3所示。因此,在每一层中,每个tokens最多可以直接关注 2 k − 1 2k - 1 2k−1个tokens及其自身。通过堆叠Transformer层,第 l l l层中的每个tokens最多可以隐式关注 ( 2 k − 1 ) × l (2k - 1) \times l (2k−1)×l个tokens。以DeBERTa large _\text{large} large为例,其中 k = 512 k = 512 k=512, L = 24 L = 24 L=24,理论上可以处理的最大序列长度为24,528。这是我们设计选择的一个附带好处,并且我们发现这对RACE任务有益。表11展示了长序列对RACE任务效果的比较。
长序列处理是一个活跃的研究领域。已有许多研究扩展了Transformer架构以处理长序列(Beltagy et al., 2020; Kitaev et al., 2019; Child et al., 2019; Dai et al., 2019)。我们未来的研究方向之一是扩展DeBERTa以处理极长序列。
A.6 不同模型规模的性能改进
在本小节中,我们研究了不同模型规模对大模型在GLUE任务上的影响。表12总结了结果,表明更大的模型可以获得更好的结果,而SiFT也一致地提升了模型性能。
A.7 模型复杂度
通过引入解耦注意力机制,我们增加了三组额外的参数: W q , r , W k , r ∈ R d × d W_{q,r}, W_{k,r} \in R^{d \times d} Wq,r,Wk,r∈Rd×d 和 P ∈ R 2 k × d P \in R^{2k \times d} P∈R2k×d。模型参数的总增加量为 2 L × d 2 + 2 k × d 2L \times d^2 + 2k \times d 2L×d2+2k×d。对于大模型( d = 1024 , L = 24 , k = 512 d=1024, L=24, k=512 d=1024,L=24,k=512),这大约增加了49M参数,增长了13%。对于基础模型( d = 768 , L = 12 , k = 512 d=768, L=12, k=512 d=768,L=12,k=512),这增加了14M参数,增长了12%。然而,通过共享内容和位置嵌入的投影矩阵(即 W q , r = W q , c , W k , r = W k , c W_{q,r} = W_{q,c}, W_{k,r} = W_{k,c} Wq,r=Wq,c,Wk,r=Wk,c),DeBERTa的参数数量与RoBERTa相同。我们在基础模型上的实验表明,结果几乎相同,如表I3所示。
由于计算额外的位置到内容和内容到位置注意力得分,额外的计算复杂度为 O ( N k d ) O(Nkd) O(Nkd)。与BERT或RoBERTa相比,这增加了30%的计算成本。与同样使用相对位置嵌入的XLNet相比,计算成本的增加约为15%。通过融合注意力计算内核的进一步优化,可以显著减少这一额外成本。对于增强掩码解码器(EMD),由于预训练中的解码器仅重建被掩码的tokens,因此不会为未掩码的tokens引入额外的计算成本。在15%的tokens被掩码且仅使用两层解码器的情况下,额外成本为 0.15 × 2 / L 0.15 \times 2 / L 0.15×2/L,这导致基础模型( L = 12 L=12 L=12)的额外计算成本仅为3%,大模型( L = 24 L=24 L=24)的额外计算成本为2%。
A.8 增强掩码解码器的额外细节
EMD的结构如图2b所示。EMD有两个输入(即 I I I和 H H H)。 H H H表示来自前一Transformer层的隐藏状态, I I I可以是解码所需的任何必要信息,例如 H H H、绝对位置嵌入或前一EMD层的输出。 n n n表示堆叠的 n n n层EMD,其中每层EMD的输出将作为下一层EMD的输入 I I I,最后一层EMD的输出将直接输入到语言模型头部。 n n n层可以共享相同的权重。在我们的实验中,我们为 n = 2 n=2 n=2层共享相同的权重以减少参数数量,并使用绝对位置嵌入作为第一层EMD的输入 I I I。当 I = H I=H I=H且 n = 1 n=1 n=1时,EMD与BERT的解码层相同。然而,EMD更通用且灵活,因为它可以接受各种类型的输入信息进行解码。
A.9 注意力模式
为了可视化DeBERTa与RoBERTa的不同操作方式,我们在图3中展示了RoBERTa、DeBERTa以及三个DeBERTa变体在最后一层自注意力层的注意力模式。
我们观察到两个差异。首先,RoBERTa在tokens关注自身时具有明显的对角线效应,但这种效应在DeBERTa中不太明显。这可以归因于EMD的使用,其中绝对位置嵌入被添加到内容的隐藏状态中作为查询向量,这一点在DeBERTa-EMD的注意力模式中得到了验证,其对角线效应比原始DeBERTa更明显。其次,我们观察到RoBERTa的注意力模式中存在垂直条纹,这主要是由高频功能词或tokens(例如“a”、“the”和标点符号)引起的。对于DeBERTa,条纹仅出现在第一列,代表[CLS]tokens。我们推测,对[CLS]的显著关注是必要的,因为[CLS]的特征向量通常在下游任务中用作整个输入序列的上下文表示。我们还观察到,在三个DeBERTa变体的模式中,垂直条纹效应非常明显。
我们在图4和图5中提供了三个额外的示例,以说明DeBERTa和RoBERTa的不同注意力模式。
A.10 微调方差的考虑
为了考虑不同微调运行的方差,在我们的实验中,我们始终遵循(Liu et al., 2019c)的方法,通过使用不同的随机初始化种子进行五次运行并取平均值来报告下游任务的结果,并在比较结果时进行显著性检验。如表[14]所示,DeBERTa base _\text{base} base显著优于RoBERTa base _\text{base} base(p值<0.05)。
A.11 进一步提高模型效率
除了通过数十亿或数万亿参数扩展Transformer模型(Raffel et al., 2020; Brown et al., 2020; Fedus et al., 2021)外,提高模型的参数效率也非常重要(Kanakarajan et al., 2021)。在[A.3.I]中,我们已经展示了DeBERTa比BERT和RoBERTa具有更高的参数效率。在本节中,我们展示了在参数效率方面的进一步改进。
**替换tokens检测(RTD)**是ELECTRA(Clark et al., 2020)引入的一种新的预训练目标。它已被证明比掩码语言模型(MLM)(Devlin et al., 2019; Liu et al., 2019c)更有效。在DeBERTa中,我们用RTD目标替换了MLM目标,并将新变体记为DeBERTa R T D _{RTD} RTD。我们使用与DeBERTa 1.5 B _{1.5B} 1.5B相同的160GB数据,在小型、基础和大型设置下预训练DeBERTa R T D _{RTD} RTD。遵循(Meng et al., 2021),我们将生成器的宽度设置为与判别器相同,但将其深度设置为判别器深度的一半。其他超参数与DeBERTa base _\text{base} base或DeBERTa large _\text{large} large保持一致。对于新成员DeBERTa R T D small _{RTD_\text{small}} RTDsmall,它有6层,宽度与DeBERTa R T D base _{RTD_\text{base}} RTDbase相同。
我们在MNLI和SQuAD v2数据集上评估了我们的模型。表[15]总结了结果。我们观察到,DeBERTa R T D base _{RTD_\text{base}} RTDbase和DeBERTa R T D large _{RTD_\text{large}} RTDlarge均显著优于其他模型。例如,DeBERTa R T D large _{RTD_\text{large}} RTDlarge在MNLI和SQuAD v2.0上分别比DeBERTa Large _\text{Large} Large(之前的SOTA模型)提高了0.9个绝对百分点。值得注意的是,DeBERTa R T D large _{RTD_\text{large}} RTDlarge与DeBERTa 1.5 B _{1.5B} 1.5B表现相当,而其参数数量仅为DeBERTa 1.5 B _{1.5B} 1.5B的1/3。此外,DeBERTa R T D small _{RTD_\text{small}} RTDsmall甚至大幅优于BERT large _\text{large} large。所有这些都证明了DeBERTa R T D _{RTD} RTD模型的效率,并清楚地展示了未来研究更高参数效率预训练语言模型的巨大潜力。
相关文章:
DEBERTA:具有解耦注意力机制的解码增强型BERT
摘要 近年来,预训练神经语言模型的进展显著提升了许多自然语言处理(NLP)任务的性能。本文提出了一种新的模型架构DeBERTa(具有解耦注意力机制的解码增强型BERT),通过两种新技术改进了BERT和RoBERTa模型。第…...
WWW2025 多模态对话系统意图识别挑战赛方案总结
WWW2025 多模态对话系统意图识别挑战赛方案 代码实现:https://github.com/klayc-gzl/incent_internvl_2.5_8b 最终成绩: 大赛背景 互联网已成为提供客户服务的主要沟通渠道。网络客户服务面临的一个关键挑战是服务对话中多模态意图的高效识别。通过利…...
渗透测试--攻击常见的Web应用
本文章咱主要讨论,常见Web应用的攻击手法,其中并不完全,因为Web应用是在太多无法囊括全部,但其中的手法思想却值得我们借鉴,所以俺在此做了记录,希望对大家有帮助!主要有以下内容: 1…...
w173疫苗发布和接种预约系统
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
常用的跨域方案有哪些?
在前端开发中,跨域(Cross-Origin)是一个常见问题,通常是由于浏览器的同源策略(Same-Origin Policy)限制导致的。为了解决跨域问题,前端开发者可以采用多种方案。 1. CORS(跨域资源共…...
JS通过ASCII码值实现随机字符串的生成(可指定长度以及解决首位不出现数值)
在之前写过一篇“JS实现随机生成字符串(可指定长度)”,当时写的过于简单和传统,比较粗放。此次针对此问题,对随机生成字符串的功能进行优化处理,对随机取到的字符都通过程序自动来完成。 在写之前ÿ…...
IoTDB 1.2 升级 1.3 后 Pipe 插件失效
问题现象 客户使用 Pipe 功能将数据从 IoTDB 系统传输至 Kafka 集群,以便进行后续的数据处理与分析。在从企业版 1.2.5 升级至企业版 1.3.3.6 后,客户反馈 Kafka 的 consumer 无法接收到数据。经检查日志,发现存在以下报错: 问题…...
基于STM32的智能门锁安防系统(开源)
目录 项目演示 项目概述 硬件组成: 功能实现 1. 开锁模式 1.1 按键密码开锁 1.2 门禁卡开锁 1.3 指纹开锁 2. 功能备注 3. 硬件模块工作流程 3.1 步进电机控制 3.2 蜂鸣器提示 3.3 OLED显示 3.4 指纹与卡片管理 项目源代码分析 1. 主程序流程 (main…...
浅谈云端编辑器,分析其亮点与不足
浅谈云端编辑器,分析其亮点与不足 这个云端编辑器界面可以分为左侧题目筛选栏、中间题目描述与代码编辑区域、右侧AI提示功能三部分。以下是详细的分析: 1. 左侧题目筛选栏 层次结构清晰:左侧栏展示了一个层级结构,题目按主题分…...
Python字符串引号的嵌套问题
目录 1、使用不同类型的引号 2、使用转义字符 3、使用三重引号 4、嵌套三重引号 5、注意事项 在Python中,字符串可以使用单引号 () 或双引号 (") 来定义,但是如果我们要定义的字符串内也包含引号,字符串界定符的不正确使用会导致语法…...
latex如何让目录后面有点
使用前效果 在导言区引入以下代码 \usepackage[subfigure]{tocloft} \usepackage{subfigure} % 设置目录中 section 条目前导符号为连续点 \renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}编译后的效果...
【力扣系列题目】不同路径 组合总和 最大连续1个数 打家劫舍{持续更新中...}
文章目录 不同路径不同路径[不同路径 II](https://leetcode.cn/problems/unique-paths-ii/)[不同路径 III](https://leetcode.cn/problems/unique-paths-iii/) 组合总和组合总和 【无重复数字无限制选择次数】[组合总和 II](https://leetcode.cn/problems/combination-sum-ii/)…...
方法建议ChatGPT提示词分享
方法建议 ChatGPT能够根据您的具体需求提供针对性的建议,帮助您选择最合适的研究方法。通过清晰的提示,ChatGPT可以精准地为您提供最契合的研究方案。此外,它还能协助您将这些方法灵活地应用于新的研究环境,提出创新的技术解决方案…...
Cursor的详细使用指南
以下是一份关于 Cursor 的详细使用指南: 一、安装与设置 下载与安装: 首先,访问 Cursor 的官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载相应的安装程序。运行安装程序,按照屏幕上的提…...
Python----Python高级(正则表达式:语法规则,re库)
一、正则表达式 1.1、概念 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、 regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母࿰…...
电脑如何访问手机文件?
手机和电脑已经深深融入了我们的日常生活,无时无刻不在为我们提供服务。除了电脑远程操控电脑外,我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么,如何使用电脑远程访问手机上的文件呢? 如何使用电脑访问手机文件…...
计算最接近的数
计算最接近的数 真题目录: 点击去查看 E B卷 100分题型 题目描述 给定一个数组X和正整数K,请找出使表达式: X[i] - X[i 1] - … - X[i K - 1] 结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 i. 其中&…...
Ubuntu离线docker compose安装DataEase 2.10.4版本笔记
1、先准备一个可以正常上网的相同版本的Ubuntu系统,可以使用虚拟机。Ubuntu系统需要安装好docker compose或docker-compose 2、下载dataease-online-installer-v2.10.4-ce.tar在线安装包,解压并执行install.sh进行安装和启动 3、导出docker镜像 sudo d…...
C#使用WMI获取控制面板中安装的所有程序列表
C#使用WMI获取控制面板中安装的所有程序列表 WMI 全称Windows Management Instrumentation,Windows Management Instrumentation是Windows中用于提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windo…...
WPF2-1在xaml为对象的属性赋值.md
1. AttributeValue方式 1.1. 简单属性赋值1.2. 对象属性赋值 2. 属性标签的方式给属性赋值3. 标签扩展 (Markup Extensions) 3.1. StaticResource3.2. Binding 3.2.1. 普通 Binding3.2.2. ElementName Binding3.2.3. RelativeSource Binding3.2.4. StaticResource Binding (带参…...
社区版Dify实现文生视频 LLM+ComfyUI+混元视频
社区版Dify实现文生视频 LLMComfyUI混元视频 一、 社区版Dify实现私有化混元视频效果二、为什么社区版Dify可以在对话框实现文生视频?LLMComfyUI混元视频 实现流程图(重点)1. 文生视频模型支持ComfyUI2. ComfyUI可以轻松导出API实现封装3. Di…...
QT调用OpenSceneGraph
OSG和osgQt编译教程,实测通过 一、下载OpenSceneGraph OpenSceneGraphhttps://github.com/openscenegraph/OpenSceneGraph 二、使用CMAKE编译OpenSceneGraph 1.打开cmake,配置源代码目录 2. CMAKE_INSTALL_PREFIX设置为install文件夹,生…...
Qt基础项目篇——Qt版Word字处理软件
一、核心功能 本软件为多文档型程序,界面是标准的 Windows 主从窗口 拥有:主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西,均在下图了。 开发该软件,主要分为下面三个阶段 1)界面设计开发 多窗口 MDI 程序…...
【Postgres_Python】使用python脚本批量创建和导入多个PG数据库
之前批量创建和导入数据库分为2个python脚本进行,现整合优化代码合并为一个python脚本,可同步实现数据库的创建和数据导入。之前的文章链接: 【Postgres_Python】使用python脚本批量创建PG数据库 【Postgres_Python】使用python脚本将多个.S…...
消息队列篇--原理篇--RabbitMQ和Kafka对比分析
RabbitMQ和Kafka是两种非常流行的消息队列系统,但它们的设计哲学、架构特点和适用场景存在显著差异。对比如下。 1、架构设计 RabbitMQ: 基AMQP协议:RabbitMQ是基于AMQP(高级消息队列协议)构建的,支持多…...
俄语画外音的特点
随着全球媒体消费的增加,语音服务呈指数级增长。作为视听翻译和本地化的一个关键方面,画外音在确保来自不同语言和文化背景的观众能够以一种真实和可访问的方式参与内容方面发挥着重要作用。说到俄语,画外音有其独特的特点、挑战和复杂性&…...
【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格
音乐流派分类 – 自动化分类不同音乐风格 在本教程中,我们将开发一个深度学习项目,用于自动化地从音频文件中分类不同的音乐流派。我们将使用音频文件的频率域和时间域低级特征来分类这些音频文件。 对于这个项目,我们需要一个具有相似大小和相似频率范围的音频曲目数据集…...
Keil5 IDE使用笔记
1 Keil生成bin文件 $K\ARM\ARMCLANG\bin\fromelf.exe --bin --outputL/L.bin !L $K: 表示 Keil 5的安装路径 L: 表示 工程名 !L: 表示 工程名.arf 后缀的文件 可根据实际需要修改 --output 的值调整生成的bin文件的存放路径。 2 下载程序报错 No ST-LINK detected Error: Fla…...
自动化办公|使用Python重命名并移动文件到对应文件夹
在日常的文件管理和处理过程中,我们可能会遇到需要将文件整理到不同文件夹中的需求。例如,我们有一个包含多个文件的目录,文件名的首字符表示文件应该存放在哪个文件夹中。我们可以使用Python脚本来自动完成这个任务,实现文件的分…...
【全栈】SprintBoot+vue3迷你商城(5)
【全栈】SprintBootvue3迷你商城(5) 上一期我们基本完成了与用户相关的接口,而这些接口都是用户才能干的事情,如果你没登录,那么这些接口功能你都不能实现。 那么如何做到这一步呢? 1.Token 作用 身份…...
Java 并发编程:Java 中的乐观锁与 CAS
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 025 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...
模拟飞行入坑(五) P3D 多通道视角配置 viewgroup
背景: P3D进行多个屏幕显示的时候,如果使用英伟达自带的屏幕融合成一个屏,或者使用P3D单独拉伸窗口,会使得P3D的画面被整体拉伸,又或者,当使用Multichannel进行多个设备联动时,视角同步组合需要配置&#…...
react中hooks之 React 19 新 Hooks useActionState useFormStatus用法总结
React 19 新 Hooks 使用指南: useActionState & useFormStatus 目录 useActionStateuseFormStatus最佳实践 useActionState 概述 useActionState 是 React 19 引入的新 Hook,用于处理表单 action 的状态更新。它允许你基于表单 action 的结果来更新组件状态…...
为AI聊天工具添加一个知识系统 之48 蒙板程序设计(第二版):Respect九宫格【社会形态:治理】
本文要点 1、词汇表Vocabulary (普通名词) 1) 三组词(数据库支持的三个数字散列): 工作,工件,工具。论题,主题词,关键字。口号,符号,编号。 2…...
靠右行驶数学建模分析(2014MCM美赛A题)
笔记 题目 要求分析: 比较规则的性能,分为light和heavy两种情况,性能指的是 a.流量与安全 b. 速度限制等分析左侧驾驶分析智能系统 论文 参考论文 两类规则分析 靠右行驶(第一条)2. 无限制(去掉了第一条…...
6.5、密集波分复用系统(DWDM)/OTN
图中从左到右分为多个部分,分别代表了信号的输入、传输和输出过程。 左侧是客户侧,有普通接口和彩色接口,分别连接到光转发单元(OTU)。 中间部分是传输线路,包含多个光放大器(OBA、OLA、OPA&…...
Unity3D基于Unity整合BEPUphysicsint物理引擎实战详解
引言 Unity3D是一款流行的游戏引擎,提供了丰富的功能和工具,使开发者能够轻松创建各种类型的游戏。其中,帧同步技术是游戏开发中至关重要的一环,它能确保多个玩家在同一时间内看到的游戏状态是一致的。BEPUphysicsint是一个基于U…...
《探秘鸿蒙Next:如何保障AI模型轻量化后多设备协同功能一致》
在鸿蒙Next的多设备协同场景中,确保人工智能模型轻量化后功能的一致性是一项极具挑战性但又至关重要的任务。以下是一些关键的方法和策略。 统一的模型架构与标准 采用标准化框架:选择如TensorFlow Lite、PyTorch Mobile等在鸿蒙Next上适配良好的轻量化…...
微服务知识——4大主流微服务架构方案
文章目录 1、微服务聚合模式2、微服务共享模式3、微服务代理模式4、微服务异步消息模式 微服务是大型架构的必经之路,也是大厂重点考察对象,下面我就重点详解4大主流微服务架构方案。 1、微服务聚合模式 微服务聚合设计模式,解决了如何从多个…...
Java 方法重写
目录 一、什么是方法重写,为什么需要它 二、方法重写的规则 三、方法重写的实际应用场景 四、方法重写与重载的区别 五、总结 在 Java 编程的精彩世界里,方法重写是一项极为重要且实用的特性,它犹如一把神奇的钥匙,为我们开启…...
华为E9000刀箱服务器监控指标解读
美信监控易内置了数千种常见设备监测器,能够监测超过20万项指标。这些指标涵盖了从硬件设备到软件系统,从网络性能到安全状态等各个方面。如下基于美信监控易——IT基础监控模块,对华为E9000刀箱服务器部分监控指标进行解读。 一、华为E9000…...
正则表达式基础与应用
什么是正则表达式? 正则表达式(Regular Expression,简称regex)是一种用于描述字符串结构的语法规则。它定义了一个搜索模式,可以用来匹配、替换或提取文本中的子串。正则表达式广泛应用于文本处理、数据验证、查找和替…...
微信小程序使用上拉加载onReachBottom。页面拖不动。一直无法触发上拉的事件。
1,可能是原因是你使用了scroll-view的标签,用onReachBottom触发加载事件。这两个是有冲突的。没办法一起使用。如果页面的样式是滚动的是无法去触发页面的onReachBottom的函数的。因此,你使用overflow:auto.来使用页面的某些元素滚动…...
9. 神经网络(一.神经元模型)
首先,先看一个简化的生物神经元结构: 生物神经元有多种类型,内部也有复杂的结构,但是可以把单个神经元简化为3部分组成: 树突:一个神经元往往有多个树突,用于接收传入的信息。轴突:…...
Mysql安装,mysql-installer-community-8.0.41.0
“windowR"键弹出运行框,输入”cmd"进入window命令提示符,输入“mysql -uroot -p"按下回车,再输入密码,按下回车,出现下面界面则是配置成功。 默认会在 C:\Program Files\MySQL\MySQL Server 8.0\bin …...
吴恩达深度学习——神经网络介绍
文章内容来自BV11H4y1F7uH,仅为个人学习所用。 文章目录 什么是神经网络引入神经网络神经元激活函数ReLU隐藏单元 用神经网络进行监督学习监督学习与无监督学习举例 什么是神经网络 引入 已经有六个房子的数据集,横轴为房子大小,纵轴为房子…...
【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2?使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户(如果用户有一万条数据呢),而是分页展示给用户,这就是分页查询…...
JavaScript DOM 操作与事件处理
Hi,我是布兰妮甜 !在现代Web开发中,JavaScript不仅是用来增强用户体验的工具,它更是创建动态、交互式网页的关键。通过操作文档对象模型(DOM)和处理用户事件,开发者能够构建出响应迅速且功能丰富…...
rstrip 方法是 Python 字符串的一个内置方法,用于 删除字符串右边(末尾)的指定字符
rstrip 方法是 Python 字符串的一个内置方法,用于 删除字符串右边(末尾)的指定字符。 语法: string.rstrip([chars])string:原始字符串。chars:可选参数,指定要删除的字符。默认为 None&#…...
【Elasticsearch】腾讯云安装Elasticsearch
Elasticsearch 认识Elasticsearch安装Elasticsearch安装Kibana安装IK分词器分词器的作用是什么?IK分词器有几种模式?IK分词器如何拓展词条?如何停用词条? 认识Elasticsearch Elasticsearch的官方网站如下 Elasticsearch官网 Ela…...