深度学习与自然语言处理第五次大作业

本文介绍了基于Seq2seq模型的文本生成,包括Seq2seq模型的RNN结构、Attention机制,以及模型训练和实验过程。在实验中,使用天龙八部作为语料,尽管输出结果存在一些问题,但展示了Seq2seq在文本生成上的潜力。
摘要由CSDN通过智能技术生成


问题提出

基于 S e q 2 s e q Seq2seq Seq2seq模型来实现文本生成的模型,输入可以为一段已知的金庸小说段落,来生成新的段落并做分析。


一、Seq2seq$模型简介

Seq2seq是sequence to sequence的缩写。Seq2seq 是深度学习中最强大的概念之一,从翻译开始,后来发展到问答系统,音频转录等。顾名思义,它旨在将一个序列转换到另一个序列。前一个sequence称为编码器encoder,用于接收源序列source sequence,后一个sequence称为解码器decoder,用于输出预测的目标序列target sequence。Seq2Seq是自然语言处理中的一种重要模型,可以用于机器翻译、对话系统、自动文摘。

1.经典RNN结构

在这里插入图片描述

图1

这就是最经典的RNN结构,它的输入是:
在这里插入图片描述
输出为:
在这里插入图片描述

也就是说,输入和输出序列必有相同的时间长度!
在这里插入图片描述

图2

假设输入 x t xt xt是一个长度为 n i ni ni的列向量:
在这里插入图片描述

隐藏层ht是一个长度为 n h nh nh的列向量:
在这里插入图片描述

输出 y t yt yt是一个长度为 n o no no的列向量:
在这里插入图片描述

其中 n i ni ni n h nh nh n o no no都是由人工设定的。
在这里插入图片描述

图3

t t t时刻输入层–> t t t时刻隐藏层:
在这里插入图片描述

( t − 1 ) (t-1) (t1)时刻隐藏层–> t t t时刻隐藏层:
在这里插入图片描述

t t t时刻输入层 and ( t − 1 ) (t-1) (t1)时刻隐藏层–> t t t时刻隐藏层:
在这里插入图片描述

t t t时刻隐藏层–> t t t时刻输出层:
在这里插入图片描述

需要注意的是,对于任意时刻 t t t,所有的权值都相等,这也就是RNN中的“权值共享”,极大的减少参数量。
其实RNN可以简单的表示为:
在这里插入图片描述

在这里插入图片描述

图4

还有一个小细节:在 t = 1 t=1 t=1时刻,如果没有特别指定初始状态,一般都会使用全0的 h 0 h0 h0作为初始状态输入到 h 1 h1 h1

在这里插入图片描述

2.Sequence to Sequence模型

在这里插入图片描述

图5

Seq2Seq结构中,编码器Encoder把所有的输入序列都编码成一个统一的语义向量Context,然后再由解码器Decoder解码。在解码器Decoder解码的过程中,不断地将前一个时刻 [公式] 的输出作为后一个时刻 [公式] 的输入,循环解码,直到输出停止符为止。
在这里插入图片描述

图6 接下来以机器翻译为例,看看如何通过**Seq2Seq**结构把中文“早上好”翻译成英文“Good morning”:

将“早上好”通过Encoder编码,并将最后 t = 3 t=3 t=3时刻的隐藏层状态 h 3 h3 h3作为语义向量。
以语义向量为Decoder的 h 0 h0 h0状态,同时在 t = 1 t=1 t=1时刻输入<start>特殊标识符,开始解码。之后不断的将前一时刻输出作为下一时刻输入进行解码,直接输出<stop>特殊标识符结束。
当然,上述过程只是Seq2Seq结构的一种经典实现方式。与经典RNN结构不同的是,Seq2Seq结构不再要求输入和输出序列有相同的时间长度!
在这里插入图片描述

图7

进一步来看上面机器翻译例子Decoder端的 t t t时刻数据流,如图7:

首先对RNN输入大小为 [ n i , 1 ] [ni,1] [ni,1]的向量 x t xt xt(红点);
然后经过RNN输出大小为 [ n o , 1 ] [no,1] [no,1]的向量 y t yt yt(蓝点);
接着使用全连接 f c fc fc y t yt yt变为大小为 [ n c , 1 ] [nc,1] [nc,1]的向量 y t ′ yt' yt,其中 n c nc nc代表类别数量;
y t ′ yt' yt经过softmax和argmax获取类别index,再经过int2str获取输出字符;
最后将类别index输入到下一状态,直到接收到<stop>标志符停止。

3.Attention注意力机制

在这里插入图片描述

图8

Seq2Seq结构中,encoder把所有的输入序列都编码成一个统一的语义向量Context,然后再由Decoder解码。由于context包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个Context可能存不下那么多信息,就会造成精度的下降。除此之外,如果按照上述方式实现,只用到了编码器的最后一个隐藏层状态,信息利用率低下。

所以如果要改进Seq2Seq结构,最好的切入角度就是:利用Encoder所有隐藏层状态 h t ht ht解决Context长度限制问题。

接下来了解一下attention注意力机制基本思路(Luong Attention)
在这里插入图片描述

图9

考虑这样一个问题:由于Encoder的隐藏层状态 h t ht ht代表对不同时刻输入 x t xt xt的编码结果:
在这里插入图片描述即Encoder状态 h 1 h1 h1 h 2 h2 h2 h 3 h3 h3对应编码器对“早”,“上”,“好”三个中文字符的编码结果。那么在Decoder时刻 t − 1 t-1 t1通过3个权重 w 11 w11 w11</

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值