一文弄懂Bert模型

文摘   科技   2024-11-04 07:14   江苏  
点击蓝字
 
关注我们










01


引言



计算机一直难以理解语言,其中一个重要原因就是该任务需要更基本的语言语境。每个 NLP 任务都可以通过使用为每个任务创建的单独模型来解决。


2018 年,谷歌发布了论文BERT,旨在对模型进行预训练,这样就可以通过增加不同的层轻松地对模型进行微调,从而创建出最先进的模型,用于问题解答和语言推理等各种任务,而无需对特定任务的架构进行大量修改。


在本文中,我们将看到Bert是如何改变 NLP领域的模式,并了解它是如何发挥作用的。闲话少说,我们直接开始吧!







02


什么是Bert ?


BERT 是一个开源机器学习框架,用于更好地理解自然语言。BERT 是 Bidirectional Encoder Representation from Transformer 的缩写,顾名思义,BERT基于 Transformer 架构,在训练阶段使用编码器表示法从标记的左右两侧学习上下文信息。这就是它被称为双向编码表示的原因。


我们不妨来看个例子:

从上面的例子中我们可以看出,单词bank在两个句子中的含义是不同的。因此,如果模型不考虑双向的语境,那么至少会在其中一个句子中出错。





03


 为什么需要BERT ?

在 BERT 之前,模型的主要局限性在于它们都是单向的,而BRET是双向语境。在这里,双向性指的是输入序列中的每个Token都可以从前面和后面的Token(分别称为左语境和右语境)中获得语义信息。

专业术语是,我们说注意力机制可以关注每个Token的前面和后面的标记。细分起来,我们可以回想一下,BERT 只对输入序列中的单词进行预测,而不会像 GPT 那样生成新的序列。因此,当 BERT 预测输入序列中的某个单词时,它可以结合周围所有单词的上下文线索。这就提供了两个方向的上下文语境,帮助 BERT 做出更明智的预测。

这与 GPT 等纯解码器模型形成鲜明对比,后者的目标是一次预测一个新词,以生成新的输出序列。每个预测的单词只能利用前面的单词(左语境)提供的语境,因为后面的单词(右语境)尚未生成。因此,这些模型被称为单向模型。

上图显示了使用双向上下文语境的典型 BERT 任务和使用单向上下文语境的典型 GPT 任务的示例。对于 BERT,这里的任务是预测 [MASK] 所指示的屏蔽词。由于这个单词的左右两边都有单词,因此两边的单词都可以用来提供上下文。如果作为人类,你在阅读这个句子时只有左右两边的单向上下文,那么你可能很难预测出这个屏蔽词。然而,有了双向上下文,你就更有可能猜出屏蔽词是 fishing。

对于 GPT,目标是执行经典的 NTP 任务。在这种情况下,目标是根据输入序列提供的上下文和输出中已生成的单词生成一个新序列。鉴于输入序列指示模型写一首诗,而目前生成的单词都是 Upon a,您可能会预测下一个单词是 river,然后是 bank。对于许多潜在的候选词,GPT(作为语言模型)会计算其词汇表中每个词出现在下一个词的可能性,并根据训练数据选择一个最有可能出现的词。






04


  BERT模型结构


BERT架构建立在Transformer架构之上。BERT 模型使用的是Transformer模块中的编码器结构。在初始版本中,它有两个变体:

  • BERT Base: 12层,12个注意力头,110M参数
  • BERT Large:24层,16个注意力头,340M参数




05


  嵌入层


我们无法直接向模型提供单词,我们首先要将单词转换成向量,这个过程称为嵌入。在 BERT 中,将单词转换为数字表示向量的嵌入有以下三种类型:
  • Position Embeddings: 与 BERT或Transformer一样,我们不按顺序传递数据,因此我们使用位置嵌入来表示每个标记在序列中的位置。这与我们在Transformer论文中看到的一样。
  • Segment Embedding: 由于 BERT 还将句子对作为各种任务的输入,因此每个标记都会添加句段嵌入,以表明某标记属于句子 A 还是句子 B。
  • Token Embedding: 第一句开头的输入词Token中添加一个 [CLS] 标记,并在每个句子的末尾插入一个 [SEP] 标记。

如上图所示,对于给定的标记,其输入表示是通过将相应的位置嵌入、句段嵌入和标记嵌入相加来构建的。





06


  预训练

BERT 的训练分为两个阶段:预训练和微调。预训练包括使用 MLM 和 NSP 目标损失,在大量无标签文本数据的语料库上进行训练,使 BERT 能够学习上下文化的单词表征。
然后,微调会使用特定任务的标注数据,优化特定任务的训练目标,使预训练的 BERT 模型适应特定的下游任务。预训练和微调的结合使 BERT 能够出色地理解和解决各种 NLP 问题。
在训练语言模型时,确定训练目标是一个难题。为了克服这一挑战,BERT 采用了两种训练策略:MaskedLM (MLM) 和 Next Sentence Prediction (NSP)。
  • Masked LM (MLM)

这是一种用于无监督训练模型技术,MLM 将一定比例的输入标记替换为 [MASK] 标记,然后模型会尝试根据序列中单词提供的上下文来预测屏蔽标记的原始值,如下图所示:

其中训练MLM的核心点可总结为:

  • BERT 损失函数只考虑屏蔽值的预测,而忽略非屏蔽词。
  • 与标准语言模型训练相比,由于 MLM 只对每批中 15%的标记进行预测,因此需要更多的预训练步骤才能收敛。
  • 从编码器获得输出后,它会乘以嵌入矩阵,将其转换为词汇维度,并使用 Softmax 计算每个词的概率。
  • 在论文中,作者在 80% 的情况下用 [MASK] 替换单词。在 10% 的情况下,单词会被随机替换,而在另外 10% 的情况下,原始单词保持不变。这种方法可以确保编码器无法确定哪个单词需要预测,哪个单词已被随机替换。因此,每个标记的分布式上下文表征得以保持。
  • Next Sentence Prediction (NSP)

在 MLM的训练过程中,句子之间的关系在问题解答等任务中也起着重要作用,因此我们使用 NSP 来训练能理解这种关系的模型。

在训练阶段,我们选择一对句子作为输入,然后让模型学习预测这对句子中的第二个句子是否是原始文档中的后续句子。

在训练过程中,我们会选择这样的输入:50% 的输入是一对句子,即原始文档中标注为 "isNext "的后续句子,而另外 50%的输入则是语料库中标注为 "Not Next "的随机句子。这就转化成了一个有两个标签的分类问题。

我们只需计算输入序列,然后通过一个基于transformer的模型,使用一个简单的分类层将 [CLS] 标记的输出转换为 2*1 向量,并使用 Softmax 分配一个标签。

该模型同时使用 MLM 和 NSP 进行训练,以最小化两种策略的综合损失函数。




07


  微调

在预训练之后,BERT 将使用标注数据对特定任务进行微调。在微调训练中,大多数超参数与 BERT 训练中的参数相同。

微调的目的是通过调整 BERT 模型的参数,使其更好地适应数据,从而优化 BERT 模型,使其在特定任务中表现出色。例如,可以在较小的电影评论数据集上对在大型文本数据语料库上预先训练好的 BERT 模型进行微调,以提高其准确预测特定评论情感的能力。






08


  结论

通过实施双向语境,BERT 改变了自然语言处理方法,使模型能够在完整的上下文中理解词语。基于 Transformer 架构的 BERT 在各种 NLP 任务中的表现都优于早期的单向模型。它提高了 NLP 性能的标准,因为它可以在大型数据集上进行预训练,并针对特定工作进行微调,而无需对模型架构进行重大改动。由于其适应性和高效性,BERT 已成为改变计算机理解和处理人类语言方式的基本模型。







点击上方小卡片关注我




添加个人微信,进专属粉丝群!



AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章