Advertisement

BERT原理介绍

阅读量:

1. 引言

在2018年的时候, 谷歌推出了一个新的名为BERT(Bidirectional Encoder Representations from Transformers)的语言模型, 它在11个自然语言处理(NLP)领域的重要任务中取得了显著成绩, 可以说这是NLP领域的一个重要进展. 其基本概念与我们之前讨论过的GPT模型有诸多相似之处, 但两者在架构上有明显区别: GPT则采用了单向语言模型的架构, 而BERT构建了一个更为复杂的双向语言模型. 具体来说, 则采用了Transformer架构中的解码器模块. 尤其是在处理如问答这类依赖语境理解的任务时, BERT的优势更加明显. 与此同时, 如果仅依赖于单向结构进行迁移学习的话, 在某些应用中可能会受到现有架构设计的一些限制.

学术文章位置:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

2. BERT原理介绍

基于其设计理念的一致性原则,在自然语言处理领域中形成了相似的研究框架。具体体现为两个主要环节:首先是大规模无监督预训练过程,在这一阶段系统通过大量未标注的数据集构建语言模型;随后经过微调优化将其应用于特定领域的实际问题解决中。

2.1 模型的结构

BERT基于Transformer编码器架构构建而成,在模型设计中设定了多个关键参数:包括编码器层数L、每个层的空间维度大小H以及自注意力机制共有A个头。研究者在实验过程中重点考察并分析了几种不同规模的模型配置方案:主要关注并比较分析了两类不同的模型架构设置策略

  • 该模型的配置参数包括序列长度\mathrm{L}=12、隐藏层宽度\mathrm{H}=768以及注意力头数\mathrm{A}=12;其规模约为1.1亿个参数。
    • 该模型的配置参数包括序列长度\mathrm{L}=24、隐藏层宽度\mathrm{H}=1024以及注意力头数\mathrm{A}=16;其规模约为3.4亿个参数。

对于系统的输入,在防止不同NLP任务在微调阶段需要调整输入格式的情况下,BERT通过预训练就确保了其处理各类任务的一致性与稳定性

在每个序列开头插入一个特定标记[CLS]。这一标记主要用于提取输入序列的整体语义特征,在某些情况下类似于Doc2Vec方法中的做法。通过这种方式,在每一类别的分类任务中都可以直接利用该标记生成的向量来进行预测工作。作者在论文中定义了变量CT_{i}分别表示带有[CLS]标记后的整体句法信息向量以及时间步t_i处的具体表征信息向量。

另一个方法是使模型能够分辨输入是否为单一句或分句。研究者采用了两种策略:一种是在文本中插入特殊字符"[SEP]"来分隔不同的语句;另一种是在句法层次引入嵌入向量以区分同一词项在不同句中所表达的意义。每个词件的输入应包含以下三项信息:包括词汇嵌入、句嵌入以及位置嵌入。具体如上图所示:

在这里插入图片描述

2.2 预训练阶段

在预训练过程中, 作者将整个训练过程划分为两个关键环节, 并分别为它们命名: 第一部分被称为Masked Language Model(MLM), 第二部分则命名为Next-Sentence Prediction (NSP). 接下来将详细阐述这两个环节的具体内容.

  • Masked LM(MLM) :由于BERT采用的是深层双向Transformer模型,因此,在训练时没法像ELMo和GPT那样直接进行训练,不然在每个时间步会让模型学到词汇自身的信息,因此,作者换了一种训练技巧,即Masked LM,该方法在每一次训练时,随机选取输入序列中15%的词汇进行mask,然后将这15%的词汇对应位置的最后输出传入输出层来预测其本身的概率,这样就可以让模型通过学习上下文来预测被mask掉的词汇,从而学到语言信息。但是这样的操作会有一个问题,因为当模型迁移到具体的NLP任务时,是没有[MASK]这样的词汇的,从而导致模型没法适应。因此,为了修正这个问题,作者在训练技巧上做了进一步的改进,即:对于选取到的15%的词汇,有80%的时间是被[MASK]替代,有10%的时间是被随机的词汇替代,有10%的时间是不做改变。
  • Next Sentence Prediction (NSP) :在第一阶段MLM训练结束后,此时模型基本具备语言模型的能力,但是,在一些任务中,比如问答和常识推理,这些任务往往看重的不是模型的语言能力,而是模型能够判断句子之间的关系,因此,作者又进行了第二阶段的训练,即NSP。该方法的目的是判别给定的两个句子AB,判断B是否是A的下一句,作者从预训练的语料中构造了一个训练集,其中,有50%的样本中,AB是上下文的关系,其标签为“IsNext”,有50%的样本中,B是随机从语料抽取的句子,两者的标签是“NotNext”,然后将AB拼接后输入预训练的模型,最后利用[CLS]对应的输出向量C来预测最终的标签类别。如下图作图所示。
在这里插入图片描述

2.3 Fine-tuing阶段

经过预训练阶段的训练后,在特定的自然语言处理(NLP)任务中可以将该模型迁移至其中。得益于BERT对输入数据的良好设计,在多数NLP任务中迁移至该模型所需改动极少:例如,在文本分类的任务中,则可以直接将其以"text-\varnothing"的形式输入到模型中,并使[CLS]标记后的输出向量C直接接入到输出层即可完成处理。

对于配对文本的输入处理而言,在实际应用中可以直接将这两段文本分别作为输入序列AB提供给模型进行处理,并不需要做额外修改即可完成任务要求。具体而言,在训练过程中作者增加了两个特殊的向量来辅助模型识别答案的位置信息:即开始位置向量S \in \mathbb{R}^{H}以及结束位置向量E \in \mathbb{R}^{H}。随后针对每一段文本中的每一个词汇项其最后一层表示状态可以通过与这两个位置向量分别进行点积运算并结合Softmax函数来计算其成为答案起始或结束位置的概率分布情况:具体而言对于第i个词其状态表示为T_{i}则其与开始位置向量的点积结果为\text{S} \cdot T_{i}而与结束位置向量的点积结果为\text{E} \cdot T_{i}之后通过比较这些结果来确定最有可能的答案起始和结束位置的位置索引i,j(其中j \geq i)

经研究发现,在现有的ELMo和GPT等预训练语言模型基础上,BERT展现出色的迁移能力、语义理解与表达能力。然而,在实际应用中存在一个挑战,即模型参数量往往非常庞大,这可能导致资源浪费。因此作者也尝试像ELMo那样,借鉴其研究思路,将各层预训练模型的输出作为各个NLP任务的基础特征输入,并在每个具体任务中单独训练一个较小规模的新模型,这种方法被称作基于'特征提取'的方式而非传统的'微调方法'。以NER任务为例进行说明,选取BERT最终四层输出向量进行拼接作为NER任务特征输入,随后通过两层BiLstm完成命名实体识别流程,最终实验结果表明该方法依然具有很强的效果

总体来说,BERT无论采用哪种Fine-tuning或Feature-based的方法表现都非常出色。

3. 总结

我发现实际上BERT相较于GPT其本质是相同的但主要是在输入方式和双向性这两个方面做出了改进基于大规模预训练的语言模型可能在未来自然语言处理(NLP)任务中占据主导地位然而这种方法确实需要大量资源我认为掌握大型语言模型并将其应用于各个子任务可能是一种更为可行的解决方案否则在实际部署时每个子模型都需要消耗大量计算资源综上所述

BERT采用了基于深度双向架构的语言模型结构,并相较于GPT而言,在模拟真实语境方面表现更为出色。值得注意的是,在操作层面这一改进带来了显著的效果提升,并且在具体实现中所展现出的优势远超同类浅层架构如EMLo的设计理念。此外,在迁移能力方面取得的进展也是有目共睹的,在实际应用中这一改进使得其在面对多种NLP下游任务时展现出更好的适应性,并且相较于其他模型,在需要调整适应不同任务需求的地方减少了更多。值得注意的是,在考虑到双向往来的重要性时(即考虑到双向往来的重要性),这一改进不仅提升了效率还降低了训练难度。

全部评论 (0)

还没有任何评论哟~