当前位置:网站首页>BERT 文章翻译
BERT 文章翻译
2022-07-23 07:38:00 【ZhangTuTu丶】
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Abstract
我们介绍了一种新的语言表示模型,称为BERT(Bidirectional Encoder Representations from Transformers)。与最近的语言表示模型(Peters等人,2018a;Radford等人,2018)不同,BERT旨在通过在所有层中联合调节左右语境,从未标记文本中预训练深度双向表示。因此,只需增加一个输出层,就可以对预训练的BERT模型进行微调,从而为广泛的任务(如问答和语言推理)创建最先进的模型,而无需对特定于任务的架构进行实质性修改。
BERT概念简单,经验丰富。它在11个自然语言处理任务上获得了最新的结果,包括将GLUE分数提高到80.5%(绝对提高7.7%),MultiNLI准确性提高到86.7%(绝对提高4.6%),将SQuAD 1.1问题答案的TEST F1提高到93.2(绝对提高了1.5分),将SQuAD 2.0的TEST F1提高到83.1(绝对提高了5.1分)。
1.Introduction
语言模型预训练对于改善许多自然语言处理任务是有效的。这些任务包括句子级任务(sequence-level task),如自然语言推理和释义,其目的是通过整体分析来预测句子之间的关系。 作为诸如命名实体识别和问题回答之类的token-level task,其中需要模型以在token级上产生细粒度的输出。
将预训练的语言表示应用于下游任务有两种现有策略:基于特征(feature-based)和微调(fine-tuning)。基于特征的方法,例如ELMo,使用特定于任务的架构,其中包括预训练的表示作为附加特征。微调方法,例如生成预训练Transformer(OpenAI GPT),引入了最小的任务特定参数,并通过简单微调所有预训练参数对下游任务进行训练。这两种方法在预训练期间具有相同的目标函数,它们使用单向语言模型来学习一般的语言表示。
我们认为,当前的技术限制了预训练(pre-trained)表示的能力,特别是对于微调方法。主要限制是标准语言模型是单向的,这限制了在预训练期间可以使用的架构的选择。例如,在OpenAI GPT中,作者使用了左向右架构,其中每个token只能关注Transformer自注意力层中的先前token。这种限制对于句子级任务来说不是最优的,并且在将基于微调的方法应用于token级任务(如问答)时可能非常有害,在问答中,从两个方向合并上下文至关重要。
在本文中,我们通过提出BERT:Bidirectional Encoder Representations form Transformers。受Cloze任务的启发,BERT通过使用“遮掩语言模型”(MLM)预训练目标来缓解前面提到的单向性约束。屏蔽语言模型随机屏蔽输入中的一些token,目标是仅根据其上下文预测屏蔽词的原始词汇ID 。与从左到右语言模型预训练不同,MLM目标使表示能够融合左右上下文语境,这使我们能够预训练深度双向Transformer。除了掩蔽语言模型外,我们还使用了“下一句预测”任务,该任务联合预训练文本对表示。本文的贡献如下:
- 我们证明了双向预训练对于语言表征的重要性。与Radford等人(2018)他使用单向语言模型进行预训练不同,BERT使用掩码语言模型来实现预训练的深度双向表示。这也与Peters等人(2018a)相反,Peters等人使用了独立训练的从左到右和从右到左LMs的浅连接。
- 我们表明,预先训练的表示减少了对许多高度工程化的任务特定架构的需求。BERT是第一个基于微调(fine-tuning)的表示模型,它在一系列句子级(sentence-level)和token级任务上实现了最先进的性能,优于许多特定于任务的架构。
- BERT推动了11项NLP任务的发展。 可以在https://github.com/ google-research / bert上找到代码和经过预先训练的模型。
2 Related Work
一般语言表征的预训练有着悠久的历史,我们在本节中简要回顾了最广泛使用的方法。
2.1 Unsupervised Feature-based Approaches
几十年来,学习广泛适用的单词表示一直是一个活跃的研究领域,包括非神经网络方法(Brown等人,1992;Ando和Zhang,2005;Blitzer等人,2006)和神经方法(Mikolov等人,2013;Pennington等人,2014)。预先训练的单词嵌入是现代NLP系统的一个组成部分,与从头学习的嵌入相比,它提供了显著的改进(Turian等人,2010)。为了预训练单词嵌入向量,使用了从左到右的语言建模目标(Mnih和Hinton,2009),以及在左右语境中区分正确单词和错误单词的目标(Mikolov等人,2013)。
这些方法已被推广到粗粒度,例如句子嵌入(Kiros等人,2015;Logeswaran和Lee,2018)或段落嵌入(Le和Mikolov,2014)。为了训练句子表征,之前的工作使用了目标对候选下一个句子进行排序(Jernite等人,2017;Logeswaran和Lee,2018),根据前一个句子的表征从左到右生成下一个句子单词(Kiros等人,2015),或消噪自编码器衍生的目标(Hill等人,2016)。
ELMo及其前身(Peters等人,2017,2018a)从不同维度概括了传统的单词嵌入研究。它们从从左到右和从右到左的语言模型中提取上下文敏感特征。每个标记的上下文表示是从左到右和从右到左表示的串联。在将语境词嵌入与现有任务特定架构相结合时,ELMo提出了几个主要的自然语言处理基准(Peters等人,2018a),包括问答(Rajpurkar等人,2016)、情感分析(Socher等人,2013)和命名实体识别(Tjong Kim Sang和De Meulder,2003)。Melamud等人(2016年)提出通过使用LSTM从左右语境预测单个单词的任务来学习语境表征。与ELMo类似,他们的模型是基于特征的,而不是深度双向的。Fedus等人(2018)表明,完形填空任务可用于提高文本生成模型的稳健性。
2.2 Unsupervised Fine-tuning Approaches
与基于特征的方法一样,第一种方法仅在未标记文本中预训练单词嵌入参数的方向上工作(Collobert和Weston,2008)
最近,产生上下文标记表示的句子或文档编码器已从未标记文本中预训练,并针对监督的下游任务进行微调(Dai和Le,2015;Howard和Ruder,2018;Radford等人,2018)。这些方法的优点是很少需要从头开始学习参数。至少部分由于这一优势,OpenAI GPT(Radford等人,2018)在GLUE基准测试的许多句子级任务上取得了之前最先进的结果(王等人,2018a)。从左到右的语言建模和自动编码器目标已用于此类模型的预训练(Howard和Ruder,2018;Radford等人,2018;Dai和Le,2015)。
2.3 Transfer Learning from Supervised Data
也有研究表明,使用大型数据集可以有效地从监督任务中转移,例如自然语言推理(Conneau等人,2017)和机器翻译(McCann等人,2017)。计算机视觉研究还证明了从大型预训练模型进行转移学习的重要性,其中一个有效的方法是微调使用ImageNet预训练的模型(Deng等人,2009;Y osinski等人,2014)。
3 BERT
本节介绍了BERT及其详细实现。在我们的框架中有两个步骤:预训练和微调。在预训练期间,模型在不同的预训练任务中基于未标记数据进行训练。对于微调,首先使用预先训练的参数初始化BERT模型,并使用来自下游任务的标记数据微调所有参数。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。图1中的问答示例将作为本节的运行示例。
BERT的一个显著特点是其跨不同任务的统一结构。预训练结构和最终下游架构之间存在微小差异。
Figure 1:BERT的整体预训练和微调程序。除了输出层之外,在预训练和微调中使用相同的结构。相同的预训练模型参数用于初始化不同下游任务的模型。在微调过程中,对所有参数进行微调。[CLS]是添加在每个输入示例前面的特殊符号,[SEP]是一个特殊的分隔符标记(例如,分隔问题/答案)。
Model Architecture BERT的模型结构是一种多层双向Transformer编码器,基于Vaswani等人(2017)中描述的原始实现,并在tensor2tensor库中发布。由于Transformers的使用已变得普遍 1 ^1 1,并且我们的实现几乎与原始版本相同,因此我们将省略对模型架构的详尽背景描述,并向读者介绍V aswani等人(2017)以及优秀的阐述,如“The Annoteated Tranformer” 2 ^2 2。【Tranformer具体的论文详解可以参见这篇文章】
在这项工作中,我们将层数(即Transformers 块)表示为L,隐藏大小表示为H,自注意力头的数量表示为A 3 ^3 3。3我们主要报告了两种模型尺寸的结果:BERT(BASE)(L=12,H=768,A=12,总参数=110M)和BERT(LARGE)(L=24,H=1024,A=16,总参数=340M)。
为了进行比较,选择BERT(BASE)的模型尺寸与OpenAI GPT相同。然而,关键的是,BERT使用双向自注意力,而GPT变换器使用约束自注意力,其中每个token只能关注其左侧的上下文 4 ^4 4。
- https://github.com/tensorflow/tensor2tensor
- http://nlp.seas.harvard.edu/2018/04/03/attention.html
- 在所有情况下,我们将前馈滤波器大小设置为4H,即,对于H=768,为3072,对于H=1024,为4096。
- (left-context-only version)被称为“Transformer decoder”,因为它可以用于文本生成)*
Input/Output Representations 为了使BERT处理各种下游任务,我们的输入表示能够在一个token序列中明确表示单个句子和一对句子(例如,Quesition,Answer)。在本研究中,“句子”可以是连续文本的任意范围,而不是实际的语言句子。“序列”是指BERT的输入token序列,可以是一个句子或两个句子组合在一起。
我们使用了30000个token词汇表的词条嵌入(Wu等人,2016)。每个序列的第一个token总是一个特殊的分类令牌([CLS])。与该token对应的最终隐藏状态用作分类任务的聚合序列表示。句子对被压缩成一个序列。我们用两种方式区分句子。首先,我们用一个特殊标记([SEP])将它们分开。其次,我们向每个标记添加学习嵌入,指示其属于句子A还是句子B。如图1所示,我们将输入嵌入表示为E,特殊[CLS]标记的最终隐藏向量表示为 C ∈ R H C\in\mathbb R^H C∈RH, i t h i^{th} ith输入token的最终隐藏向量为 T i ∈ R H T_i\in\mathbb R^H Ti∈RH。
对于给定的token,其输入表示是通过对相应的token、段和位置嵌入求和来构造的。这种结构的可视化如图2所示。

图2:BERT输入表示。输入token是令牌嵌入、分段嵌入和位置嵌入的总和。
3.1 Pre-training BERT
与Peters等人(2018a)和Radford等人(2018)不同,我们不使用传统的从左到右或从右到左的语言模型来预训练BERT。相反,我们使用两个无监督任务预训练BERT,如本节所述。这一步如图1左侧所示。
Task #1: Masked LM 直观地说,有理由相信深度双向模型比从左到右的模型或从左到右和从右到左的模型的浅连接更强大。不幸的是,标准的条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词间接地“看到自己”,并且该模型可以在多层上下文中轻松预测目标单词。
为了训练深度双向表示,我们只需随机遮掩某些百分比的输入token,然后预测这些屏蔽token。我们将这一过程称为“掩码LM”(MLM),尽管在文献中它通常被称为完形填空(Taylor,1953)。在这种情况下,与标准的LM一样,与掩码token相对应的最终隐藏向量被馈送到词汇表上的输出softmax中,。在我们的所有实验中,我们随机屏蔽了每个序列中15%的WordPiece标记。与去噪自动编码器(Vincent等人,2008)不同,我们只预测掩盖的文字,而不是重建整个输入。
虽然这使我们能够获得双向预训练模型,但缺点是我们在预训练和微调之间创建了不匹配,因为在微调过程中不会出现[mask]标记。为了缓解这种情况,我们并不总是用实际的[mask]标记替换“masked”单词。训练数据生成器随机选择15%的令牌位置进行预测。如果选择了第i个令牌,我们将第i个令牌替换为(1)80%概率替换为[MASK]令牌(2)10%概率随机替换为其他token(3)10%概率不进行替换。然后, T i T_i Ti将用于预测具有交叉熵损失的原始token。我们在附录C.2中比较了该程序的变化。
C.2附录如下:
掩码LM和掩码过程假设未标记的句子是:my dog is hairy,在随机掩蔽过程中,我们选择了第4个token(对应于hairy),我们的掩蔽过程可以通过以下公式进一步说明:
80% of the time: Replace the word with the [MASK] token, e.g., my dog is hairy → my dog is [MASK]
10% of the time: Replace the word with a random word, e.g., my dog is hairy → my dog is apple10% of the time: Keep the word unchanged, e.g., my dog is hairy → my dog is hairy. The purpose of this is to bias the representation towards the actual observed word.
Task #2: Next Sentence Prediction (NSP) 许多重要的下游任务,如问答(Q&A)和自然语言推理(NLI)都是基于理解两个句子之间的关系,而语言建模并不能直接捕捉到这些关系。为了训练一个理解句子关系的模型,我们预先训练了一个二值化的下一个句子预测任务,该任务可以从任何单语语料库生成。具体来说,当为每个预训练示例选择句子A和B时,50%的时间B是A后面的实际下一个句子(标记为IsNext),50%的时间是语料库中的随机句子(标记为NotNext)。如图1所示,C用于下一句预测(NSP) 5 ^5 5。尽管其简单,但我们在第5.1节中证明,针对该任务的预培训对QA和NLI都非常有益 6 ^6 6。
- The final model achieves 97%-98% accuracy on NSP.
- The vector C is not a meaningful sentence representation
without fine-tuning, since it was trained with NSP
NSP任务与Jernite等人(2017)以及Logeswaran和Lee(2018)中使用的表征学习目标密切相关。然而,在之前的工作中,只有句子嵌入被转移到下游任务,其中BERT传输所有参数以初始化结束任务模型参数。
Pre-training data 预训练过程在很大程度上遵循了关于语言模型预训练的现有文献。对于预训练语料库,我们使用了BooksCorpus(800M单词)(朱等人,2015)和English Wikipedia(25000M单词)。对于Wikipedia,我们只提取文本段落,而忽略列表、表格和标题。为了提取长的连续序列,关键是使用文档级语料库,而不是混合句子级语料库,如BillionWord Benchmark(Chelba等人,2013)。
3.2 Fine-tuning BERT
微调很简单,因为Transformer中的自注意力机制允许BERT对许多下游任务进行建模,无论它们是涉及单个文本还是通过交换适当的输入和输出来涉及文本对。对于涉及文本对的应用,常见的模式是在应用双向交叉注意之前独立编码文本对,例如Parikh等人(2016);Seo等人(2017年)。相反,BERT使用自注意力机制来统一这两个阶段,因为编码具有自注意力的串联文本对有效地包括两个句子之间的双向交叉注意力。
对于每个任务,我们只需将特定于任务的输入和输出插入到BERT中,并端到端微调所有参数。在输入端,预训练的句子A和句子B类似于(1)释义中的句子对,(2)蕴涵假设前提对,(3)问答中的问题的疑问句对,以及(4)退化文本 t e x t − ∅ text-\emptyset text−∅ 在文本分类或序列标记中配对。在输出时,token表示被馈送到token-level级的输出层,例如序列标记或问答,而[CLS]表示被馈送到输出层,用于分类,例如需求或情感分析。
与预训练相比,微调相对容易。从完全相同的预训练模型开始,本文中的所有结果最多可以在单个云TPU上复制1小时,或在GPU上复制几个小时 7 ^7 7。我们在第4节的相应小节中描述了特定于任务的细节。更多细节见附录A.5。
例如,可以在单个云TPU上在大约30分钟内训练BERT团队模型,以实现91.0%的开发F1分数。
4 Experiments
在本节中,我们介绍了11个非线性规划任务的BERT微调结果。
4.1 GLUE
通用语言理解评估(GLUE)基准(wang等人,2018a)是各种自然语言理解任务的集合。GLUE数据集的详细说明见附录B.1。
为了对GLUE进行微调,我们如第3节所述表示输入序列(针对单个句子或句子对),并使用最终隐藏向量 C ∈ R H C\in\mathbb R^H C∈RH中的第一个标记([CLS])
作为句子表示,。微调期间引入的唯一新参数是分类层权重 W ∈ R K × H W\in\mathbb R^{K×H} W∈RK×H,其中K是分类的数量。我们用C和W计算标准分类损失,即 l o g ( s o f t m a x ( C W T ) ) log(softmax(CW^T)) log(softmax(CWT))。
我们使用32的批量大小,并对所有GLUE任务的数据进行3个epoch的微调。对于每个任务,我们在开发集上选择最佳微调学习速率( 5 e − 5 5e-5 5e−5、 4 e − 5 4e-5 4e−5、 3 e − 5 3e-5 3e−5和 2 e − 5 2e-5 2e−5)。此外,对于Bert(lagle),我们发现微调有时在小数据集上不稳定,因此我们运行了几次随机重启,并在验证记集上选择了最佳模型。对于随机重启,我们使用相同的预训练检查点,但执行不同的微调数据打乱和分类器层初始化 9 ^9 9。
- 我们注意到,GLUE 发布的数据集不包括测试的标签,所以我们分别将 B E R T B A S E BERT_{BASE} BERTBASE和 B E R T L A R G E BERT_{LARGE} BERTLARGE向 GLUE 评估服务器提交结果。
结果如表1所示。 B E R T B A S E BERT_{BASE} BERTBASE和 B E R T L A R G E BERT_{LARGE} BERTLARGE在所有任务上都优于所有系统,在现有技术的基础上分别获得了4.5%和7.0%的平均精度改进。请注意,除了注意力掩蔽外, B E R T B A S E BERT_{BASE} BERTBASE和OpenAI GPT在模型架构方面几乎相同。对于最大且报道最广泛的GLUE任务MNLI,BERT获得了4.6%的绝对精度提高。在官方的GLUE排行榜10中,Bertlagle获得了80.5分,而OpenAI GPT相比截至本文写作时只获得了72.8分。
Table 1:GLUE 测试结果,由 GLUE 评估服务器评分。每个任务下面的数字表示训练示例的数量。“Average”列与官方 GLUE 评分略有不同,因为我们排除了有问题的 WNLI 数据集。OpenAI GPT = (L=12, H=768, A=12); BERTBASE = (L=12, H=768, A=12); BERTLARGE = (L=24, H=1024, A=16)。BERT 和 OpenAI GPT 都是单模型,单任务。所有结果可以从 https://gluebenchmark.com/leaderboard 和 https://blog.openai.com/language-unsupervised/ 获得。
我们发现, B E R T L A R G E BERT_{LARGE} BERTLARGE在所有任务中都显著优于 B E R T B A S E BERT_{BASE} BERTBASE,尤其是那些训练数据很少的任务。第5.2节更深入地探讨了模型尺寸的影响。
4.2 SQuAD v1.1
斯坦福问答数据集(SQuAD v1.1)是10万个众包问答对的集合(Rajpurkar等人,2016)。给定一个问题和包含答案的维基百科文章,任务是预测这段文字的区间。例如:
输入问题:
Where do water droplets collide with ice crystals to form precipitation?
输入段落
… Precipitation forms as smaller droplets coalesce via collision with other rain drops or ice crystals within a cloud. …
输出答案
within a cloud
这种区间预测任务与 GLUE 的序列分类任务有很大的区别,但是我们能够让 BERT 以一种直接的方式在 SQuAD 上运行。就像在 GLUE 中,我们将输入问题和段落表示为一个单一打包序列(packed sequence),其中问题使用 A 嵌入,段落使用 B 嵌入。在微调模型期间唯一需要学习的新参数是区间开始向量 S ∈ R H S\in\mathbb R^H S∈RH和区间结束向量 E ∈ R H E\in\mathbb R^H E∈RH。让 BERT 模型最后一层的隐藏向量的第 i t h i_{th} ith输入标记被表示为 T i ∈ R H T_i\in\mathbb R^H Ti∈RH。如图 3(c)可视化的表示。然后,计算单词 i i i作为答案区间开始的概率,它是 T i T_i Ti和 S S S之间的点积并除以该段落所有单词的结果之后再 softmax: P i = e S ⋅ T i ∑ e S ⋅ T j P_i = \frac{e^{S·T_i}}{\sum e^{S·T_j}} Pi=∑eS⋅TjeS⋅Ti同样的式子用来计算单词作为答案区间的结束的概率,并采用得分最高的区间作为预测结果。训练目标是正确的开始和结束位置的对数可能性。
我们使用 5 e − 5 5e-5 5e−5的学习率,32 的批次大小训练模型 3 个周期。在模型推断期间,因为结束位置与开始位置没有条件关系,我们增加了结束位置必须在开始位置之后的条件,但没有使用其他启发式。为了方便评估,把序列化后的标记区间对齐回原始未序列化的输入。
表2显示了顶级排行榜条目以及顶级发布系统的结果(Seo等人,2017;Clark和Gardner,2018;Peters等人,2018a;Hu等人,2018)。排行榜上的排名靠前的结果没有最新的描述 1 1 ^11 11,并且允许在训练其系统时使用任何公共数据。因此,我们在我们的系统中使用适度的数据扩充,在对团队进行微调之前,首先对TriviaQA进行微调(Joshi等人,2017)。
11.QANet在Y u等人(2018)中进行了描述,但该系统在发布后有了很大的改进
我们表现最好的模型在集成模型排名中上比排名第一模型高出 1.5 个 F1 值,在一个单模型排行榜中比排名第一的模型高出 1.7(译者注:原文是 1.3) 个 F1 值。实际上,我们的单模型 BERT 就比最优的集成模型表现更优。即使只在 SQuAD 数据集上(不用 TriviaQA 数据集)我们只损失 0.1-0.4 个 F1 值,而且我们的模型输出结果仍然比现有模型的表现好很多。
表 2:SQuAD 结果。Ensemble BERT 是使用不同的预训练模型检查点和微调种子的 7x 模型。

4.3 SQuAD v2.0
为了评估标记任务的性能,我们在 CoNLL 2003 命名实体识别数据集(NER Named Entity Recognition)上微调 BERT 模型。该数据集由 200k 个训练单词组成,这些训练词被标注为人员、组织、地点、杂项或其他(无命名实体)。
为了微调,我们将最后一层每个单词的隐藏表示 T i ∈ R H T_i\in\mathbb R^{H} Ti∈RH
送入一个在 NER 标签集合的分类层。每个单词的分类不以周围预测为条件(换句话说,没有自回归和没有 CRF)。为了与词块(WordPiece)序列化相适应,我们把 CoNLI-序列化的(CoNLL-tokenized)的输入词输入我们的 WordPiece 序列化器,然后使用这些隐藏状态相对应的第一个块而不用预测标记为 X的块。例如:
由于单词块序列化边界是输入中已知的一部分,因此对训练和测试都要这样做。
结果如表 3 所示。 B E R T L A R G E BERT_{LARGE} BERTLARGE优于现存的最优模型,使用多任务学习的交叉视野训练 (Clark et al., 2018),CoNLL-2003 命名实体识别测试集上高 0.2 F1 值。
表 3:CoNLL-2003 命名实体识别。模型超参数使用验证集进行选择,报告的验证集和测试分数使用这些超参数进行随机五次以上的实验然后取实验的平均结果。
4.4 SWAG
Adversarial Generations(SWAG)数据集由 113k 个句子对组合而成,用于评估基于常识的推理 (Zellers et al., 2018)。
给出一个来自视频字幕数据集的句子,任务是在四个选项中选择最合理的延续。例如:
为 SWAG 数据集调整 BERT 模型的方式与为 GLUE 数据集调整的方式相似。对于每个例子,我们构造四个输入序列,每一个都连接给定的句子(句子A)和一个可能的延续(句子B)。唯一的特定于任务的参数是我们引入向量 V ∈ R H V\in\mathbb R^{H} V∈RH,然后它点乘最后层的句子总表示 C i ∈ R H C_i\in\mathbb R^H Ci∈RH为每一个选择 i i i产生一个分数。概率分布为 softmax 这四个选择:
P i = e V ⋅ C i s u m j 4 e S ⋅ C j P_i = \frac{e^{V·C_i}}{sum_{j}^4e^{S·C_j}} Pi=sumj4eS⋅CjeV⋅Ci
我们使用 2 e − 5 2e-52e−5 的学习率,16 的批次大小训练模型 3 个周期。结果如表 4 所示。 B E R T L A R G E BERT_{LARGE} BERTLARGE优于作者的 ESIM+ELMo 的基线标准模型的 27.1% 。
表 4:SWAG 验证集和测试集准确率。测试结果由 SWAG 作者对隐藏的标签进行评分。人类的表现是用 100 个样本来衡量的,正如 SWAG 论文中描述的那样。
边栏推荐
- IP address classification and range
- 七月到底有多热?通过爬虫爬取当月温度信息,并使用matplotlib绘制温度折线图
- 第四次作业
- [play with FPGA in simple terms to learn 10 ----- simple testbench design]
- KingbaseES DENSE_RANK 函数用法
- Image processing 5: expansion
- Optimising a 3D convolutional neural network for head and neck computed tomography segmentation with
- 单例模式实现及防止反射与序列化
- Light chain dissection / tree chain dissection
- prometheus+node-exporter+grafana 监控服务器系统资源
猜你喜欢

Vs2019:constexpr function "qcountleadingzerobits" cannot generate constant expressions

C#:in、out、ref关键字
Principle and implementation of Tencent mmkv

【STM32】串口通信基础知识

微服务重点

Connaissance détaillée du GRE, du mgre; Connaissance de la configuration de base de l'OSPF

图形管线(一)后处理阶段 alpha测试 模版测试 深度测试 混合

基于OpenCV实现对图片及视频中感兴趣区域颜色识别

MGRE experiment

Data link layer protocol, PPP session
随机推荐
Starfish OS:以现实为纽带,打造元宇宙新范式
QNX modify system time
内存取证之NSSCTF-OtterCTF 2018(复现赛)
Unity about local loading pictures involves webrequest or byte
These five points should be considered in the production of enterprise science and technology exhibition hall
Data link layer protocol, PPP session
Kingbaseesv8r6 difference of xmin under different isolation levels
Unity makes simple intercepting close range artillery - how to predict the strike target
LeetCode_ 52_ Queen n II
Image processing 6: top level file
Unity关于本地加载图片涉及webrequest或者byte
[play with FPGA in simple terms to learn 10 ----- simple testbench design]
[understanding of opportunity-50]: Guiguzi - the twelfth Rune chapter - the art of being a good leader: keep your position, observe the four directions, cave in danger, talk widely, empty advice, set
Talking about the CPU type of anroid device and the placement directory of so files
Classes and objects (top)
常用的鼠标事件和键盘事件
2022暑假软件创新实验室集训 项目实战1
图形管线(一)后处理阶段 alpha测试 模版测试 深度测试 混合
Warcraft map editor trigger notes
基于OpenCV实现对图片及视频中感兴趣区域颜色识别


