Bert原理介绍
一.Bert基本原理介绍
背景
通过预训练语言模型的方法已经取得了显著的效果,在多种自然语言处理任务中展现出了强大的能力。在应用预训练模型的结果时,通常会采用两种主要策略:一种是结合特定任务的设计架构,并将预训练得到的表示作为额外的输入特征来使用;另一种则是仅使用少量的任务相关参数,并通过微调这些参数来优化下游任务模型。其代表是ELMo;而基于微调的方法则仅使用少量的任务相关参数,并通过微调这些参数来优化下游任务模型,其代表是OpenAI GPT。
先前研究的主要缺陷体现在其在预训练阶段所采用的目标函数全部都建立在单向语言模型的基础之上,并未充分考虑双向语境信息的影响。BERT模型正是针对这一缺陷而提出的解决方案。该方法通过引入一种创新性的预训练方法——Masked Language Model(简称MLM)。具体而言,在实际应用中,在输入文本中随机选取一定比例的关键词进行遮盖处理后,并非直接预测这些被遮盖词的具体内容;而是要求模型能够基于被遮盖词所在的双侧语境环境准确推断出其对应的词典索引值。值得注意的是,在BERT模型的设计过程中还附加了一个重要的学习任务——Next Sentence Prediction(NSP),这种任务旨在帮助模型更好地理解文本之间的联合表示关系。
如图所示,本研究比较了BERT, ELMo和OpenAI-GPT三种模型的结构.最值得注意的是,在这些模型中,只有BERT能够全面地将上下文信息的两边位置纳入考虑.

1.1 Bert基本介绍
我们将从'what'、'how'、'where'等方面系统阐述BERT。以下将分别介绍其基本概念、方法论以及相关技术背景。首先让我们了解什么是BERT?
BERT全称是Pre-training of Deep Bidirectional Encoder Representations from Transformers这一预训练语言模型。它通过大规模的语言数据集进行无监督学习以提取丰富的语义信息其每一层都体现了BERT的核心特征。
具体而言Pre-training表明BERT是一个经过大规模预训练的模型它为下游任务学习了大量先验的语言知识包括语义语法规则以及语义理解能力这一过程不仅帮助 Bert获得了强大的语言表示能力还为其在各种自然语言处理任务中展现出卓越性能奠定了基础
通过分析BERT的工作原理可知其基于双层结构的双层语言模型实现了更有效地融合前后文信息
Transformers说明BERT采用Transformers作为特征抽取器。
Deep说明模型很深,base版本有12层,large版本有24层。
总体而言,BERT是一种基于Transformers构建的特征抽取器构成的语言理解模型。
BERT的核心机制(how)
在BERT体系中主要包含两个主要环节:无监督预训练与监督微调过程。其中,在无监督预训练阶段中, 模型基于未标注数据集, 主要针对多样化的预训练目标展开学习. 而在监督微调阶段, 模型首先采用之前通过预 training 阶段获得的有效参数初始值, 然后根据来自不同应用领域的标注数据, 对所有模型参数进行精细调节. 这一特性使得即使各个下游应用共享相同的初始参数配置, 也能在此基础上发展出各自独特且高效的解决方案. 不过值得注意的是,BERT体系最显著的设计特点是:尽管面对不同的 downstream 应用领域, 整体架构始终保持高度一致, 但其内部子层结构却存在微妙差异. 参考图示以智能问答系统为例介绍,BERT的整体架构由多个关键子层共同构成

模型架构
BERT 模型基于原始论文(Attention is all you need)构建了一个多层双向 Transformer encoder 作为其架构基础。值得注意的是,在这种架构中,Transformer encoder 强调双侧上下文关注机制;而 Transformer decoder 则仅利用左侧上下文(通过掩码方法)。本研究中设定 Transformer 堆叠层数为 [公式]、隐藏向量维数为 [公式]、自我注意力头部数量为 [公式] 以及全连接网络隐藏层维数为 [公式]。本研究分别构建了两类不同规模的 BERT 模型:
[bert]: [bert], 总参数量为 110M
[bert]: [bert], 总参数量为 340M
其中 BERT 选择与 OpenAI GPT 相同规模, 便于相互评估。
为了使BERT能够有效应对一系列 downstream任务的需求,其设计应确保其输入表示能够在特定顺序下清晰传达单个语句及其相关联的问题与解答。值得注意的是,在本研究中,“sentence”一词不局限于传统意义上的语句;这里的“sequence”指的是BERT中的输入token序列(即词语组成的序列),既可以代表单一语句也可包含两个相关语句并行处理。
本研究采用了 WordPiece 嵌入技术(词典规模为 30000)来生成词向量表示。为了处理长序列数据,在每个序列的第一个位置设置了特定的分类标记 [公式]。该标记的最终隐藏状态用于聚合整个序列并完成分类任务。将两个句子打包成一个序列后通过两种方法区分:第一种方法是在两个句子之间插入一个特殊标记 [公式];第二种方法则是对每个 token 添加一个学习到的嵌入向量以指示它属于来源句子 A 或 B(如图 1 所示)。输入嵌入向量被标记为 [公式] 特殊标志 [公式] 的最终隐藏向量则标记为 [公式];第 [公式] 个输入 token 的最终隐藏向量被标记为 [公式].
对于一个给定的token, 其输入表示为三个部分之和, 如下图所示. 第一部分是词嵌入(基于WordPiece生成), 第二部分是segment嵌入(指示该token所属的句子), 第三部分是位置编码(标识该token在序列中的位置信息).

预训练 BERT
我们使用两个无监督任务来预训练 BERT,如图 1 左侧所示。
在标准条件下的语言模型仅能进行单向训练,在这种情况下词语可能会看到自身而导致模型训练中的混乱。为了同时利用双侧上下文信息并解决上述问题,研究者提出了一种方案:通过随机遮蔽输入序列的部分token来实现,并以预测这些被随机遮蔽的token为目标。该方法被称为masked语言建模(Masked Language Modeling, MLM),其灵感源自著名的Cloze任务(Masked Language Modeling, MLM)。在该任务中,在每个序列中设置了15% 的WordPiece向量作为掩蔽处理。
该预训练方法可使模型充分考虑双侧语境信息,在语言理解方面具有显著优势。然而存在一个问题:在预训练与微调之间存在不匹配现象。由于 [公式]标记符在微调阶段并未被使用,在后续处理中我们采取了相应的措施以缓解这一问题:即我们通常不会将 [公式]标记符用于覆盖隐藏单词的情况;例如之前所述,在实验设计中我们采用随机策略选取15%的位置用于预测任务;通过这种方法可以有效减少模型对遮挡词的依赖程度
大部分情况下会采用特定的token类型;其中约10%的情况会选择随机token;剩余10%的情况则会保持不变;随后生成的[公式]将被用于预测原始token序列,并通过交叉熵损失函数来优化模型参数。
任务二描述了 Next Sentence Prediction (NSP) 技术
预训练信息源
预 training data base采用 books corpus(8 billion words)以及 english wikipedia(25 billion words)作为构建该 pre training data base 的基础。值得注意的是,在构建该 pre training data base时,研究者选择使用基于 document level 的语料库而非 reordering sentences 的策略, 因为 pre training 的核心在于建立各 sequence 间的关联性分析。
Fine-tuning the BERT model
本研究聚焦于自然语言处理领域中的关键任务及其实现机制探讨。具体而言:
- 复述任务旨在用不同的方式表达相同的含义。
- 假设-前提是因的关系描述为因果关系。
- 问题-段落反映了问题与相关段落之间的关联。
- 单个句子对应序列标注任务。
- 表示被注入到输出层中用于序列标注或智能问答等下游任务。
- 公式则被注入到输出层中用于分类任务如文本蕴涵情感分析等。
- 如图所示不同下游任务对应BERT微调结构有所差异其中a b代表序列层面的任务c d代表词语层面的任务。

相较于预训练模型而言,微调过程所需的计算资源需求显著降低。假设你拥有足够数量的TPU资源,在一小时内可以完成全部结果的复现。
BERT的主要掌握的核心内容是什么?它经过预训练阶段后,在多个自然语言处理任务中展现出强大的语义理解和上下文捕捉能力。
短语句法信息被嵌入到BERT模型的低层网络结构中;该模型的中间层能够提取出丰富的语言学特征;而其顶层则能够提取出丰富的语义信息特征。
该研究中的观点源自这篇论文。该研究组通过一系列探针实验验证了相关论断,并对深入理解BERT及其更有效的应用提供了重要参考。
Ganesh Jawahar Benoˆt Sagot Djam´e Seddah (2019). Which aspects of linguistic structure does BERT focus on?)
(2) 实际上,并没有学到深层次的意义信息;反而仅仅获取了有限量的基本意义信息以及少量的概率统计特征。
最近有一篇名为《Probing Neural Network Comprehension of Natural Language Arguments》的研究论文探讨了BERT在Argument Reasoning Comprehension Task(ARCT)这一特定任务中的表现:它是否仅仅识别出数据集特定的表面统计模式?研究发现该模型并未真正理解语言中的复杂推理过程和常识背景。
大致来说论文作者为了展示BERT的强大能力而选择了具有挑战性的自然语言处理任务——ARCT,并在测试数据中进行了特定处理以检验其性能。ARCT被定义为一种推理理解任务——即根据给定的事实(Fact)和一般知识(General Knowledge)推导出结论(Conclusion)的过程。如下图所示——展示了一个典型的ARCT数据集实例,在该数据集中包含了四个关键组成部分:结论(Claim)、理由(Reason)、论据(Warrant)、以及一个错误论据(Alternative)供对比分析使用。

根据图所示,这是ARCT任务的整体架构,即同时接收 Claim、Reason 以及两个 Evidence 支持项,通过分析这两个证据支持项的内容与结论的相关性程度,预测哪一个是更为合适的证据支持项。
论文作者最先基于ARCT原始数据集利用BERT进行ARCT任务的预测,并观察到BERT的表现相当优异,达到71.6±0.04的水平,与未经训练者的成绩不相上下。
然后,研究人员对测试数据集进行了深入分析并揭示了其中潜在的统计规律。具体而言,在这些数据集中,正确识别的事件请求(即正确的Warrant)中包含某些特定词汇的概率显著高于错误识别的情况。例如,在Warrant中出现"not"这个词时,直接将其归类为正确事件请求就能达到60%的准确率。
此外,在进行实验时,研究人员采用了仅将warrant与claim或warrant与reason作为输入进行模型训练的方式。实验结果显示,在这种特定的输入设置下,BERT依然能够实现70%以上的准确度。这种情况类似于教师尚未完成讲解而学生已经提前准备好了答案,在这种情况下显得有些不合逻辑。要么是学生存在舞弊行为(cheating),要么是学生提前进行了内容的背诵。
最后的研究人员采用了激进的方式,在数据集上进行了颠倒,并对词的概率分布进行了平均处理。具体实验结果令人意外地显示,在测试集合上应用BERT模型时达到了53%的准确率,在实际应用中仅略优于随机猜测水平。
所以,BERT的预训练过程到底学到了什么呢?
回答此问题并非易事。通过这两篇论文从两个方面对BERT进行了解析后可知,在认知层面我们可以对其有一个明确的位置定位。研究显示,在自然语言处理领域中,BERT凭借其庞大的参数规模和卓越的信息提取能力,已经展现出强大的预训练实力,并能从中获取部分语言学知识以及一定程度的语言意义。然而,在现有研究中发现,BERT现有模型仍无法充分模拟人类认知中的广泛常识与推理过程——举个例子来说,在面对"天下雨了"这一事实时,BERT或许可以推断出"要带伞",但更深入的理解却难以实现——即明白"要带伞是因为怕淋湿,而淋湿了又会感冒"等深层关联性问题,BERT目前仍难以掌握这些复杂的逻辑关系。
NLP的核心难点在于语言具有高度浓缩的特点,并且在不同的情境中表达方式存在显著差异。一句看似简单的表述,在缺乏必要背景知识的情况下可能会产生歧义或者被误解。就目前研究情况来看,经过预训练的语言模型这条路虽然可行但仍然充满挑战。
BERT是目前最热门的NLP预训练模型之一,在其成功的关键因素中主要包含两点:一是采用了MLM技术作为基础理论支撑;二是以Transformer架构作为核心组件,并且能够有效地提取特征。我们可以进一步思考一下:BERT还有哪些不足之处?等到下周介绍XLNet时就能更加清楚地认识到这些问题所在了。
