BERT是双向转换器(Bi-Transformer)的缩写。这是谷歌在2018年末开发并发布的一种新型语言模型。BERT等经过预处理的语言模型在问答、命名实体识别、自然语言推理、文本分类等自然语言处理任务中发挥着重要作用。BERT是多层的双向转换器堆叠,编码机制只要微调就可以运作,文章一开始有必要回顾下Transformer的架构。Transformer的前世今生2017年,谷歌发表了一篇题为《Attention is all your need》的论文,该论文提出了一种基于注意力的结构来处理机器翻译相关序列模型相关的问题。传统的神经机器翻译大多采用循环神经网络(RNN)或卷积神经网络(CNN)作为编解码器的元模型。然而,谷歌基于注意力的Transformer编解码模型跳出了传统的RNN和CNN范式。该模型具有非常高的并行性,在提高翻译性能的同时,训练速度也挺快。让我们把时光倒流几年,回到attention机制真正起源与全部秘密所在。什么是注意力(Attention)机制注意力(Attention)机制可以看作是模糊存储的一种形式。模型的隐层算是某种存储器,模型选择从内存中检索内容。在我们深入关注之前,让我们简要回顾一下序列-序列(Seq2Seq)模型。传统的机器翻译基本上是基于Seq2Seq模型的。该模型分为编码器层和解码器层,由RNN或RNN变体(LSTM、GRU等)组成。编码器的最后隐状态产生编码向量。编码向量用来封装所有输入元素的信息,以帮助解码器做出准确的预测。输出的编码向量充当模型中解码器部分的初始隐藏状态。Seq2Seq模型的主要瓶颈是需要将源序列的全部内容压缩到一个固定大小的向量中。如果文本稍长,很容易丢失文本的一些信息。为了解决这一问题,人们开始着手关注并解决问题。注意力机制通过允许解码器回溯源序列的隐藏状态,然后提供加权平均值作为解码器的附加输入来缓解这一问题。顾名思义,使用注意力机制,模型在解码阶段会选择最适合当前节点的上下文作为输入。https://jalammar.github.io/images/seq2seq_7.mp4(Seq2Seq模型演讲视频) 注意力机制模型与传统的Seq2Seq模型有两个主要的区别:首先,编码器会向解码器提供更多的数据,在这一过程中,编码器将向解码器提供所有节点的隐层状态,而不仅仅只是编码器最后一个节点的隐层状态。其次,解码器绝非一股脑儿使用所有编码器提供的隐层状态,而是会采取一种选择机制为当前位置适配最合适的状态。为此,解码器会计算每个隐藏状态的分数值并对分数进行Softmax打分,来确定哪个隐藏状态与当前节点最密切相关,某个隐层状态如果具有更高相关性,将会得到更大多分数,而相关性较小的隐层状态则分数会比较低。接下来,隐层状态会跟每个自身的softmax分数做点乘,softmax分数高的隐状态会被放大,softmax分数低的隐状态会被抑制。这个操作会在Attention模型解码器每个时间步长上都被执行。https://jalammar.github.io/images/attention_process.mp4(关于Attention模型演讲视频)让我们看看传统RNN模型Attention(Seq2Seq)执行的步骤:1.双层RNN模型的解码端置位嵌入向量(Embedding)以<END>(表征结束>的令牌(token),并对隐状态初始化。2.解码端的RNN接收输入,产生输出和新的隐状态向量h4,当前输出会被放弃。3.注意力步骤:采用编码器的隐状态向量和解码器生成的隐状态向量h4产生内容向量C4。4.将隐状态向量h4和内容向量C4拼接成一个新的向量。5.把新的向量传给一个前向连接网络(跟模型一起训练)。6.全连接层的输出表征当前时间上输出的词。7.执行下一步。https://jalammar.github.io/images/attention_tensor_dance.mp4?source=post_page---------------------------(Attention张量工作视频)Attention论文里的TransformerTransformer模型采用了一种编解码架构。在谷歌第一篇关于Attention 论文里,编码端有6层编码器,解码端有6层解码器。结构如图所示:
图2. Transformer结构图我们将回顾下每个模块。自注意力自注意力机制主要是关注学习对当前词和其周围词相关的某种人类的理解。首先,自注意力机制会去计算三种向量。在《Attention is all your need》论文中,向量的维数为512维。有查询向量、键向量和值向量三种向量。这三个向量是通过乘以字嵌入向量和一个随机初始化矩阵(论文中的维数为(64,512)产生的,反向传播过程中更新矩阵值。