详解从 Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention模型

不羁岁月 提交于 2019-12-15 18:53:35

欢迎点击参观我的 ——> 个人学习网站

注:本文的所有模型只涉及自然语言处理领域,同时本文不涉及太多复杂公式推导。

一、Seq2Seq 模型

1. 简介

Sequence-to-sequence (seq2seq) 模型,顾名思义,其输入是一个序列,输出也是一个序列,例如输入是英文句子,输出则是翻译的中文。seq2seq 可以用在很多方面:机器翻译、QA 系统、文档摘要生成、Image Captioning (图片描述生成器)。

2. 基本框架

第一种结构

[参考1]论文中提出的 seq2seq 模型可简单理解为由三部分组成:Encoder、Decoder 和连接两者的 State Vector (中间状态向量) C 。
这里写图片描述

上图中 EncoderDecoder 可以是一个 RNN ,但通常是其变种 LSTM 或者 GRUEncoderDecoder 具体介绍请见第三部分。

第二种结构

该结构是最简单的结构,和第一种结构相似,只是 Decoder 的第一个时刻只用到了 Encoder 最后输出的中间状态变量
这里写图片描述

应用:

  • 在英文翻译中,将英文输入到 Encoder 中,Decoder 输出中文。

参考1:-原创翻译- 基于RNNEncoder–Decoder的机器翻译L(earning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation)

  • 在图像标注中,将图像特征输入到 Encoder 中,Decoder 输出一段文字对图像的描述。

  • 参考2:-原创翻译- 图像标注生成器 (Show and Tell: A Neural Image Caption Generator)

  • QA 系统中,将提出的问题输入 Encoder 中,Decoder 输出对于问题的回答。

  • ……

    注:确保你对所有模型都有所了解后再阅读应用后面的参考链接。

    二、RNN 结构

    1. 为什么在这里提及 RNNRNN 变种?

    接下来要介绍的 Encoder-Decoder 模型中,EncoderDecoder 两部分的输入输出可以是文字、图像、语音等等,所以 EncoderDecoder 一般采用 CNNRNNLSTMGRU 等等。这里,我们只介绍经典 RNN 的结构。

    如果对 LSTM 感兴趣的话,请参考 -原创翻译- 详解 LSTM(Understanding LSTM Networks)

    2. 图解 RNN 结构

    RNN 大都用来处理像一串句子、一段语音这种的序列化数据。展开的 RNN 结构图如下:
    这里写图片描述

    由图可见,其当前时间 t 的输出依赖两部分:前一时刻的隐层 ht1ht−1

    下面主要介绍经典的三种 RNN 结构:

    (1) n VS 1

    这里写图片描述

    注:圆圈代表给定的输入,箭头代表运算,矩形代表隐层,也就是箭头运算后的结果。其中参数 WUVW、U、V 可以看做是第二个单词…

    这种结构可应用于情感分析、文本分类等等。

    (2) 1 VS n

    这里写图片描述

    下图是把输入当作每个时刻的输入:
    这里写图片描述

    这种结构可应用于应用于 Image Caption ,输入是图像的特征矩阵,输出是一段对图像的描述。

    (3) n VS n

    这里写图片描述

    这种结构可应用于机器翻译等。如果感兴趣,可以参考下面的 文章。作者使用 RNN 实现了根据一个字母推测下一个字母的概率。

    参考3:-原创翻译- RNNs的“神奇功效”(The Unreasonable Effectiveness of Recurrent Neural Networks)

    (4) n VS m

    在机器翻译中,源语言和目标语言的句子序列都是不等长的,而原始的 n VS n 结构都是要求序列等长的。为此,我们有了 n VS m 结构,这种结构又被称为 Encoder-Decoder模型 。具体请见下一部分。

    三、Encoder-Decoder 模型

    1. 简介

    在第二节的第四部分,我们提出了 RNNn VS m 结构:Encoder-Decoder 模型,Encoder-Decoder 模型是深度学习中常见的一种模型。在本文中,我们只简单介绍其在文本-文本的应用,比如将英语翻译成汉语,所以该模型也可以称为 Seq2Seq 模型 。下图为 Encoder-Decoder 模型的抽象图:
    这里写图片描述

    2. 分析

    1) Encoder

    给定句子对

    2) Decoder

    得到中间语义向量 C 后,使用 Decoder 进行解码。Decoder根据中间状态向量 C 和已经生成的历史信息 y1,y2…yi-1 去生成 t 时刻的单词 yi

    yi=g(C,y1,y2,yi1)yi=g(C,y1,y2,yi−1)

    如果直接将 c 输入到 Decoder 中,则是 Seq2Seq 模型的第二种模型:
    这里写图片描述

    如果将 c 当作 Decoder 的每一时刻输入,则是 Seq2Seq 模型的第一种模型:
    这里写图片描述

    • 中英翻译中,

    四、Attention 模型

    1. Encoder-Decoder 模型的局限性

    (1) 从第三节的第一部分的 Encoder-Decoder 模型的抽象图中可以看出 EncoderDecoder 的唯一联系只有语义编码 ,即将整个输入序列的信息编码成一个固定大小的状态向量再解码,相当于将信息”有损压缩”。很明显这样做有两个缺点:

    • 中间语义向量无法完全表达整个输入序列的信息。
    • 随着输入信息长度的增加,由于向量长度固定,先前编码好的信息会被后来的信息覆盖,丢失很多信息。

    (2)大家看第三节的第二部分的第二个 Decoder 过程,其输出的产生如下:

    y1=g(C,h0)y1=g(C,h0′)

    y2=g(C,y1)y2=g(C,y1)

    y3=g(C,y1,y2)y3=g(C,y1,y2)

    明显可以发现在生成 y1y2y3y1、y2、y3 时,语义编码 对它们所产生的贡献都是一样的。例如翻译:Cat chase mouseEncoder-Decoder 模型逐字生成:“猫”、“捉”、“老鼠”。在翻译 mouse 单词时,每一个英语单词对“老鼠”的贡献都是相同的。如果引入了Attention 模型,那么 mouse 对于它的影响应该是最大的。

    2. 图解 Attention

    为了解决上面两个问题,于是引入了 Attention 模型。Attention 模型的特点是 Decoder 不再将整个输入序列编码为固定长度的中间语义向量 ,而是根据当前生成的新单词计算新的 CiCi ,使得每个时刻输入不同的 ,这样就解决了单词信息丢失的问题。引入了 AttentionEncoder-Decoder 模型如下图:
    这里写图片描述

    对于刚才提到的那个“猫捉老鼠”的翻译过程变成了如下:

    y1=g(C1,h0)y1=g(C1,h0′)

    y2=g(C2,y1)y2=g(C2,y1)

    y3=g(C3,y1,y2)y3=g(C3,y1,y2)

    整个翻译流程如下:

    这里写图片描述

    图中输入是 Cat chase mouseEncoder 中隐层 h1、h2、h3 可看作经过计算 Cat、chase、mouse 这些词的信息。

    这里写图片描述

    使用 aijaij 大。

    h3

    那么参数 aijaij 是如何得到呢?

    Encoder 中第 j 个隐层单元 hjhj

    例如 a1ja1j 的计算过程:

    a1j

    a2ja2j 的计算过程:

    a2j

    参考 :引入Attention 并基于 RNNEncoder-Decoder 模型公式推导

    欢迎点击参观我的 ——> 个人学习网站

    标签
    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!