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θ(XX~)=θmaxiClogpθ(x~i=xiX~)

其中, 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}\} {Pij}来表示它,分别表示其内容和与位置 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,Pij}×{Hj,Pji}=HiHj+HiPji+PijHj+PijPji

也就是说,词对的注意力权重可以计算为四个注意力得分的和,分别基于内容和位置的解耦矩阵:内容到内容内容到位置位置到内容位置到位置

现有的相对位置编码方法使用单独的嵌入矩阵来计算注意力权重中的相对位置偏置(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=d QK

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} HRN×d表示输入的隐藏向量, H o ∈ R N × d H_o\in R^{N\times d} HoRN×d表示自注意力的输出, W q , W k , W v ∈ R d × d W_{q},W_{k},W_{v}\in R^{d\times d} Wq,Wk,WvRd×d表示投影矩阵, A ∈ R N × N A\in R^{N\times N} ARN×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)= 02k1ij+kijkijk其他情况。
我们可以将带有相对位置偏置的解耦自注意力表示为公式 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,cRˉd×d生成的内容向量, P ∈ R 2 k × d \boldsymbol{P}\in R^{2k\times d} PR2k×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,rRd×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(3d A~)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}} 3d 1。该因子对于稳定模型训练(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} KrR2k×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} KrRd×2k相乘,如第3-5行所示。然后,使用相对位置矩阵 δ \delta δ作为索引提取注意力权重,如第6-10行所示。为了计算位置到内容的注意力得分,我们计算 A ~ p → c [ : , j ] \tilde{A}_{p\to c}[:,j] A~pc[:,j],即注意力矩阵 A ~ p → c \tilde{A}_{p\to c} A~pc的列向量,通过将每个键向量 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)基准上进行了评估:

  1. 问答任务: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);
  2. 自然语言推理任务:MNLI(Williams et al., 2018);
  3. 命名实体识别任务: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,我们对模型架构进行了如下优化:

  1. 共享投影矩阵:在所有注意力层中,将相对位置嵌入的投影矩阵 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)表明,投影矩阵共享在减少模型规模的同时保持了模型性能。
  2. 引入卷积层:在第一个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 2k1个tokens及其自身。通过堆叠Transformer层,第 l l l层中的每个tokens最多可以隐式关注 ( 2 k − 1 ) × l (2k - 1) \times l (2k1)×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,rRd×d P ∈ R 2 k × d P \in R^{2k \times d} PR2k×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模型的效率,并清楚地展示了未来研究更高参数效率预训练语言模型的巨大潜力。

在这里插入图片描述

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

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

相关文章

鸿蒙模块概念和应用启动相关类(HAP、HAR、HSP、AbilityStage、UIAbility、WindowStage、window)

目录 鸿蒙模块概念 HAP entry feature har shared 使用场景 HAP、HAR、HSP介绍 HAP、HAR、HSP开发 应用的启动 AbilityStage UIAbility WindowStage Window 拉起应用到显示到前台流程 鸿蒙模块概念 HAP hap包是手机安装的最小单元&#xff0c;1个app包含一个或…

[OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)

一、简介 本文介绍了 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO) 的基本概念&#xff0c;实现流程和简单的代码实现。实现 SSAO 时使用到了 OpenGL 中的延迟着色 &#xff08;Deferred shading&#xff09;技术。 按照本文代码实现后&#xff0c;可以实现以下…

MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍

MATLAB在绘图时&#xff0c;设置线段颜色和数据点的形状与颜色是提高图形可读性与美观性的重要手段。本文将详细介绍如何在 MATLAB 中设置这些属性。 文章目录 线段颜色设置单字母颜色表示法RGB 值表示法 数据点的形状与颜色设置设置数据点颜色和形状示例代码 运行结果小结 线段…

AIGC视频生成国产之光:ByteDance的PixelDance模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍ByteDance的视频生成模型PixelDance&#xff0c;论文于2023年11月发布&#xff0c;模型上线于2024年9月&#xff0c;同时期上线的模型还有Seaweed&…

mac 电脑上安装adb命令

在Mac下配置android adb命令环境&#xff0c;配置方式如下&#xff1a; 1、下载并安装IDE &#xff08;android studio&#xff09; Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后&#xff0c;将android的adb工具所在…

# [0114] Task01 《数学建模导论》P1 解析几何与方程模型

链接&#xff1a;https://www.datawhale.cn/activity/124 整理的相关代码库 GitHub 页面链接 绪论 姜启源&#xff1a;“数学建模就是建立数学模型解决实际问题” 本质还是解应用题&#xff0c;只是曾经的“小明买糖”变成了如今的“嫦娥探月”。 SEIR 模型&#xff0c;也…

NewStar CTF week1 web wp

谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id&#xff0c;是一个占位符&#xff0c;按第二列排序用来测试列数&#xff0c;如果没有两列则会报错-1 union select 1,2 -1同样是占位符&#xff0c;union的作用是将注入语句合并到原始语句…

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…

PAT甲级-1014 Waiting in Line

题目 题目大意 一个银行有n个窗口&#xff0c;每个窗口最多站m个人&#xff0c;其余人在黄线外等候。假设k个人同时进入银行按先后次序排队&#xff0c;每个人都有相应的服务时间。每个顾客都选择最短队列站&#xff0c;如果有多个相同长度的队列&#xff0c;按序号小的站。给…

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统

单纯仅靠LLM会产生误导性的 “幻觉”&#xff0c;训练数据会过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented Generati…

11 文件与IO

1 File类 1.1 基本介绍 File类代表系统中的文件对象(文件或目录)&#xff0c;位于java.io包下。 存储介质上的文件或目录在Java程序中都是用File类的实例来表示。 通过File类&#xff0c;可以实现对系统中文件或目录的操作&#xff0c;类似我们在操作系统中借助鼠标、快捷键…

Windows第一次上手鸿蒙周边

端云一体所需装备 很重要&#xff1a;C/D/E/F盘要有二三十G的可用空间&#xff01; 硬件&#xff1a;华为鸿蒙实验箱&#xff08;基础版&#xff09;》飞机板核心板环境监测板 软件&#xff1a;Visual Studio Code写代码 终端编译 Hiburn烧录到开发板 MobaXterm &#xff08…

Node.js——express中间件(全局中间件、路由中间件、静态资源中间件)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

财税资金数据管理一体化大屏 | 智慧金融合集

随着科技的快速进步和数字化转型的加速&#xff0c;金融、税务等机构和企业面临的数据量呈现出爆炸式增长。传统的数据分析方法早已无法胜任现代业务的需求。为此&#xff0c;许多机构开始尝试创新的软件工具来更好的管理繁琐的数据。 通过图扑软件的数据可视化大屏&#xff0c…

5. 推荐算法的最基础和最直观的认识

1.性别年龄转换为统一的计量单位 所谓推荐&#xff0c;就是替别人推荐&#xff0c;比如工厂A需要招男员工&#xff0c;希望大家推荐认识的人。那么在这里&#xff0c;就有了推荐的概念&#xff0c;限定条件是男。我们知道&#xff0c;人的性别一般分为男或者女。在这里假设把男…

【Postgres_Python】使用python脚本将多个PG数据库合并为一个PG数据库

需要合并的多个PG数据库表个数和结构一致&#xff0c;这里提供一种思路&#xff0c;选择sql语句insert插入的方式进行&#xff0c;即将其他PG数据库的每个表内容插入到一个PG数据库中完成数据库合并 示例代码说明&#xff1a; 选择一个数据库导出表结构为.sql文件&#xff08…

MyBatis和JPA区别详解

文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis&#xff1a;半自动化的ORM框架1.1、代码示例 2、JPA&#xff1a;全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis&#xff1a;灵活的SQL控制1.1、适用场景 2、JPA&#xff1a;开发效率…

通信工程行业现状与前景2024:引领未来增长新浪潮

在当今数字化时代&#xff0c;通信工程犹如现代社会的神经系统&#xff0c;其重要性不言而喻。从日常的语音通话、信息传递&#xff0c;到复杂的工业自动化、智能交通系统&#xff0c;通信技术无处不在&#xff0c;深刻改变着人类的生活方式与社会运转模式。随着科技的持续创新…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)

本文验证基于请求头中传递token信息的认证方式&#xff0c;webapi项目的控制器类中新建如下函数&#xff0c;仅通过验证的客户端能调用&#xff0c;需要客户端请求在Header中添加’Authorization’: Bearer token’的键值对且通过token验证后才能调用。 [Authorize] [HttpGet]…