Press "Enter" to skip to content

BERT详解(附带ELMO、GPT介绍)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

首先我会详细阐述BERT原理,然后简单介绍一下ELMO以及GPT

 

BERT详解

 

BERT全称为 Bidirectional Encoder Representation from Transformer ,是Google以无监督的方式利用大量 无标注 文本「炼成」的语言模型,其架构为Transformer中的Encoder(BERT=Encoder of Transformer)

 

我在Transformer详解中已经详细的解释了所有Transformer的相关概念,这里就不再赘述

 

以往为了解决不同的NLP任务,我们会为该任务设计一个最合适的神经网络架构并做训练,以下是一些简单的例子

 

 

不同的NLP任务通常需要不同的模型,而设计这些模型并测试其performance是非常耗成本的(人力,时间,计算资源)。 如果有一个能直接处理各式NLP任务的通用架构该有多好?

 

随着时代演进,不少人很自然地有了这样子的想法,而BERT就是其中一个将此概念付诸实践的例子

 

Google在预训练BERT时让它同时进行两个任务:

 

 

 

    1. 漏字填空(完型填空),学术点的说法是 Masked Language Model

 

    1. 判断第2个句子在原始本文中是否跟第1个句子相接( Next Sentence Prediction )

 

 

对正常人来说,要完成这两个任务非常简单。只要稍微看一下 前后文 就知道完形填空任务中 [MASK] 里应该填 退了 ;而 醒醒吧 后面接 你没有妹妹 也十分合理

 

接下来我会分别详细介绍论文中这两个任务的设计细节

 

BERT语言模型任务一:Masked Language Model

 

在BERT中,Masked LM(Masked Language Model)构建了语言模型,简单来说,就是 随机遮盖或替换 一句话里面的任意字或词,然后让模型通过上下文预测那一个被遮盖或替换的部分,之后 做Loss的时候也只计算被遮盖部分的Loss ,这其实是一个很容易理解的任务,实际操作如下:

 

 

随机把一句话中15%的token(字或词)替换成以下内容:

[MASK]

之后让模型 预测和还原 被遮盖掉或替换掉的部分,计算损失的时候,只计算在第1步里被 随机遮盖或替换 的部分,其余部分不做损失,其余部分无论输出什幺东西,都无所谓

 

这样做的号出是,BERT并不知道[MASK]替换的是哪一个词,而且任何一个词都有可能是被替换掉的,比如它看到的apple可能是被替换的词。这样强迫模型在编码当前时刻词的时候不能太依赖当前的词,而要考虑它的上下文,甚至根据上下文进行”纠错”。比如上面的例子中,模型在编码apple时,根据上下文my dog is,应该把apple编码成hairy的语义而不是apple的语义

 

BERT语言模型任务二:Next Sentence Prediction

 

我们首先拿到属于上下文的一对句子,也就是两个句子,之后我们要在这两个句子中加一些特殊的token: [CLS]上一句话[SEP]下一句话[SEP] 。也就是在句子开头加一个 [CLS] ,在两句话之间和句末加 [SEP] ,具体地如下图所示

可以看到,上图中的两句话明显是连续的。如果现在有这幺一句话 [CLS]我的狗很可爱[SEP]企鹅不擅长飞行[SEP] ,可见这两句话就不是连续的。在实际训练中,我们会让上面两种情况出现的 1:1

 

Token Embedding 就是正常的词向量,即PyTorch中的 nn.Embedding()

 

Segment Embedding 的作用是用embedding的信息让模型分开上下句,我们给上句的token全0,下句的token全1,让模型得以判断上下句的起止位置,例如

 

[CLS]我的狗很可爱[SEP]企鹅不擅长飞行[SEP]
 0   0 0 0 0 0 0 0  1 1 1 1 1 1 1 1

 

Position Embedding 和Transformer中的不一样,不是三角函数,而是学习出来的

 

Multi-Task Learning

 

BERT预训练阶段实际上是将上述两个任务结合起来,同时进行,然后计算Loss,例如

 

Input:
[CLS] calculus is a branch of math [SEP] panda is native to [MASK] central china [SEP]
Targets: false, south
----------------------------------
Input:
[CLS] calculus is a [MASK] of math [SEP] it [MASK] developed by newton and leibniz [SEP]
Targets: true, branch, was

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注