安静到无声

V1

2022/10/24阅读:35主题:萌绿

基于Attention的Seq2Seq

前言

昨天有位大神在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模型当中。

  1. 第一种包含两个可学习的参数 ,主要做法如下所示: 在这里插入图片描述
  2. 第二种做法主要过程如下,也有两个需要学习参数矩阵 在这里插入图片描述 至此,我们可以得到m个权重 ,它对应了m个Eecoder的输出状态 。。。 ,我们将这m个权重 与m个 进行加权求和,得到上下文向量(context vetor) 。其实这种操作是不难理解的, 简单讲,每一个 都表示与 的相关性,较大的值表明与对应的状态 相关性较大,反之较小,我们求他们的加权平均和,自然使得重要的地方更突出,不重要的地方就不突出。

2.2 Eecoder过程

现在开始介绍Eecoder的过程,这里我们将按照第一次输入 ,第二次输入 ,。。。,分步进行介绍~。首先是第一步。

  1. 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. 总结

  1. 改善了Seq2Seq模型,不会造成信息的遗忘。
  2. 解码器知道关注点在哪里。
  3. 需要消耗大量的计算量。

参考

BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT RNN模型与NLP应用

分类:

人工智能

标签:

自然语言处理

作者介绍

安静到无声
V1

公众号:安静到无声成长之路