首页 > > > 8.3 BERT模型介绍
同学们好,欢迎来到本专栏学习。不久前,谷歌的AI团队发布了一个新的语言表征模型——BERT模型。了解自然语言处理的同学,应该没有不知道BERT的;甚至连很多自然语言处理圈外的开发的同学,都知道这个模型的厉害。自google在2018年10月底公布BERT在11项nlp任务中的卓越表现后,BERT在NLP业内引起巨大反响,认为是NLP领域里程碑式的进步。接下来,本文将对BERT模型作一个简要的介绍,作为NLP的初学者或者说是外行人,我们大可把bert看成一个黑盒子,只要知道它是什么,能干什么用即可。本篇,我们将围绕BERT是什么,模型结构如何以及它有什么作用这三个点带你认识bert的庐山真面目。
BERT模型介绍
1. 什么是BERT?
在2018年,谷歌发布了一篇名为《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》论文,自此BERT就横空出世了。那到底什么是BERT呢?说白了它其实还是一个语言模型。关于语言模型是什么,我们在之前的篇幅已经做了详细的介绍,语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率。那么它和以前的语言模型有什么不同呢?BERT抛弃了传统的RNN、LSTM等网络结构,改用了Transformer的双向编码表示,与最近的其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示。因此,预训练的BERT表示可以通过一个额外的输出层进行微调,适用于广泛任务的最先进模型的构建,比如问答任务和语言推理,无需针对具体任务做大幅架构修改。总的来说,BERT是一个用Transformers作为特征抽取器的深度双向预训练语言理解模型。
2. BERT模型总体结构
前面我们提到,BERT利用了transformer的网络结构。其实正确来说,它利用的是transformer中的encoder部分。transformer 是一种注意力机制,可以学习文本中单词之间的上下文关系的。它的原型包括两个独立的机制,一个 encoder 负责接收文本作为输入,一个decoder负责预测任务的结果。BERT 的目标是生成语言模型,所以只需要encoder机制。transformer的encoder是一次性读取整个文本序列,而不是从左到右或从右到左地按顺序读取,这个特征使得模型能够基于单词的两侧学习,相当于是一个双向的功能。

上图就是BERT的模型结构,它其实就是由多个transformer的encoder连接而成,在模型结构上和transformer是一样的。要理解BERT,最主要还是要理解它的Embedding输入和预训练时的方法,下面我们逐一介绍一下。
2.1 Embedding输入
BERT的Embedding部分并不是简单的随机初始化一个向量表示,而是由三种Emebdding求和而成:

针对不同的任务,模型能够在一个token序列中明确地表示单个文本句子或一对文本句子(比如[问题,答案])。对于每一个token, 其输入表示通过其对应的token embedding, 段表征(segment embedding)和位置表征(position embedding)相加产生。
2.2 预训练方法
有了输入,自然就会想到该如何训练了。在预训练阶段,作者分为两个阶段进行训练,第一个阶段叫做Masked LM(MLM),第二关阶段叫做Next Sentence Prediction (NSP)。下面具体讲一下这两个阶段的具体含义。
2.2.1 Masked LM(MLM)任务
由于BERT采用的是深层双向Transformer模型,那就不能用一般语言模型的训练方法了。我们知道,普通模型是通过某个词的上下文语境预测当前词的概率。如果直接把这个套用到 Transformer 的 Encoder 中,会发现待预测的输出和序列输入已经糅合在一块了,说白了就是 Encoder 的输入已经包含了正确的监督信息了,相当于给模型泄题了。那么,如何解决信息泄露的这一问题呢? 作者很快联想到了,如果我把原来要预测整个句子的输出,改为只预测这个句子中的某个词,并且把输入中这个词所在位置挖空,这样一来,岂不就不会存在泄露真题的问题了?

在BERT中,他们也正正应用了这一想法,每一次训练时,随机选取输入序列中15%的词汇进行mask,然后将这15%的词汇对应位置的最后输出传入输出层来预测其本身的概率,这样就可以让模型通过学习上下文来预测被mask掉的词汇,从而学到语言信息。但是这样的操作会有一个问题,因为当模型迁移到具体的NLP任务时,是没有[MASK]这样的词汇的,从而导致模型没法适应。因此,为了修正这个问题,作者在训练技巧上做了进一步的改进,即:对于选取到的15%的词汇,有80%的时间是被[MASK]替代,有10%的时间是被随机的词汇替代,有10%的时间是不做改变。
2.2.2 Next Sentence Prediction (NSP)任务
在第一阶段训练结束后,此时模型基本具备语言模型的能力,但是,在一些任务中,比如问答和常识推理,这些任务往往看重的不是模型的语言能力,而是模型能够判断句子之间的关系,因此,作者又进行了第二阶段的训练,即NSP(预测下一个句子)。其方法是输入两个句子,判断第二个句子是不是第一个句子的下一句的任务。这个任务是为像QA和NLI这样需要考虑句子间关系的下游任务准备的。通过这个任务,BERT获得了句子级表征的能力。通常,BERT的第一个输出,即[CLS]对应的输出,就可以用来当作输入句子的句向量来使用。
3. 如何使用 BERT?
经过上文的讲解后,大家应该对BERT的模型结构有了大体的认识。不过初学者,模型的内部结构看不懂也没多大关系,毕竟现在优秀的代码遍地都是,我们大可直接调用即可。调用虽然简单,但是起码要知道该如何使用。其实BERT只是一个通用的语言模型,相当于一个预处理阶段,它可以应用于后面所有的NLP任务,只需要在核心模型中添加一个层,例如:
1、在问答任务中,问答系统需要接收有关文本序列的 question,并且需要在序列中标记 answer。 可以使用 BERT 学习两个标记 answer 开始和结尾的向量来训练Q&A模型。
2、在分类任务中,例如文本分类等,只需要在 Transformer 的输出之上加一个分类层。
3、在命名实体识别(NER)中,系统需要接收文本序列,标记文本中的各种类型的实体(人员,组织,日期等)。 可以用 BERT 将每个 token 的输出向量送到预测 NER 标签的分类层。
本节介绍了现时最流行的语言模型——BERT。可以说,BERT是NLP领域中的一个里程碑的作品,对于后面NLP的研究和工业应用会产生长久的影响。它借鉴了ELMO,GPT及CBOW,主要提出了Masked 语言模型及Next Sentence Prediction等预训练的方法。其实BERT在模型结构上并没有多少创新,它更像是近几年NLP领域成果的一个大集成者,几乎所有优点于一身,难怪一问世就受到极大的追捧。本节到此结束,如你对本节内容有疑问,欢迎到讨论区和我互动。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954080/viewspace-3146696/ ,如需转载,请注明出处,否则将追究法律责任。