Seq2Seq 模型知识总结

Seq2Seq 模型知识总结

  Seq2Seq(Sequence to Sequence,序列到序列模型) 是一种循环神经网络的变种,包括编码器 (Encoder) 和解码器 (Decoder) 两部分。Seq2Seq 是自然语言处理中的一种重要模型,可以用于机器翻译、对话系统、自动文摘
在这里插入图片描述

  Seq2Seq模型是输出的长度不确定时采用的模型,这种情况一般是在机器翻译的任务中出现,将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。

  如下图所,输入的中文长度为4,输出的英文长度为2
在这里插入图片描述

  在网络结构中,输入一个中文序列,然后输出它对应的中文翻译,输出的部分的结果预测后面,根据上面的例子,也就是先输出 “machine”,将"machine"作为下一次的输入,接着输出"learning",这样就能输出任意长的序列。

  机器翻译、人机对话、聊天机器人等,这些都是应用在当今社会都或多或少的运用到了我们这里所说的Seq2Seq

  举个简单的例子,当我们使用机器翻译时:输入(Hello) —>输出(你好)

  再比如在人机对话中,我们问机器:“你是谁?”,机器会返回答案“我是某某某”。

  如下图所示为一个简单的邮件对话的场景,发送方问:“你明天是否有空”;接收方回答:“有空,怎么了?”。
在这里插入图片描述

1 模型的提出

  提出:Seq2Seq被提出于2014年,最早由两篇文章独立地阐述了它主要思想,分别是Google Brain团队的 《Sequence to Sequence Learning with Neural Networks》 和Yoshua Bengio团队的 《Learning Phrase Representation using RNN Encoder-Decoder for Statistical Machine Translation》 。这两篇文章针对机器翻译的问题不谋而合地提出了相似的解决思路,Seq2Seq由此产生。

  其中,介绍几篇比较重要的 seq2seq 相关的论文:

  [1] Cho et al., 2014 . Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation.
  [2] Sutskever et al., 2014. Sequence to Sequence Learning with Neural Networks.
  [3] Bahdanau et al., 2014. Neural Machine Translation by Jointly Learning to Align and Translate.
  [4] Jean et. al., 2014. On Using Very Large Target Vocabulary for Neural Machine Translation.
  [5] Vinyals et. al., 2015. A Neural Conversational Model. Computer Science.

2 RNN 结构及使用

在这里插入图片描述

图 RNN 模型

  RNN 基本的模型如上图所示,每个神经元接受的输入包括:前一个神经元的隐藏层状态 h(用于记忆) 和当前的输入 x (当前信息)。神经元得到输入之后,会计算出新的隐藏状态 h 和输出 y,然后再传递到下一个神经元。因为隐藏状态 h 的存在,使得 RNN 具有一定的记忆功能。
针对不同任务,通常要对 RNN 模型结构进行少量的调整,根据输入和输出的数量,分为三种比较常见的结构:N vs N、1 vs N、N vs 1

2.1 N vs N

加粗样式

图 N vs N 模型

  上图是RNN 模型的一种 N vs N 结构,包含 N 个输入 x1, x2, …, xN,和 N 个输出 y1, y2, …, yN。N vs N 的结构中,输入和输出序列的长度是相等的,通常适合用于以下任务:

词性标注训练语言模型,使用之前的词预测下一个词等

2.2 1 vs N

在这里插入图片描述

图 1 vs N 模型(1)
在这里插入图片描述

图 1 vs N 模型(2)

  在 1 vs N 结构中,我们只有一个输入 x,和 N 个输出 y1, y2, …, yN。可以有两种方式使用 1 vs N,第一种只将输入 x传入第一个 RNN 神经元,第二种是将输入 x 传入所有的 RNN 神经元。1 vs N 结构适合用于以下任务:

  图像生成文字,输入 x 就是一张图片,输出就是一段图片的描述文字。根据音乐类别,生成对应的音乐。根据小说类别,生成相应的小说。

2.3 N vs 1

在这里插入图片描述

图 N vs 1 模型

  在 N vs 1 结构中,我们有 N 个输入 x1, x2, …, xN,和一个输出 y。N vs 1 结构适合用于以下任务:

  序列分类任务,一段语音、一段文字的类别,句子的情感分析。

3. Seq2Seq 模型

3.1 Seq2Seq 结构

  上面的三种结构对于 RNN 的输入和输出个数都有一定的限制,但实际中很多任务的序列的长度是不固定的,例如机器翻译中,源语言、目标语言的句子长度不一样;对话系统中,问句和答案的句子长度不一样。

  Seq2Seq 是一种重要的 RNN 模型,也称为 Encoder-Decoder 模型,可以理解为一种 N×M的模型。模型包含两个部分:Encoder 用于编码序列的信息,将任意长度的序列信息编码到一个向量 c 里。而 Decoder 是解码器,解码器得到上下文信息向量 c 之后可以将信息解码,并输出为序列。Seq2Seq 模型结构有很多种,下面是几种比较常见的:
在这里插入图片描述

图 第一种 Seq2Seq 模型
在这里插入图片描述

图 第二种 Seq2Seq 模型
在这里插入图片描述

图 第三种 Seq2Seq 模型

3.2 编码器 Encoder

  这三种 Seq2Seq 模型的主要区别在于 Decoder,它们的 Encoder 都是一样的。下图是 Encoder 部分,Encoder 的 RNN 接受输入 x,最终输出一个编码所有信息的上下文向量 c,中间的神经元没有输出。Decoder 主要传入的是上下文向量 c,然后解码出需要的信息。
在这里插入图片描述

图 Encoder

  从上图可以看到,Encoder 与一般的 RNN 区别不大,只是中间神经元没有输出。其中的上下文向量 c可以采用多种方式进行计算。
在这里插入图片描述

图 上下文向量 c 计算公式

  从公式可以看到,c可以直接使用最后一个神经元的隐藏状态 hN 表示;也可以在最后一个神经元的隐藏状态上进行某种变换 hN 而得到,q 函数表示某种变换;也可以使用所有神经元的隐藏状态 h1, h2, …, hN 计算得到。得到上下文向量 c 之后,需要传递到 Decoder。

3.3 解码器 Decoder

  Decoder 有多种不同的结构,这里主要介绍三种。

第一种
在这里插入图片描述

图 第一种 Decoder 结构

  第一种 Decoder 结构比较简单,将上下文向量 c当成是 RNN 的初始隐藏状态,输入到 RNN 中,后续只接受上一个神经元的隐藏层状态 h’ 而不接收其他的输入 x。第一种 Decoder 结构的隐藏层及输出的计算公式:
在这里插入图片描述

图 第一种 Decoder 隐藏层及输出层

第二种
在这里插入图片描述

图 第二种 Decoder 结构

  第二种 Decoder 结构有了自己的初始隐藏层状态 h’0,不再把上下文向量 c当成是 RNN 的初始隐藏状态,而是当成 RNN 每一个神经元的输入。可以看到在 Decoder 的每一个神经元都拥有相同的输入 c,这种 Decoder 的隐藏层及输出计算公式:
在这里插入图片描述

图 第二种 Decoder 隐藏层及输出层

第三种
在这里插入图片描述

图 第三种 Decoder 结构

  第三种 Decoder 结构和第二种类似,但是在输入的部分多了上一个神经元的输出 y’。即每一个神经元的输入包括:上一个神经元的隐藏层向量 h’,上一个神经元的输出 y’,当前的输入 c(Encoder 编码的上下文向量)。对于第一个神经元的输入 y’0,通常是句子其实标志位的 embedding 向量。第三种 Decoder 的隐藏层及输出计算公式:
在这里插入图片描述

图 第三种 Decoder 隐藏层及输出层

4 Seq2Seq模型使用技巧

4.1 Teacher Forcing

  Teacher Forcing 用于训练阶段,主要针对上面第三种 Decoder 模型来说的,第三种 Decoder 模型神经元的输入包括了上一个神经元的输出 y’。如果上一个神经元的输出是错误的,则下一个神经元的输出也很容易错误,导致错误会一直传递下去。

  而 Teacher Forcing 可以在一定程度上缓解上面的问题,在训练 Seq2Seq 模型时,Decoder 的每一个神经元并非一定使用上一个神经元的输出,而是有一定的比例采用正确的序列作为输入。

  举例说明,在翻译任务中,给定英文句子翻译为中文。“I have a cat” 翻译成 “我有一只猫”,下图是不使用 Teacher Forcing 的 Seq2Seq:
在这里插入图片描述

图 不使用 Teacher Forcing 的 Seq2Seq

  如果使用 Teacher Forcing,则神经元直接使用正确的输出作为当前神经元的输入。
在这里插入图片描述

图 不使用 Teacher Forcing 的 Seq2Seq

4.2 Attention

  在 Seq2Seq 模型,Encoder 总是将源句子的所有信息编码到一个固定长度的上下文向量 c中,然后在 Decoder 解码的过程中向量 c 都是不变的。这存在着不少缺陷:

  对于比较长的句子,很难用一个定长的向量 c 完全表示其意义。RNN 存在长序列梯度消失的问题,只使用最后一个神经元得到的向量 c 效果不理想。与人类的注意力方式不同,即人类在阅读文章的时候,会把注意力放在当前的句子上。Attention 即注意力机制,是一种将模型的注意力放在当前翻译单词上的一种机制。例如翻译 “I have a cat”,翻译到 “我” 时,要将注意力放在源句子的 “I” 上,翻译到 “猫” 时要将注意力放在源句子的 “cat” 上。

  使用了 Attention 后,Decoder 的输入就不是固定的上下文向量 c了,而是会根据当前翻译的信息,计算当前的 c。
在这里插入图片描述

图 添加 Attention 之后的 Decoder

  Attention 需要保留 Encoder 每一个神经元的隐藏层向量 h,然后 Decoder 的第 t 个神经元要根据上一个神经元的隐藏层向量 h’t-1 计算出当前状态与 Encoder 每一个神经元的相关性 et。et 是一个 N 维的向量 (Encoder 神经元个数为 N),若 et 的第 i 维越大,则说明当前节点与 Encoder 第 i 个神经元的相关性越大。et 的计算方法有很多种,即相关性系数的计算函数 a 有很多种:
在这里插入图片描述

图 Attention 相关性系数

  上面得到相关性向量 et 后,需要进行归一化,使用 softmax 归一化。然后用归一化后的系数融合 Encoder 的多个隐藏层向量得到 Decoder 当前神经元的上下文向量 ct:
在这里插入图片描述

图 Attention 上下文向量 c

4.3 beam search

  beam search 方法不用于训练的过程,而是用在测试的。在每一个神经元中,我们都选取当前输出概率值最大的 top k个输出传递到下一个神经元。下一个神经元分别用这 k 个输出,计算出 L 个单词的概率 (L 为词汇表大小),然后在 kL 个结果中得到 top k 个最大的输出,重复这一步骤。

5 Seq2Seq 总结

  Seq2Seq 模型允许我们使用长度不同的输入和输出序列,适用范围相当广,可用于机器翻译,对话系统,阅读理解等场景。
  Seq2Seq 模型使用时可以利用 Teacher Forceing,Attention,beam search 等方法优化。

参考文献

  1、Seq2Seq 模型详解
  2、 Seq2Seq模型介绍
  3、seq2seq介绍

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南有芙蕖

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值