seq2seq 解释

什么是sequence学习?

序列到序列学习(Seq2Seq)是关于将模型从一个域(例如英语的句子)转换为另一域(例如将相同句子翻译为法语的序列)的训练模型。

它可用于机器翻译或免费问题解答(给定自然语言问题后生成自然语言答案)-通常,它可在需要生成文本的任何时间使用。

有多种处理此任务的方法,可以使用RNN或使用一维卷积网络。 在这里,我们将重点介绍RNN。

普通情况:输入和输出序列的长度相同

当输入序列和输出序列的长度相同时,您可以简单地使用Keras LSTM或GRU层(或其堆栈)来实现此类模型。 在此示例脚本中就是这种情况,该示例脚本显示了如何教RNN学习加编码为字符串的数字:

在这里插入图片描述

这种方法的一个缺点是,假设给定输入[… t]可以生成target [… t]。 在某些情况下有效(例如添加数字字符串),但在大多数情况下无效。 在一般情况下,有关整个输入序列的信息是必需的,以便开始生成目标序列。

一般情况:规范序列间

在一般情况下,输入序列和输出序列具有不同的长度(例如,机器翻译),并且需要整个输入序列才能开始预测目标。这需要更高级的设置,这是人们在没有其他上下文的情况下提到“序列模型的序列”时通常所指的东西。运作方式如下:

RNN层(或其堆栈)充当“编码器”:它处理输入序列并返回其自己的内部状态。请注意,我们放弃了编码器RNN的输出,仅恢复了状态。在下一步中,此状态将用作解码器的“上下文”或“条件”。

另一个RNN层(或其堆栈)充当“解码器”:在给定目标序列的先前字符的情况下,对其进行训练以预测目标序列的下一个字符。具体而言,它经过训练以将目标序列转换为相同序列,但在将来会以一个时间步偏移。重要的是,编码器将来自编码器的状态向量用作初始状态,这就是解码器如何获取有关应该生成的信息的方式。有效地,解码器学习以输入序列为条件的给定target [… t]生成target [t + 1 …]。

在这里插入图片描述
在推断模式下,即当我们想解码未知的输入序列时,我们会经历一个略有不同的过程:

1)将输入序列编码为状态向量。
2)从大小为1的目标序列开始(仅是序列开始字符)。
3)将状态向量和1个字符的目标序列馈送到解码器,以生成下一个字符的预测。
4)使用这些预测来采样下一个字符(我们仅使用argmax)。
5)将采样的字符追加到目标序列
6)重复直到生成序列结束字符或达到字符数限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值