文章目录
如名称所示,BERT(来自Transformer的双向编码器表示)是基于Transformer模型。我们可以将BERT视为只有编码器部分的Transformer。
在上一个主题《Transformer入门》中,我们了解到将句子作为输入喂给Transformer的编码器,它会返回句子中每个单词的表示作为输出。这正是BERT的本质——来自Transformer的编码器表示(Encoder
Representation from Transformer)。那么,“双向”这个词又是什么意思呢?
在 “Bidirectional Encoder Representation from Transformers” (BERT) 中的 “Bidirectional” 这个词,指的是模型在处理文本数据时能够同时考虑文本中的前后上下文信息。
以下是对 “Bidirectional” 的具体解释:
(1)传统单向语言模型:在 BERT 之前,常见的语言模型如 LSTM 或 GRU,通常是单向的。这意味着它们要么从左到右(正向)读取文本信息,要么从右到左(反向)读取。这样,每个词的表示只包含了它在一个方向上的上下文信息。
(2)双向性:而 “Bidirectional” 意味着模型在处理一个词时,能够同时考虑这个词左边和右边的上下文。这样,每个词的表示都能融合来自两个方向的信息,从而更加全面地理解词义和上下文。
在 BERT 模型中,“Bidirectional” 的实现方式如下:
(1)**Masked Language Model (MLM) **:在训练过程中,随机地遮盖(mask)输入序列中的一些词,然后要求模型预测这些被遮盖的词。由于模型不知道哪些词会被遮盖,因此它必须考虑所有词在两个方向上的上下文。
(2)**Next Sentence Prediction (NSP) **:在训练时,模型还会接收成对的句子作为输入,并学习预测第二个句子是否是第一个句子的后续。这进一步增强了模型对上下文的理解。
通过这种方式,BERT 成为了一个真正意义上的双向模型,它能够捕获文本中的复杂依赖关系,并在各种自然语言处理任务中取得了显著的性能提升。
Transformer的编码器本质上是双向的,因为它可以双向读取句子。因此,BERT基本上是从Transformer获得的双向编码器表示(the Bidirectional Encoder Representation obtained from the Transformer)。
让我们通过一个例子来理解BERT是如何作为Transformer的双向编码器表示的。让我们使用上一节中看到的同一个句子。
假设我们有句子A:He got bit by Python。现在,我们将这个句子作为输入喂给Transformer的编码器,并得到句子中每个单词的上下文表示(embedding,嵌入)作为输出。一旦我们将句子作为输入喂给编码器,编码器就会使用多头注意力机制(将句子中的每个单词与句子中的所有单词关联起来,以学习单词之间的关系和上下文意义)理解句子中每个单词的上下文,并返回句子中每个单词的上下文表示作为输出。
如下图所示,我们将句子作为输入喂给Transformer的编码器,并得到句子中每个单词的表示(representation)作为输出。我们可以堆叠N个编码器,如下图所示。我们只展开了编码器1,以减少混乱。在下面的图中,R_He是单词“He”的表示,R_got是单词“got”的表示,以此类推。每个标记的表示大小将是编码器层的大小。假设编码器层的大小是768,那么每个标记的表示大小将是768:
图2.3 – BERT生成句子中每个单词的表示
同样,如果我们把句子B,“Python is a popular programming language.”,喂给Transformer的编码器,我们得到句子中每个单词的上下文表示作为输出,如下图所示:
图2.4 – BERT生成句子中每个单词的表示
因此,使用BERT模型,对于给定的句子,我们得到句子中每个单词的上下文表示(embedding,嵌入)作为输出。
现在我们了解了BERT是如何生成上下文表示的,接下来我们将查看BERT的不同配置。
感谢您的阅读,欢迎关注!