具备注意力机制的seq2seq模型

做者|Renu Khandelwal
编译|VK
来源|Towards Data Science算法

在本文中,你将了解:网络

  • 为何咱们须要seq2seq模型的注意力机制?
  • Bahdanua的注意力机制是如何运做的?
  • Luong的注意力机制是如何运做的?
  • 什么是局部和全局注意力?
  • Bahdanua和Luong注意力机制的关键区别

什么是注意力,为何咱们须要seq2seq模型的注意力机制

让咱们考虑两个场景,场景一,你正在阅读与当前新闻相关的文章。第二个场景是你正在阅读准备考试。两种状况下的注意力水平是相同仍是不一样?架构

与新闻文章相比,你在准备考试时会至关注意阅读。在准备测试的时候,你会更加关注关键词来帮助你记住一个简单或复杂的概念。这也意味着咱们要专一于某一特定领域的任何深度学习任务。机器学习

序列到序列(Seq2Seq)模型使用编码器-解码器架构函数

seq2seq的几个场景学习

  • 神经机器翻译(NMT)
  • 图像字幕
  • 聊天机器人
  • 文本摘要等

Seq2Seq模型将源序列映射到目标序列。在神经机器翻译的状况下,源序列能够是英语,目标序列能够是印地语。测试

咱们将英语源语句传递给编码器;编码器将源序列的完整信息编码为单个实值向量,也称为上下文向量。而后,这个上下文向量被传递到解码器上,以生成目标语言(如印地语)中的输出序列。上下文向量负责将整个输入序列汇总为单个向量。编码

若是输入的句子很长,那么编码器中的一个向量能够保存全部要提供给解码器的相关信息吗spa

在预测目标词时,是否能够将注意力集中在句子中的几个相关词上,而不是集中在包含整个句子信息的单个向量上.net

注意力机制有助于解决问题。

注意力机制的基本思想是避免试图为每一个句子学习单一的向量表示,而是根据注意力权值来关注输入序列的特定输入向量。

在每一解码步骤中,解码器将被告知须要使用一组注意力权重对每一个输入单词给予多少“注意”。这些注意力权重为解码器翻译提供上下文信息

Bahdanau的注意力机制

Bahdanau等人。提出了一种学习结合对齐和翻译的注意力机制,它会执行编码器状态和解码器状态的线性组合。

让咱们学习Bahdanau提出的注意力机制

  • 编码器和解码器的全部隐状态(向前和向后)都用于生成上下文向量,这与seq2seq中仅使用最后一个编码器的隐状态不一样。
  • 注意力机制将输入和输出序列与前馈网络参数化的对齐。它有助于关注源序列中最相关的信息。
  • 该模型根据与源位置相关联的上下文向量和先前生成的目标词来预测目标词。

带有注意力机制的Seq2Seq模型由编码器、解码器和注意力层组成。

注意力层包括

  • 对齐层
  • 注意力权重
  • 上下文向量

对齐分数(Alignment score)

对齐分数映射位置“j”周围的输入与位置“i”处的输出匹配的程度。分数是基于前一个解码器的隐状态\(s_{(i-1)}\),就在预测目标单词和输入句子的隐状态hⱼ以前

解码器决定它须要关注源语句的哪一个部分,而不是让编码器将源语句的全部信息编码成一个固定长度的向量

对齐向量与源序列具备相同长度并在解码器的每一个时间步被计算

注意力权重

咱们将softmax激活函数应用于对齐分数,以得到注意力权重。

Softmax激活函数将获得和等于1的几率,这将有助于表示每一个输入序列的影响权重。输入序列的注意力权重越高,对目标词预测的影响越大。

在咱们的例子中,咱们看到一个更高的输入词的注意力权重值能够快速地预测目标词,तेज़ी

上下文向量

上下文向量用于计算解码器的最终输出。上下文向量\(c_i\)是注意力权重和编码器隐状态(\(h_1\)\(h_2\),…,\(h_{tx}\))的加权和,它映射到输入语句。

预测目标词

为了预测目标词,解码器使用

  • 上下文向量(\(c_i\)),
  • 上一时间步的解码器输出(\(y_{i-1}\))和
  • 前一解码器的隐状态(\(s_{i-1}\))

Luong注意力机制

Luong的注意力模型也被称为乘法注意力。它经过简单的矩阵乘法将编码状态和解码状态降为注意力得分。简单的矩阵乘法使它更快,更节省空间。

根据注意力在源序列中的位置,Luong提出了两种类型的注意力机制

  1. 全局注意力,关注全部来源位置
  2. 局部注意力,注意力只放在每一个目标词的源位置的一小部分上

全局注意力与地方关注的共性

  • 在每一个时间步t,在解码阶段,全局和局部注意的两种方法都首先以堆叠的LSTM顶层的隐状态\(h_t\)做为输入。
  • 这两种方法的目标都是导出上下文向量,以获取相关的源端信息,帮助预测当前的目标词y
  • 注意力向量被输入到下一个时间步中,以告知模型过去的决策。

全局和局部注意模型的不一样之处在于上下文向量是如何导出的

在讨论全局和局部注意以前,让咱们先了解一下在给定的时间t内,Luong的注意力机制所使用的约定

  • \(c_t\):上下文向量
  • \(a_t\):对齐向量
  • \(h_t\):当前目标隐状态
  • \(h_t\):当前源隐状态
  • \(y_t\):预测当前目标字
  • \(h˜_t\)ₜ:注意向量

全局注意力

  • 全局注意模型在计算上下文向量时考虑了编码器的全部隐状态。
  • 经过比较当前目标隐状态h与每一个源隐状态h的大小,导出了与源序列中的时间步数大小相等的可变长度对齐向量A
  • 对齐分数被称为基于内容的函数,咱们考虑三种不一样的选择

  • 全局上下文向量\(c_t\)是根据全部源隐状态\(h_t\)上的对齐向量\(a_t\)计算的加权平均值

当源序列是一个大段落或一个大文档时会发生什么

因为全局注意模型考虑了源序列中的全部单词来预测目标单词,所以在计算上变得很是昂贵,而且很难翻译出较长的句子

利用局部注意力能够解决全局注意模型的缺点

局部注意力

  • 局部注意力只关注每一个目标词的源位置的一小部分,不像全局注意力那样关注整个源序列
  • 计算成本低于全局注意力
  • 局部注意力模型首先在时间t为每一个目标词生成对齐位置\(p_t\)
  • 上下文向量\(c_t\)是在选定窗口内源隐状态集上做为加权平均值导出的
  • 对齐的位置能够单调地或预先地选择

Bahdanau和Luong注意力机制的关键区别

Bahdanau和long注意力机制中的注意力计算

Bahdanau等人,在双向编码器中使用前向和后向隐状态的串联,在其非堆叠单向解码器中使用前一个目标的隐状态

Loung等人,注意力使用编码器和解码器的顶层LSTM层的隐状态

Luong注意力机制使用当前解码器的隐状态来计算对齐向量,而Bahdanau使用上一个时间步的输出

对齐函数

Bahdanau只使用concat分数对齐模型,而Luong使用dot、general和concat对齐分数模型

有了注意力机制的知识,你如今能够构建强大的深层NLP算法。

原文连接:https://towardsdatascience.com/sequence-2-sequence-model-with-attention-mechanism-9e9ca2a613a

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/