Bert: Pre-training of Deep Bidirectional Transformers for Language Understanding

2023-11-14

Abstract

        我们介绍了一种语言表达模型称为BERT,也就是Transformer的双边编码表示。与当前语言表达模型不同(Peters et al., 2018a; Radford et al., 2018),BERT设计通过考虑所有层左右上下文对为标注过的文本进行深度双边表达的预训练。因此,预训练BERT模型可以通过只增加一个额外的输出层进行finetuned,从而在很多任务中得到SOTA模型,例如问答系统与语言推理,无需进行针对特定任务的网络结构优化。

        BERT概念简单但经验丰富。它在11中自然语言处理任务上取得了SOTA的成绩,包括将GLUE得分推高到80.5%(有7.7%的绝对提升),将MultiNLI准确率提升到86.7%(4.6%绝对提升),将SQuADv1.1问答测试F1提升到93.2(1.5个点绝对优化),SQuADv2.0测试F1到83.1(5.1个点绝对优化)。

1、Introduction

        预训练语言模型证明在改进许多自然语言处理任务上都有效(Dai and Le, 2015; Peters et al.,2018a; Radford et al., 2018; Howard and Ruder,2018)。这些包括句子级别的任务例如自然语言推理(Bowman et al., 2015;Williams et al., 2018)与释意(Dolan and Brockett, 2005),这些任务意在通过整体分析预测句子间的关系,与指令级别任务,如命名实体识别和问题回答,其中需要模型在指令级别生成细粒度的输出(Tjong Kim Sang and De Meulder, 2003; Rajpurkar et al., 2016)。

        对于下游任务有两种现有策略使用预存了预先表达:基于特征的与fine-tuning。基于特征的方法例如ELMo(Peters et al., 2018a),使用任务专用结构,将预训练表达作为额外特征。Fine-tuning方法,例如Generative Pre-trained Transformer(OpenAI GPT)((Radford et al., 2018),引入了最小特定任务参数,通过在下游任务上简单微调所有预训练权重。这两种方式在在预训练时共享相同的目标函数,都使用单向语言模型学习通用语言表达。

        我们认为,当前的技术限制了预训练的表示的能力,特别是对于微调方法。主要的限制是标准语言是单向的,这限制了在预训练过程中可以选择的结构。例如在OpenAIGPT中,作者使用了从左到右的结构,这里每个词只能处理Transformer的self-attention层中以前的词(Vaswani et al., 2017)。这样的限制对于句子级的任务来说是次优的,当将基于调优的方法应用于诸如回答问题之类的单词级任务时可能会十分不利,因为在这些任务中,从两个方向合并上下文是非常重要的。

        本文中,我们通过提出BERT(Bidirectional Encoder Representations from Transformers)优化基于微调的方法。受到Cloze task(Taylor, 1953)的启发,BERT通过使用masked language model(MLM)预训练目标缓解之前提到的单方向限制。MLM从输入里随机遮盖一些词语,目标是仅根据上下文预测掩蔽词的原始词汇id。与从左到右的语言模型预训练不同,MLM目标使得表示能够融合左右上下文,这使得我们能够预先训练一个深层双向转换器。除了 masked language model之外,我们还使用一个“下一句话预测”任务来联合训练文本对表示。本文贡献如下:

1、我们论证了语言表征的双向预训练的重要性。与使用单向语言预训练模型的 Radford et al. (2018)不同,BERT使用MLM来预训练双向深度表达。与Peters et al.(2018a)对比,使用独立训练的从左到右和从右到左的LMs的简单连接。

2、我们展示了预训练表达可以减少对需要大量手工设计的任务专用结构的需求。BERT是第一个基于微调的表达模型达在一系列句子级别与词语级别任务上达到SOTA的表现,优于许多特定于任务的体系结构。

3、BERT推进了11中NLP任务的SOTA。源码与预训练模型已开源:https://github.com/google-research/bert。

2、Related Work

        预训练通用语言表达有很长的研究历史,本章我们简要的回顾下那些广泛使用的方法。

2.1 Unsupervised Feature-based Approaches

        近十年来,学习广泛可接受的词表达都是活跃的研究领域,包括非神经网络(Brown et al., 1992;Ando and Zhang, 2005; Blitzer et al., 2006)与神经网络方法(Mikolov et al., 2013; Pennington et al.,2014)。预训练次嵌入式现代NLP系统不可分割的部分,为从头开始学习的嵌入式系统提供了显著的改进(Turian et al., 2010)。为了训练词嵌入向量,将从左到右的语言模型(Mnih and Hinton, 2009)与区分左右语境中的正确词语和错误词语两种目标进行结合(Mikolov et al., 2013)。

        这些方法已经被推广到更粗的粒度,例如句子嵌入(Kiros et al., 2015; Logeswaran and Lee,2018))或段落嵌入(Le and Mikolov,2014)。为了训练句子表达,之前的工作已经使用目标来对接下来候选的句子进行排序(Jernite et al., 2017; Logeswaran and Lee, 2018),通过上一句的表示,从左到右生成下个句子的单词(Kiros et al., 2015),或者去噪的自动编码器派生的目标(Hill et al., 2016)。

        ELMo与它之前的工作(Peters et al., 2017,2018a)从不同的维度概括了传统的词嵌入研究。他们用从左到右与从右到左的语言模型提取了上下文敏感的特征。每个词的上下文表示是左到右和右到左表示的级联。在将上下文相关的词嵌入与现有的特定于任务的体系结构集成时,ELMo提升了几个主要NLP的benchmark(Peters et al., 2018a),包括问答(Rajpurkar et al., 2016),情感分析(Socher et al., 2013),与实体命名分析(Tjong Kim Sang and De Meulder,2003)。Melamud et al. (2016)提出了通过使用LSTMs从左右上下文预测单个单词的任务来学习上下文表示。与ELMo类似,他们的模型是基于特征的,不是深度双向的。 Fedus et al. (2018)说明完形填空任务可以提高文本生成模型的鲁棒性。

2.2 Unsupervised Fine-tuning Approaches

        与基于特征的方法一样,第一种方法只对来自未标记文本的预先训练的单词嵌入参数起作用 (Collobert and Weston, 2008)。最近,产生上下文词表示的句子或文档编码器已经从未标记的文本中进行了预先训练,并为受监督的下游任务进行了微调(Dai and Le, 2015; Howard and Ruder, 2018; Radford et al., 2018)。这种方法的优势是只有少量的模型需要从头开始训练。至少部分由于这种优势,OpenAI GPT(Radford et al., 2018)在GLUE benchmark上达到了当前SOTA的结果(Wang et al., 2018a)。从左到右的语言模型与自动编码目标在许多类似预训练模型中使用(Howard and Ruder,2018; Radford et al., 2018; Dai and Le, 2015)。

2.3Transfer Learning from Supervised Data

        也有研究表明,从监督任务与大数据集的有效转移,如自然语言推理(Conneau et al.,2017)和机器翻译(McCann et al.,2017)。计算机视觉研究也证明了从大型预训练模型中转移学习的重要性,其中一个有效的方法是使用对ImageNet预训练模型进行微调(Deng et al., 2009; Yosinski et al., 2014)。

3、BERT

        我们在本节介绍BERT与它实现细节。我们的架构中有两个步骤:预训练与微调。在预训练过程中,模型是根据不用预训练任务在不同未标记数据中训练而来。微调时,BERT模型使用预训练参数初始化,并且利用下游任务的标注数据训练所有参数。每个下游任务都有独立的微调模型,尽管他们是由同一个预训练模型初始化而来。图1中问答例子作为本届的一个样例。

 

        BERT的一个显著特征是它跨不同任务的统一架构。预训练模型与最终下游任务模型只有很小的差异。

        Model Architechture。BERT的模型结构是一个多层双向变换编码器,它基于Vaswani等人(2017)的原始实现,并在tensor2tensor库中发布。因为transformers的使用已经变得很普遍,而且我们的实现几乎与最初的实现相同,所以我们将省略对模型架构的详尽的背景描述,并向读者推荐Vaswani等人(2017)以及优秀的指南,如“注释转换器”。

        本文中,我们将层的数量(例如,Transformer blocks)表示为L,隐藏层大小为H,自我注意头数量表示为A。我们主要报告两种不同大小模型的结果:BERTBASE(L=12,H=768,A=12,整体参数量为110M)与BERTLARGE(L=24,H=1024,A=16,整体参数量340M)。

        出于对比考虑,BERTBASE模型选择与OpenAI GPT相同的大小。然而,关键的是,BERT转换器使用双向的自我注意,而GPT转换器使用约束的自我注意,其中每个Token(符号)只能注意其左边的上下文。

        Input/Output Representations。为了使得BERT可以处理形式多样的下游任务,我们的输入表达可以是不规则的单个句子或者一对句子(例如<question,answer>)在一个Token序列。整个工作中,一个“句子”可以是任意一段连续的文本,而不是一个实际的语言句子。“序列”是指BERT的输入token序列,它可以是一个句子,也可以是两个句子组合在一起。

        我们使用带有30,000个token词汇表的WordPiece(Wu et al.,2016)嵌入。每个序列的第一个符号总是一个特殊的分类符号([CLS])。与此符号对应的最终隐藏状态用作分类任务的聚合序列表示。句子对打包到一起成为一个序列。我们用两种方法区分这些句子。首先,我们使用特殊符号([SEP])来区分。第二,我们在每个标记中加入一个学习嵌入,表明它是属于句子a还是句子B。如图1所示,我们将输入嵌入表达为E,特殊[CLS]符号的最终隐藏向量为,第i个输入符号的最终隐藏向量为

对于给定的符号,其输入表示是通过对相应的符号、段和位置嵌入求和来构造的。这种构造的视觉展示如图2。

 

3.1Pre-training BERT

        与 Peters et al. (2018a) 和 Radford et al.(2018)不同,我们不使用传统的从左到右或者从右到左的语言模型来预训练BERT。相反,我们使用两个非监督任务对BERT进行预训练,如本节所述。这个步骤在图1的左边展示。

        Task#1:Masked LM。直观上,我们有理由相信,深度双向模型比从左到右的模型或者从左到右和从右到左的模型的浅层连接更强大。不幸的是,标准的条件语言模型只能训练成从左到右或从右到左,因为双向条件作用可以让每个单词间接地“看到自己”,而且该模型可以在多层的上下文中轻松地预测目标单词。

        为了训练一个深层的双向表示,我们简单地随机屏蔽一些比例的输入符号,然后预测那些屏蔽的符号。我们把这个过程称为“masked LM”(MLM),尽管它在文献中经常被称为完形填空(Taylor, 1953)。在这种情况下,掩码标记对应的最终隐藏向量通过词汇表被输入到输出softmax中,就像在标准LM中一样。在我们所有的实验中,我们随机屏蔽了每个序列中15%的单词符号。与去噪自动编码器(Vincent et al., 2008)相比,我们只预测掩蔽字,而不是重建整个输入。

        虽然这允许我们获得双向的预训练模型,但缺点是我们在预训练和微调之间产生了不匹配,因为在微调期间不会出现[MASK]符号。为了缓解这种情况,我们并不总是使用实际的[MASK]符号来替换“掩码”单词。训练数据生成器随机选择15%的符号位置进行预测。如果选择了第i个符号,我们将第i个符号替代为(1)80%替代为[MASK](2)10%为随机符号(3)10%不改变符号。然后使用交叉熵函数与Ti来预测原来的符号。我们在附录C.2.中对比了这个过程的变化。

        Task#2:Next Sentence Prediction(NSP)。许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都是建立在理解两个句子之间的关系的基础上的,而语言建模并不能直接捕捉这些关系。为了训练一个理解句子关系的模型,我们预先训练了一个二值化的下一个句子预测任务,这个任务可以从任何单语语料库中轻松生成。为了训练模型,理解句子的关系,我们为一个关键句子pre-train预测任务,可以容易地从任何生成的单语corpusSpecifically,当选择的句子为每个pretraining例子a和B, B 50%的时间是实际的下一个句子,一个(标记为IsNext),和50%的时间是一个随机的句子从语料库(标记为NotNext)。如图1所示,C用于进行下一句预测(NSP)。尽管它很简单,但我们在5.1节中演示了针对该任务的预培训对QA和NLI都非常有益。NSP任务和Jernite et al. (2017)与Logeswaran and Lee (2018)的特征学习目标密切相关。然而,在以前的工作中,只有语句嵌入被传输到下游任务,在那里BERT传输所有的参数来初始化最终任务模型参数。

        Pre-training data。训练前的程序很大程度上遵循了现有的语言模型训练的文献。对于训练前的语料库,我们使用BooksCorpus(8亿单词)(Zhu et al.,2015)和英语维基百科(2500亿单词)。对于Wikipedia,我们只提取文本段落,而忽略列表、表格和标题。为了提取长连续序列,关键是要使用文档级的语料库,而不是像十亿词基准(Chelba et al., 2013)这样打乱的句子级语料库。

3.2Fine-tuning BERT

        Fine-tuning很简单,因为transformer中的自我注意机制允许BERT对许多下游任务(无论它们是单个文本还是文本对)进行建模,从而交换出适当的输入和输出。对于涉及文本对的应用,一个常见的模式是在应用双向交叉注意之前对文本对进行独立编码,如Parikh等(2016);Seo等(2017)。BERT使用了自我注意机制来统一这两个阶段,因为自我注意编码一个连接的文本对有效地包含了两个句子之间的双向交叉注意。

        对于每个任务,我们只需将特定于任务的输入和输出插入BERT中,并对所有参数进行端到端的微调。在输入端,来自预训练的句子A和句子B类似于(1)释义的句子对,(2)隐含的假设-前提对,(3)回答问题的问题-段落对,(4)文本分类或序列标记的简并文本-对。在输出中,符号表示形式被输入到一个输出层,用于进行符号级别的任务,例如序列标记或问题回答,而[CLS]表示形式被输入到一个输出层,用于分类,例如包含或情绪分析。

        与预训练相比,微调相对代价更小。本文中所有的结果都可以在一个单一的云TPU上最多1小时内复现,或者在GPU上最多几个小时,从完全相同的预训练模型开始。我们将在第4节的相应小节中描述特定于任务的细节。更多的细节见附录5。

4、Experiments

        本节中我们展示BERT在11个NLP任务上微调的结果。

4.1GLUE

        通用语言理解评估(GLUE)benchmark(Wang et al., 2018a)是一系列形式多样的自然语言理解任务。GLUE数据集的详细描述见附录B.1。

        为了在GLUE上进行微调,我们如第三节描述的那样表示输入序列(表示成单个句子或者句子对),使用第一个输入符号([CLS])对应的最终隐藏向量C∈RH作为集合表示。整个微调过程中引入的新参数就是分类层的权重 ,这里K表示标签的数量。我们利用C和W计算标准的分类损失值,例如 。

        我们使用batchsize为32,在GLUE上所有任务上都微调3个epochs。每个任务我们都利用Dev数据集在(5e-5, 4e-5, 3e-5, and 2e-5)之间选择最好的微调学习率。此外,BERTLARGE在小数据集的微调优势会不稳定,所有我们通过Dev数据集,进行多次随机重启,选择最佳模型。在一些随机重启中,我们使用相同的预训练checkpoint但是使用不同的微调数据shuffling与分类层初始化。

        结果在表1中展示。无论是BERTBASE还是BERTLARGE比所有其他系统在所有任务中的表现好了一大截,比当前SOTA分别取得了4.5%与7.0%的平均准确率优化。注意到BERTBASE与OpenAI GPT除了attention masking外模型的结构接近一致。对于最大且最广泛的GLUE任务来说,MNLI,BERT获取了4.6%的绝对精度改进。在官方的GLUE排行榜上,BERTLARGE取得了80.5的得分,相较来说,OpenAI GPT获得了72.5的得分。

        我们发现BERTLARGE在所有任务上都比BERTBASE有显著的提升,特别是那些只有少量训练样本的任务。在5.2节中更彻底的探索了模型大小的影响。

4.2SQuAD v1.1

       标准问答数据集(SQuAD v1.1)收集了10万众包问答对(Rajpurkar et al.,2016)。给出一个问题和一篇来自维基百科的包含答案的文章,任务是预测文章中答案的文本跨度。如图1所示,在问答任务中,我们将输入的问题和短文表示为单个压缩序列,其中问题使用A嵌入,短文使用B嵌入。我们在训练过程中仅引入一个开始向量与一个结束向量。单词i作为答案空间开始的概率被计算为Ti和S之间的点积,然后是段落中所有单词的softmax:。类似的公式用于回答跨度的末端。从i到j位置的待选跨度表示为,j≥i的最大得分跨度作为预测值。训练目标是正确的开始和结束位置的概率之和。我们在学习率为5e-5,batchsize为32的情况下训练3epoches。

       表2显示了顶级排行榜条目以及来自顶级已发布系统的结果(Seo et al.,2017; Clark and Gardner, 2018; Peters et al.,2018a; Hu et al., 2018)。SQuAD排名榜上的排名结果没有最新的开源系统描述,在训练系统时可以使用任何公共数据。因此,在对小队进行微调之前,我们首先对TriviaQA进行微调,从而在我们的系统中使用适度的数据扩充(Joshiet al.,2017)。我们的最佳表现系统在整体性能上比顶级排行榜系统高1.5F1,在单一系统性能上比顶级排行榜系统高1.3F1。事实上,我们的单个BERT模型在F1评分方面要优于最好集成系统。不使用TriviaQA微调数据,我们仅损失了0.1到0.4F1,还是比所有现有系统的表现好了一大截。

4.3SQuAD v2.0

        SQuAD 2.0任务扩展了SQuAD1.1问题的定义,允许在提供的段落中不存在简短的答案,从而使问题更加实际。

        我们使用一个简单的方法来扩展这个任务的SQuAD v1.1 BERT模型。我们将没有答案的问题视为在[CLS]符号处具有开始和结束的回答范围。开始和结束回答跨度位置的概率空间被扩展到包括[CLS]符号的位置。为了预测,我们比较无答案跨度的分数:对于最好的非空跨度得分 来说  。当         我们预测非空回答,这里阈值τ根据dev数据集最大化F1来选择。这个模型我们没有使用TriviaQA数据。我们在学习率是5e-5并且batchsize为48的情况下微调了两个epoches。

        与之前排行榜上所有和最好的公开结果(Sun et al., 2018;Wang et al., 2018b)的对比如表3,包括使用BERT作为组件之一的系统。我们观察到在所有之前最好的系统上有大于5.1的F1提升。

4.4SWAG

        使用Situations With Adversarial Generations(SWAG)数据集的情况包含113k个句子对完成示例,用于评估基于常识的推理(Zellers et al., 2018)。给出一个句子,任务是在四个选项中选择最合理的下一句。

        当在SWAG数据集上微调时,每个包含给定句子的连接(A句)和可能的延续(B句)。唯一引入的特定于任务的参数是一个向量,它与[CLS]符号表示形式C的点积表示每个选择的分数,该分数使用softmax层进行标准化。

        我们用学习率为2e-5,batchsize为16的参数微调了3个epoches。结果在表4中展示。BERTLARGE比作者的baseline系统ESIM+ELMo提升了27.1%,比OpenAI GPT提升了8.3%。

5、Ablation Studies

        在本节中,我们将对BERT的多个方面进行消融实验,以便更好地了解它们的相对重要性。额外消融实验结果可以在附件C中找到。

5.1Effect of Pre-training Tasks

        通过使用与BERTBASE完全相同的训练前数据、微调方案和超参数来评估两个训练前目标,我们证明了BERT的深度双向性的重要性。

        No NSP:训练使用“masked LM”(MLM)但没有“下一句话预测”(NSP)任务的模型。

        LTR&No NSP:使用标准的从左到右(LTR) LM,而不是MLM进行训练的左上下文模型。在微调过程中还使用了单左边的约束,因为取消它会引入训练/微调不匹配从而降低下游性能。另外,该模型在没有NSP任务的情况下进行了预训练。这与OpenAI GPT有直接的可比性,但是使用了更大的训练数据集、输入表示和微调方案。

        我们首先实验了NSP任务带来的影响。在表5,我们发现移除NSP会显著影响QNLI、MNLI和SQuAD1.1的表现。接下来,我们通过比较“无NSP”和“LTR & No NSP”来评估训练双向表达的影响。LTR模型在所有任务上的表现都比MLM模型差,在MRPC和SQuAD上有较大的下降。

        对于SQuAD来说,很明显,LTR模型在符号预测方面表现很差,因为符号级隐藏状态没有右侧上下文。为了增强LTR系统的可靠性,我们在其上增加了一个随机初始化的BiLSTM。这确实显著地改善了SQuAD的结果,但结果仍然比那些预先训练的双向模型差得多。BiLSTM会影响GLUE任务的性能。

        我们认识到,也可以训练单独的LTR和RTL模型,并将每个符号表示为两个模型的连接,就像ELMo所做的那样。然而:(a)这是单一双向模式的两倍;(b)这对于QA之类的任务来说是不直观的,因为RTL模型不能将答案限定在问题上;(c)这是严格地说,它是没有强大的深双向模型,因为它可以使用左右上下文在每一层。

5.2Effect of Model Size

        本节中我们探索模型大小对微调准确率的影响。我们使用不同的层数、隐藏单元和注意力头来训练许多BERT模型,而使用与前面描述的相同的超参数和训练过程。

        在选定GLUE任务的结果如图6所示。表中报告了5个随机重启的微调在Dev Set上的平均准确率。我们可以看到,更大的模型可以在所有四个数据集上带来严格的准确性改进,甚至对于只有3600个标记的训练示例的MRPC来说也是如此,这与训练前的任务有很大的不同。也许令人惊讶的是,我们能够在模型的基础上实现如此显著的改进,这些模型相对于现有的文献来说已经相当大了。例如,在文献Vaswani et al. (2017)探索的最大Transformer是用于编码的参数量为100M(L=6,H=1024,A=16),我们能找到最大Transformer的有235M参数(L=64,H=512,A=2)(Al-Rfou et al., 2018)。与值对比,BERTBASE包含110M参数,BERTLARGE包含340M参数。

        人们早就知道,增加模型的大小会导致大规模任务的持续改进,如机器翻译和语言建模,这一点可以通过表6所示的训练数据的LM复杂性得到证明。然而,我们相信,这是第一个令人信服地证明,如果模型经过充分的预训练,向极端模型尺寸的扩展也会在非常小的任务中带来巨大的改进的工作。Peters et al.(2018 b)提出了好坏参半的结果在下游任务的影响增加预训练 bi-LM大小从2到4层和Melamud et al。(2016)中提到的传递,增加隐藏的维度的大小从200年到600年,但进一步增加到1000没有进一步的改进。之前这两个工作使用基于特征的方法——我们假设当模型调整直接在下游任务和只使用少量的随机初始化其他参数,特定于任务的模型可以受益于更大、更富有表现力的预训练表示即使下游任务数据非常小。

5.3Feature-based Approach with BERT

        到目前为止,所有的BERT结果都使用了微调方法,其中一个简单的分类层被添加到预先训练的模型中,所有的参数都在一个下游任务中被联合微调。然而,基于特征的方法,即从预训练的模型中提取固定的特征,具有一定的优势。首先,并不是所有的任务都可以很轻松地用转换器编码器体系结构表示,因此需要添加特定于任务的模型体系结构。其次,预先计算一次训练数据的昂贵表示,然后在此表示的基础上使用更便宜的模型运行许多实验,这在计算上有很大的好处。

        在本节中,我们通过将BERT应用于名为CoNLL-2003的方法来比较这两种方法实体识别(NER)任务(Tjong Kim Sang和De Meulder, 2003)。在BERT的输入中,我们使用了一个保留大小写的单词模型,并包含了数据提供的最大文档上下文。按照标准实验方法,我们将其作为一个标记任务,但在输出中不使用CRF层。我们使用第一个子符号的表示作为在NER标签集上的标记级分类器的输入。

        为了简化微调方法,我们应用基于特征的方法,从一个或多个层提取激活,而不微调BERT的任何参数。这些上下文嵌入被用作在分类层之前随机初始化的两层768维BiLSTM的输入。

        结果见表7。BERTLARGE表现与SOTA相当。性能最好的方法是将来自预训练的Transformer的前四个隐藏层的符号表示连接起来,这只比微调整个模型低0.3 F1。这表明BERT对于微调和基于特征的方法都是有效的。

6、Conclusion

        最近由语言模型转移学习带来的经验改进表明,丰富的、无监督的前训练是许多语言理解系统的组成部分。特别是,这些结果使得即使是低资源的任务也可以从深层的单向架构中获益。我们的主要贡献是进一步将这些发现推广到深层的双向架构,允许相同的预训练模型成功地处理广泛的NLP任务。

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bert: Pre-training of Deep Bidirectional Transformers for Language Understanding 的相关文章

随机推荐

  • python爬虫之JS混淆加密、字体反爬

    1 JS混淆加密 我们之前爬取有道翻译的翻译内容时 我们通过fiddler抓取url地址时 我们发现如果我们直接将相关参数传入 会报错 只是因为 某些参数是变化的 因此 我们需要解读JS文件 取得相关参数的生成算法 利用python生成参数
  • 电流源等效噪声公式

  • 华为OD机试真题-单词倒序【2023Q1】【JAVA、Python、C++】

    题目描述 输入单行英文句子 里面包含英文字母 空格以及 三种标点符号 请将句子内每个单词进行倒序 并输出倒序后的语句 输入描述 输入字符串S S的长度1 N 100 输出描述 输出逆序后的字符串 补充说明 标点符号左右的空格 0 单词间空格
  • obb vtk 定点坐标_vtk学习笔记 --- 显示坐标系

    有的时候 在显示三维物体时 我们希望知道当前场景对应的坐标系位置或者方向 这样在旋转物体的时候 就能够很清楚地看到当前正对这视野的是什么面xy平面 还是y轴等信息了 在vtk库中有一个vtkAxesActor负责显示坐标系 在查阅了vtk的
  • OpenMAX学习资料收集

    OpenMAX框架拆解与实现 OpenMax OMX 开发入门 OpenMax人口 OpenMAX IL spec手册下载 https www khronos org files openmax il spec 1 0 pdf OpenMA
  • 重要思想总结

    重要思想总结 求二进制序列中1的个数 检测num中某一位是0还是1 不创建临时变量交换值 判断数值的位数 判断数值的位数 获取数值的每一位数 把一个整数的二进制位的奇数位和偶数位交换 将个位数 十位数 百位数 组成一个完整的数 找素数 将秒
  • centos dhcp服务器文件,centos dhcp服务器配置

    centos dhcp服务器配置 内容精选 换一换 简要介绍PHP FPM PHP FastCGI Process Manager PHP FastCGI进程管理器 用于管理PHP进程池的软件 用于接受web服务器的请求 PHP FPM提供
  • Django错误(1146,Table 'xxxx.django_session' doesn't exist")

    原文链接 https blog csdn net BlackListMan article details 82620144 出现这种错误先检查 数据库连接设置是否成功 在setting py同级文件中的 init py 中是否添加了数据库
  • SecureCRT遇到打开错误的时候

    我的解决办法 因为我用的是安装版的 我的操作是 1 删除注册表 可查 2 关闭所有的关于securecrt的进程 通过 任务管理器 的 详细信息 仔细检查关闭 3 一般就搞定了 4 参考文档 http blog csdn net lishe
  • MyBatis Plus多表联查方法

    MyBatis Plus是一款针对MyBatis框架的增强工具 它提供了很多方便的方法来实现多表联查 你可以使用MyBatis Plus的selectPage方法来实现多表联查 该方法接收一个QueryWrapper参数 你可以在Query
  • keyCode键盘码

    下次记不住了来查查吧 keyCode 8 BackSpace BackSpace keyCode 9 Tab Tab keyCode 12 Clear keyCode 13 Enter keyCode 16 Shift L keyCode
  • linux启动kvm虚拟机,如何在Linux中使用KVM(基于内核的虚拟机)创建虚拟机 - 第1部分...

    使用KVM在Linux中创建虚拟机 第1部分 本教程讨论KVM介绍 部署以及如何使用它在RedHat为基础的分布 如RHEL CentOS7和Fedora 21来创建虚拟机 什么是KVM KVM或 基于内核的虚拟机 是面向Linux的英特尔
  • git 恢复本地代码到仓库版本_Repo和Git 版本管理常用命令总结

    1 服务器版本下载 repo init u git 192 168 1 11 i700t 60501010 platform manifest git b froyo almond m M76XXTSNCJNLYA60501010 xml
  • Vue2学习第六篇:事件处理

    一 事件的基本使用 1 使用v on xxx 或 xxx 绑定事件 其中xxx是事件名 2 事件的回调需要配置在methods对象中 最终会在vm上 3 methods中配置的函数 不要用箭头函数 否则this就不是vm了 4 method
  • 【C++初阶】仿函数和priority_queue的模拟实现(附源码)

    一 仿函数 仿函数 顾名思义就是模仿函数 它其实是一个类 类里面重载了运算符 在调用这个重载的运算符时 让我们感觉是调用函数一样 可以说相当于C语言里的函数指针一样 但是函数指针的可读性不好 不如仿函数 仿函数的特点 1 仿函数即使定义相同
  • 4.1.3 英文单词的分割符验证

    在英文文本中 各个英文单词被分隔符所分开 这些分隔符包括英文标点符号 空白字符等 其中 英文标点符号比较多 如 逗号 点号 问号 冒号 分号 单引号 感叹号 双引号 连接号 破折号 省略号 小括号 中括号 大括号 所有格符号 等 在英文文本
  • python中的并行处理(多线程)几种方式(Pool, Parallel, threading)

    1 Pool from multiprocessing import Pool import os def worker arg print begin s str arg if name main po Pool 10 定义进程池 最大进
  • Android系统apps之Setting的修改和设置

    由于接到了一个修改系统app Settings条目是需求 接着也看到了一个博主的文章http blog csdn net wangjinyu501 article details 22077803 这篇文章写的很好 基本满足了需求 我这里再
  • 《暗时间》阅读笔记一

    推荐阅读原著 https book douban com subject 6709809 https book douban com subject 6709809
  • Bert: Pre-training of Deep Bidirectional Transformers for Language Understanding

    Abstract 我们介绍了一种语言表达模型称为BERT 也就是Transformer的双边编码表示 与当前语言表达模型不同 Peters et al 2018a Radford et al 2018 BERT设计通过考虑所有层左右上下文对