前言
昨天有位大神在CSDN上发表了一篇题为BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT
的文章,仔细阅读前两章后,可谓是受益匪浅。但是在研读时,由于自身对NLP相关知识有所缺乏,使我对一些基础概念不甚理解(尽管作者的描述已经特别简单易懂~)。其中Attention便是其中之一,在此之前,我一直以为在Seq2Seq之后便是Self-attention(相关介绍见自注意机制(Self-attention))这一伟大的发明。查阅相关文献后才了解到,由于Seq2Seq对于长句子具有遗忘性,在2015年ICLR会议上Bahdanau,Cho等人提出了Attention机制以解决这个问题,而Self-attention是在2016年提出的。本文主要结合B站UP主ShusenWang的所讲的关于RNN模型与NLP应用的相关内容和自己的理解构成。
1. 回顾Seq2Seq
Seq2Seq是基于RNN和LSTM的Encoder-Decoder结构的网络,它在很多领域都取得了巨大的成功,比如机器翻译,语音识别,文本摘要等。它输入是一个序列,其输出也是一个序列。在Encoder中,将序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成我们想要的序列输出出来,基本结构如下:
但是这种模型在解码时只有最后一个状态向量传递给解码器,即Encoder的最后一个状态,如下图所示,由于其余位置的状态并没有直接参与后续的解码任务,这冥冥之中导致了一些信息的丢失,特别是在处理长对话时,仅仅依靠最后一个状态难以记住语句所有的信息。
下图是单词量和BLEU(双语互译质量评估辅助工具)的关系(挖坑:关于BLEU这些评价指标,后面我将通过一个文章进行总结)。从图可以看出,当单词量大于20后,不带有Attention的Seq2Seq模型的BLEU值出现了明显下降;相反带有Attention的Seq2Seq模型的BLEU值并没有下降,这说明了Attention记住的关键了信息,并实现了较好的状态解码。
2. 基于Attention的Seq2Seq
2.1 相关性计算
本小节也采用和视频RNN模型与NLP应用一致的描述方式,对Seq2Seq model for attention做出解释。在上一小节已经说过,Seq2Seq的Eecoder输出的是最后一个状态,这也是Decoder的第一个输入,我们利用来表示。而基于attention的方法最大的一个特点就是,在进行Decoder时,不仅考虑的Eecoder最后一个状态,也考虑之前每个的输入单词产生的状态,即、、。。。等,如下图所示。原始作者引入了一个权重参数来表示和Decoder输入状态的相关性。我们将Eecoder的任意输出状态与Decoder的第一个输入状态的相关性记为:
接下来就是的学习,这里提供了两种方法,第一个是原始论文的计算方法,第二个是一种更为流行的计算方法,也广泛应用于Transformer模型当中。
- 第一种包含两个可学习的参数和,主要做法如下所示:
- 第二种做法主要过程如下,也有两个需要学习参数矩阵和。
至此,我们可以得到m个权重,它对应了m个Eecoder的输出状态、、。。。,我们将这m个权重与m个进行加权求和,得到上下文向量(context vetor)。其实这种操作是不难理解的, 简单讲,每一个都表示与的相关性,较大的值表明与对应的状态和相关性较大,反之较小,我们求他们的加权平均和,自然使得重要的地方更突出,不重要的地方就不突出。
2.2 Eecoder过程
现在开始介绍Eecoder的过程,这里我们将按照第一次输入,第二次输入,。。。,分步进行介绍~。首先是第一步。
- One step。在原始的Seq2Seq中,我们的输入有和,如下图所示,
而基于Attention的Seq2Seq的Eecoder操作,是在此基础上级联了之前计算得到上下文向量(context vetor),经过运算即可得到第一步的输出。
2.Two step。与之前的操作类似,我们需要计算(第一步的输出),与decoder输出的m个状态的相关性,具体方法与上文描述一致,进而可获得上下文向量(context vetor),最后将、和级联送入计算单元获得,方法见下图:
3. Three step。这一步和上文完全相同不在赘述。最终我们得到一系列输出、 … :
2.3 复杂度分析和权重可视化
对于一个,我们需要计算m个,如果解码有个状态,则一个用个权重,所以该算法的时间复杂度是,这个计算压力也是巨大的。
下图以英语翻译为法语为例,通过可视化权重,来说明之前的关联性。图中线越粗,表示权重值越大,之间的关联性也越大。
比如英语单词Arae(面积;地区,地段)和法语单词zone(区域),他们具有相同的意思,这说明了Attention的实际意义。
3. 总结
- 改善了Seq2Seq模型,不会造成信息的遗忘。
- 解码器知道关注点在哪里。
- 需要消耗大量的计算量。
参考
BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT