Seq2Seq

自编码器

  • 构建一个自编码器主要包括两部分:编码器(Encoder)和解码器(Decoder)。 编码器将输入压缩为潜在空间特征,解码器将潜在空间特征重构输出。
  • 自编码的核心价值是在于提取潜在的高阶空间特征信息。主要应用是两个方 面:数据去燥以及进行可视化降维。在这里插入图片描述在这里插入图片描述

什么是seq2seq

  • Seq2Seq(Sequence to Sequence),它被提出于2014年,最早由两 篇文章独立地阐述了它主要思想,分别是Google Brain团队的 《Sequence to Sequence Learning with Neural Networks》和Yoshua Bengio团队的《Learning Phrase Representation using RNN EncoderDecoder for Statistical Machine Translation》。
  • Seq2Seq属于一种Encoder-Decoder结构。在这里插入图片描述

Encoder-Decoder

在这里插入图片描述

  • Encoder-Decoder 的这种结构,其中 Encoder 是一个RNNCell(RNN ,GRU,LSTM 等) 结构。每个 time-step, 我们向 Encoder 中输入一个字/词(一般是表示这个字/词的一个实数向量),直到我们输入这个句子的最后 一个字/词 X T X_T XT ,然后输出整个句子的语义向量 c(一般情况下, c = h T = F ( [ X T ; h T − 1 ] W c=h_T=F([X_T;h_{T-1}]W c=hT=F([XT;hT1]W), X T X^T XT 是最后一个time-step输 入)。因为 RNN 的特点就是把前面每一步的输入信息都考虑进来了,所以理论上这个 c 就能够把整个句子 的信息都包含了,我们可以把 c 当成这个句子的一个语义表示,也就是一个句向量。在 Decoder 中,我们根 据 Encoder 得到的句向量 c, 一步一步地把蕴含在其中的信息分析出来。
    在这里插入图片描述在这里插入图片描述

Seq2Seq图解

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

Seq2Seq预测

在这里插入图片描述

Seq2Seq应用总结

  • Seq2Seq应用场景,包括了经典的机器翻译、文本摘要和对话生成等,也包括了 一些非常有趣的应用
    比如:根据公式图片生成 latex 代码,生成 commit message 等。
  • 自然 语言生成(NLG)是一个非常有意思,也非常有前途的研究领域,简单地说,就是解决一个 条件概率 p(output| context)的建模问题,即根据 context 来生成 output,这里的 context 可 以非常零活多样,大家都是利用深度学习模型对这个条件概率进行建模,同时加上大量的 训练数据和丰富的想象力,可以实现很多有趣的工作。
  • Seq2Seq 是一个简单易用的框架,开源的实现也非常多,但并不意味着直接生搬硬套就可以了,需要具体问题具体分析。此外,对于生成内容的控制,即 decoding 部分的研究也是一个非常有意思的方向,
    比如:如何控制生成文本的长度,控制生成文本的多样性,控制生成文本的信息量大小,控制生成文本
    的情感等等。

Seq2Seq原理

  • 最基础的Seq2Seq模型包含了三个部分,即Encoder、Decoder以 及连接两者的中间状态向量
    • Encoder通过学习输入,将其编码成 一个固定大小的状态向量c,继而将c传给Decoder
    • Decoder再通过对状态向量c的学习来进行输出。
  • 下图中,图中每一个box代表 了一个RNN Cell单元,通常是LSTM或者GRU。
    在这里插入图片描述
  • Encoder-Decoder框架可以这么直观地去理解:可以把它看作适合 处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用 处理模型。对于句子对<X,Y>,我们的目标是给定输入句子X,期待通过Encoder-Decoder框架来生成目标句子Y。X和Y可以是同一 种语言,也可以是两种不同的语言。而X和Y分别由各自的单词序 列构成: X = ( x 1 , x 2 , . . . , x m ) X=(x_1,x_2,...,x_m) X=(x1,x2,...,xm) Y = ( y 1 , y 2 , . . . , y n ) Y=(y_1,y_2,...,y_n) Y=(y1,y2,...,yn)
  • Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非 线性变换转化为中间语义表示C: C = F ( x 1 , x 2 , . . . , x m ) C=F(x_1,x_2,...,x_m) C=F(x1,x2,...,xm)
  • 对于解码器Decoder来说,其任务是根据句子X的中间语义表示C 和之前已经生成的历史信息 y 1 , y 2 , … . , y i − 1 y_1,y_2,….,y_{i-1} y1,y2,.,yi1来生成i时刻要生成的单词 y i y_i yi
  • 每个 y i y_i yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y y i = G ( C , y 1 , y 2 , . . . , y n ) y_i=G(C,y_1,y_2,...,y_n) yi=G(C,y1,y2,...,yn)

举个例子

输入下x,输出y,如下图

InputsTarget
How are you?I am good
Can you fly that thing?Not yet

在这里插入图片描述
几个重要的符号:

  • <PAD> 在训练中,我们将数据按批次输入。但同一批次中必须有相同的Sequence Length(序列长度 /time_steps)。所以我们会用<PAD>填充较短的输入。
  • <EOS> 它能告诉解码器句子在哪里结束,并且它允许解码器在其输出中表明句子结束的位置
  • <UNK> 忽视词汇表中出现频率不够高而不足以考虑在内的文字,将这些单词替换为 <UNK>
  • <GO> 解码器的第一个时间步骤的输入,以使解码器知道何时开始产生输出

下图为:word2id

在这里插入图片描述

编码器

在输入中,一个批次数据的长度大小需要一致,所以要进行填充。在这里插入图片描述对照word2id可以得到输入向量:在这里插入图片描述在这里插入图片描述

解码器

在这里插入图片描述
更具word2id找到对应的输出
在这里插入图片描述

  • 将RNN模块换成LSTM,则效果如下图。Encoder 和 Decoder 都是 4 个时间步 长的 LSTM(但是只有两个RNN Cell)。在这里插入图片描述
    小技巧:将源句子顺序颠倒后再输入 Encoder 中,比如源句子为“A B C”,那么输入 Encoder 的顺序为 “C B A”, 经过这样的处理后,取得了很大的提升,而且这样的处理使得模型能够很好
    地处理长句子。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

年少无为呀!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值