NLP实践-Task10

1.transformer

                                                                                   图一、The Transformer Architecture

  如图一所示是谷歌提出的transformer 的架构。这其中左半部分是 encoder 右半部分是 decoder。

  • Encoder: 由N=6个相同的layers组成, 每一层包含两个sub-layers. 第一个sub-layer 就是多头注意力层(multi-head attention layer)然后是一个简单的全连接层。 其中每个sub-layer都加了residual connection(残差连接)和normalisation(归一化)。 
  • Decoder: 由N=6个相同的Layer组成,但这里的layer和encoder不一样, 这里的layer包含了三个sub-layers, 其中有一个self-attention layer, encoder-decoder attention layer 最后是一个全连接层。前两个sub-layer 都是基于multi-head attention layer。这里有个特别点就是masking, masking 的作用就是防止在训练的时候 使用未来的输出的单词。比如训练时,第一个单词是不能参考第二个单词的生成结果的。Masking就会把这个信息变成0,用来保证预测位置 i 的信息只能基于比 i 小的输出。

Attention

  • Scaled dot-product attention

  “Scaled dot-product attention”如下图二所示,其输入由维度为d的查询(Q)和键(K)以及维度为d的值(V)组成,所有键计算查询的点积,并应用softmax函数获得值的权重。

图二、两种Attention实现框图

“Scaled dot-product attention”具体的操作有三个步骤:

  • 每个query-key 会做出一个点乘的运算过程,同时为了防止值过大除以维度的常数
  • 再到最后会乘以V (values) 用来当做attention vector
  • 最后会使用softmax 把他们归一化

     数学公式表示如下:

Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V \\

   在论文中, 这个算法是通过queries, keys and values 的形式描述的,非常抽象。这里用了一张CMU NLP课里的图来进一步解释, Q(queries), K (keys) and V(Values), 其中 Key and values 一般对应同样的 vector, K=V 而Query vecotor  是对应目标句子的 word vector。如下图三所示。

               图三、Attention process (source:http://phontron.com/class/nn4nlp2017/assets/slides/nn4nlp-09-attention.pdf)

 

  • Multi-head attention

   上面介绍的scaled dot-product attention, 看起来还有点简单,网络的表达能力还有一些简单所以提出了多头注意力机制(multi-head attention)。multi-head attention则是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来,self-attention则是取Q,K,V相同。

    论文中使用了8个平行的注意力层或者头部。因此用的维度dk=dv=dmodel/h=64。

Position-wise feed-forward networks

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

Positional Encoding 

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

  这里使用了两个构造函数sin、cos。pos用来表示单词的位置信息,比如第一个单词啦,第二个单词什么的。而 i 用来表达dimension 现在的例子里,dmodel 是512, 那 i 应该是 0 到255. 这里为了好说明,如果2i= dmodel, PE 的函数就是sin(pos/10000), 那它的波长就是10000*2pi,  如果i=0, 那么他的波长就是2pi.  这样的sin, cos的函数是可以通过线性关系互相表达的。

 

优点

  作者主要讲了以下几点,复杂度分析图如下图四所示:  

图四、Transformer模型与其他常用模型复杂度比较图

   Transformer是第一个用纯attention搭建的模型,不仅计算速度更快,在翻译任务上也获得了更好的结果。该模型彻底抛弃了传统的神经网络单元,为我们今后的工作提供了全新的思路。

2.bert

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

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

2.1 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.2 BERT模型输入

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

image

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

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

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

2.3 BERT模型预训练任务

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

2.3.1 Masked LM

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

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

2.3.2 Next Sentence Prediction

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

2.4 模型比较

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

3个模型比较如下:

image

再往前看,在NLP中有着举足轻重地位的模型和思想还有Word2vec、LSTM等。

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

image

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章