NLP系列——(10)BERT


Bert之所以取得这么惊才绝艳的效果,很大一部分原因源自于Transformer。为了后面更好、更快地理解BERT模型,这一节从Transformer的开山鼻祖说起,先来跟着” Attention Is All You Need“ 这篇文章,走近transformer的世界,在这里你再也看不到熟悉的CNN、RNN的影子,取而代之的是,你将看到Attention机制是如何被发挥的淋漓尽致、妙至毫颠,以及它何以从一个为CNN、RNN跑龙套的配角实现华丽逆袭。对于Bert来说,transformer真可谓天纵神兵,出匣自鸣!

一、Transformer

论文:Attention Is All You Need

1.1 Encoder-Decoder框架

Encoder-Decoder是为seq2seq(序列到序列)量身打造的一个深度学习框架,在机器翻译、机器问答等领域有着广泛的应用。这是一个抽象的框架,由两个组件:Encoder(编码器)和Decoder(解码器)组成。对于给定的输入source(x1, x2, x3, …,xn), 首先编码器将其编码成一个中间表示向量z=(z1, z2, …, zn)。接着,解码器根据z和解码器自身前面的输出,来生成下一个单词。

在实际应用中,编码器和解码器可以有多种组合,比如{RNN, RNN}、{CNN,RNN}等等,这就是传统的seq2seq框架。后来引入了attention机制,上述框架也被称为”分心模型“。为什么说他”分心“呢?因为对于解码器来说,他在生成每一个单词的时候,中间向量的每一个元素对当前生成词的贡献都是一样的。Attention的思想则是对于当前生成的单词,中间向量z的每个元素对其贡献的重要程度不同,跟其强相关的赋予更大的权重,无关的则给一个很小的权重。

举个例子:假如我们要将 “knowledge is power” 翻译成 中文,在翻译”knowledge“这个单词时, 显然”knowledge“这个单词对翻译出来的”知识“贡献最大,其他两个单词贡献就很小了。这实际上让模型有个区分度,不会被无关的东西干扰到,翻译出来的准确度当然也就更高了。

1.2 Transformer模型架构

在这里插入图片描述
模型分为编码器解码器两个部分。

  • 编码器由6个相同的层堆叠在一起,每一层又有两个支层。第一个支层是一个多头的自注意机制,第二个支层是一个简单的全连接前馈网络。在两个支层外面都添加了一个residual的连接,然后进行了layer nomalization的操作。模型所有的支层以及embedding层的输出维度都是 d m o d e l d_{model} dmodel
  • 解码器也是堆叠了六个相同的层。不过每层除了编码器中那两个支层,解码器还加入了第三个支层,如图中所示同样也用了residual以及layer normalization。

Encoder
Encoder由 N = 6 N=6 N=6个相同的layer组成,layer指的就是上图左侧的单元,最左边有个“Nx”,这里是 x 6 x6 x6个。每个Layer由两个sub-layer组成,分别是multi-head self-attention mechanism和fully connected feed-forward network。其中每个sub-layer都加了residual connection和normalisation,因此可以将sub-layer的输出表示为:
在这里插入图片描述
接下来按顺序解释一下这两个sub-layer:

  • 1、Multi-head self-attention

attention可由以下形式表示:
在这里插入图片描述
multi-head attention则是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来:
在这里插入图片描述
self-attention则是取Q,K,V相同。

另外,文章中attention的计算采用了scaled dot-product,即:

在这里插入图片描述

  • 2、Position-wise feed-forward networks

第二个sub-layer是个全连接层,之所以是position-wise是因为处理的attention输出是某一个位置i的attention输出。

Decoder
Decoder和Encoder的结构差不多,但是多了一个attention的sub-layer,这里先明确一下decoder的输入输出和解码过程:

  • 输出:对应 i i i位置的输出词的概率分布
  • 输入:encoder的输出 & 对应 i − 1 i-1 i1位置decoder的输出。所以中间的attention不是self-attention,它的K,V来自encoder,Q来自上一位置decoder的输出
  • 解码:这里要特别注意一下,编码可以并行计算,一次性全部encoding出来,但解码不是一次把所有序列解出来的,而是像 RNN一样一个一个解出来的,因为要用上一个位置的输入当作attention的query
    明确了解码过程之后最上面的图就很好懂了,这里主要的不同就是新加的另外要说一下新加的attention多加了一个mask,因为训练时的output都是ground truth,这样可以确保预测第 i i i个位置时不会接触到未来的信息。

加了mask的attention原理如图(另附multi-head attention):
在这里插入图片描述

  • 3、Positional Encoding

除了主要的Encoder和Decoder,还有数据预处理的部分。Transformer抛弃了RNN,而RNN最大的优点就是在时间序列上对数据的抽象,所以文章中作者提出两种Positional Encoding的方法,将encoding后的数据与embedding数据求和,加入了相对位置信息。

这里作者提到了两种方法:

  • 用不同频率的sine和cosine函数直接计算
  • 学习出一份positional embedding

经过实验发现两者的结果一样,所以最后选择了第一种方法,公式如下:
在这里插入图片描述
作者提到,方法1的好处有两点:

  • 任意位置的 P E p o s + k PE_{pos+k} PEpos+k 都可以被 P E p o s PE_{pos} PEpos 的线性函数表示,三角函数特性复习下:
    -在这里插入图片描述
  • 如果是学习到的positional embedding,(个人认为)会像词向量一样受限于词典大小。也就是只能学习到“位置2对应的向量是(1,1,1,2)”这样的表示。所以用三角公式明显不受序列长度的限制,也就是可以对 比所遇到序列的更长的序列 进行表示。

参考:https://state-of-art.top/2019/01/17/Transformer%E5%8E%9F%E7%90%86%E5%92%8C%E5%AE%9E%E7%8E%B0-%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
https://zhuanlan.zhihu.com/p/44121378

二、BERT

论文地址:https://arxiv.org/pdf/1810.04805.pdf

一、语言模型

  1. 文本的表征:

要让机器识别文字,处理文字,需要将语言文字编码为数字表示,文本表征即文本的“数字表示“。

为什么要进行文本表征?两个原因:一.模型运算需要数字; 二.模型的运算是连续的,而文本数据是离散的。

插播ps: 什么叫文本数据是离散的?——例如:对于V<{开心,很开心,非常开心},我们无法定义任意两词之间的词,换句话说,如果”开心“代表心情的值是1,“很开心”代表心情的值是2,我们无法找到一个代表心情的值是1.5的词。

常见的文本表征的模型有:

传统的: one-hot(问题:维度高)、tf-idf(词频统计)

基于词向量的: Word2vec、doc2vec、glove、festext(基于特定任务、结构简单)

基于语言模型: ELMO、GPT、BERT (基于文本特征的,需要大量数据集)

  1. 词向量的问题

熟悉基于深度学习的NLP问题,大部分模型首先需要进行的就是词汇的embedding,即将词汇映射到一个固定维度的向量上,来表征文本。最常见的Embedding的方法是 word2vec,它有两种训练方式:CBOW(用周围的词预测当前的词) 和 Skip-Gram(用当前词预测周围词)。这种词向量能够学习到词语间的共现关系,但它是存在问题的,如下:

词向量的建立在分布式假设前提下:即,相同上下文语境的词有相似的含义;

如:
美 国 总 统 特 朗 普 决 定 在 墨 西 哥 边 境 修 建 隔 离 墙 美国总统特朗普决定在墨西哥边境修建隔离墙 西
听 说 美 国 的 那 个 川 普 总 统 要 在 墨 西 哥 边 上 修 个 墙 听说美国的那个川普总统要在墨西哥边上修个墙 西
两句话中特朗普和川普,表示相同的语义,但依照词向量的建模方法,他们拥有不同的上下文,就会有不同的词向量,因此词向量无法处理同义词的问题。

因此:提出结合上下文的动态表征,如ELMO、GPT、BERT基于语言模型的表征

  1. 什么是语言模型

语言模型:给定前文的基础上,从概率上预测下文的内容;随着前文的越详细,预测的目标越明确。

传统语言模型:

N元语法模型:当前词的出现概率依赖于它前面N个词,它存在的问题是,它的依赖是短程依赖,仅依赖于前N个词,但 N越大数据越稀疏,且需要的算力越大。

因此为增加数据的长程依赖,提出了神经语言模型。

神经语言模型: RNN 、LSTM、GRU等

2.1 BERT 原理

BERT模型的全称是Bidirectional Encoder Representations from Transformers,它是一种新型的语言模型。之所以说是一种新型的语言模型,是因为它通过联合调节所有层中的双向Transformer来训练预训练深度双向表示。

想深入了解BERT模型,首先应该理解语言模型。预训练的语言模型对于众多自然语言处理问题起到了重要作用,比如问答任务、命名实体识别以及情感识别。目前将预训练的语言模型应用到NLP任务主要有两种策略,一种是基于特征的语言模型,如ELMo模型;另一种是基于微调的语言模型,如 GPT。这两类语言模型各有其优缺点,而BERT的出现,似乎融合了它们所有的优点,因此才可以在诸多后续特定任务上取得最优的效果。

2.2 BERT模型总体结构

BERT是一种基于微调的多层双向Transformer编码器,其中的Transformer与原始的Transformer是相同的,并且实现了两个版本的BERT模型,在两个版本中前馈大小都设置为4层:

lBERTBASE:L=12,H=768,A=12,Total Parameters=110M

lBERTLARGE:L=24,H=1024,A=16,Total Parameters=340M

其中层数(即Transformer blocks块)表示为L,隐藏大小表示为H,自注意力的数量为A。

2.3 BERT模型输入

输入表示可以在一个词序列中表示单个文本句或一对文本(例如,[问题,答案])。对于给定的词,其输入表示是可以通过三部分Embedding求和组成。Embedding的可视化表示如下图所示:
在这里插入图片描述

  • token Embeddings表示的是词向量,第一个单词是CLS标志,可以用于之后的分类任务,对于非分类任务,可以忽略词向量;

  • Segment Embeddings用来区别两种句子,因为预训练不只做语言模型还要做以两个句子为输入的分类任务;

  • Position Embeddings是通过模型学习得到的。

2.4 BERT模型预训练任务

BERT模型使用两个新的无监督预测任务对BERT进行预训练,分别是Masked LM和Next Sentence Prediction:

2.4.1 Masked LM

为了训练深度双向Transformer表示,采用了一种简单的方法:随机掩盖部分输入词,然后对那些被掩盖的词进行预测,此方法被称为“Masked LM”(MLM)。预训练的目标是构建语言模型,BERT模型采用的是bidirectional Transformer。那么为什么采用“bidirectional”的方式呢?因为在预训练语言模型来处理下游任务时,我们需要的不仅仅是某个词左侧的语言信息,还需要右侧的语言信息。

在训练的过程中,随机地掩盖每个序列中15%的token,并不是像word2vec中的cbow那样去对每一个词都进行预测。MLM从输入中随机地掩盖一些词,其目标是基于其上下文来预测被掩盖单词的原始词汇。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右两侧的上下文,这使得可以预训练深度双向Transformer。Transformer编码器不知道它将被要求预测哪些单词,或者哪些已经被随机单词替换,因此它必须对每个输入词保持分布式的上下文表示。此外,由于随机替换在所有词中只发生1.5%,所以并不会影响模型对于语言的理解。

2.4.2 Next Sentence Prediction

很多句子级别的任务如自动问答(QA)和自然语言推理(NLI)都需要理解两个句子之间的关系,譬如上述Masked LM任务中,经过第一步的处理,15%的词汇被遮盖。那么在这一任务中我们需要随机将数据划分为等大小的两部分,一部分数据中的两个语句对是上下文连续的,另一部分数据中的两个语句对是上下文不连续的。然后让Transformer模型来识别这些语句对中,哪些语句对是连续的,哪些对子不连续。

2.5 模型比较

ELMo、GPT、BERT都是近几年提出的模型,在各自提出的时候都取得了不错的成绩。并且相互之间也是相辅相成的关系。

3个模型比较如下:
在这里插入图片描述
再往前看,在NLP中有着举足轻重地位的模型和思想还有Word2vec、LSTM等。

Word2vec作为里程碑式的进步,对NLP的发展产生了巨大的影响,但Word2vec本身是一种浅层结构,而且其训练的词向量所“学习”到的语义信息受制于窗口大小,因此后续有学者提出利用可以获取长距离依赖的LSTM语言模型预训练词向量,而此种语言模型也有自身的缺陷,因为此种模型是根据句子的上文信息来预测下文的,或者根据下文来预测上文,直观上来说,我们理解语言都要考虑到左右两侧的上下文信息,但传统的LSTM模型只学习到了单向的信息。

在这里插入图片描述

三、BERT实现文本分类

正在研究。。。。。
如何使用BERT实现中文的文本分类(附代码)

参考: https://www.cnblogs.com/huangyc/p/9898852.html
https://zhuanlan.zhihu.com/p/50717786

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值