《深度学习进阶:自然语言处理》第7章 基于RNN生成文本

《深度学习进阶:自然语言处理》啃书系列

  第2章 自然语言和单词的分布式表示
  第3章 word2vec
  第4章 word2vec的高速化
  第5章 RNN
  第6章 Gated RNN
  第7章 基于RNN生成文本
  第8章 Attention

第7章 基于RNN生成文本

本章将使用语言模型进行文本生成。通过组合两个RNN,实现seq2seq(sequence to sequence,从时序到时序)神经网络。

7.1 使用语言模型生成文本

7.1.1 使用RNN生成文本的步骤

第6章 Gate RNN(LSTM)讲了使用LSTM的语言模型。
在这里插入图片描述

图7-1

我们可以使用LSTMLM生成文本。
在这里插入图片描述

图7-4

例如,我们将LSTMLM在语料库“you say goobye and i say hello.”进行训练之后,我们将“i”作为文本生成的第一且唯一的提示词,此时模型会输出上图左上角的概率分布,我们将概率最大的单词“say”作为下一个时刻的输入,随即生成上图右上角的概率分布,可见概率最大的单词为"hello"。由此循环往复,便可生成指定长度或者指定字符结尾的文本。

每个时刻生成的概率分布,我们可以选择概率最大的单词最为下个时刻的输入,这样对于指定的语言模型,会生成相同的文本。也可以按照概率分布进行抽样,概率大的单词被选中的可能性大,概率小的单词被选中的可能性小,但是都有可能被选中作为下一时刻的输入,这样语言模型就会生成多种多样的文本。

7.1.2 文本生成的实现

略。(好在不是习题集后的答案 😛)

7.1.3 更好的文本生成

略。

7.2 seq2seq模型

进入正题。seq2seq天然就是为了解决上面的问题而生的:根据给定的文本,生成另一段文本。
世界上充斥着序列数据,文本就是有序的序列数据。
seq2seq可以使用多种方式实现。下面介绍使用两个RNN实现的方式。

7.2.1 seq2seq的原理

seq2seq模型也称为Encoder-Decoder模型,有两个模块——Encoder(编码器)和 Decoder(解码器)。简单理解,编码器就是将人能看懂的内容转化为人看不懂的、机器才能读懂的信息,解码器就是将人看不懂的信息翻译为人能看懂的信息。前面说的one-hot编码就是编码方式中的一种,将one-hot与词库对应解析编码对应的字符,就是解码。

下面说明seq2seq中的编码器和解码器是如何工作的。翻译是一个典型的seq2seq场景。
在这里插入图片描述

图7-5

编码器首先对原文进行编码,然后将编码好的信息传递给解码器,由解码器生成目标文本。此时,编码器编码的信息浓缩了翻译所必需的信息,解码器基于这个浓缩的信息生成目标文本。

如果将上一章介绍的LSTM引入作为编码器和解码器,结构如下:
在这里插入图片描述

图7-9

编码器利用RNN将时序数据转换为隐藏状态 h h h,不管原文句子有多长,最终都是转化为相同长度的向量。

而解码器的结构和上一节的神经网络完全相同,额外的不同在于网络会接收隐藏向量 h h h。不过也可以说是上一节的网络接收的是0向量。隐藏状态是两个网络正向传播和反向传播的桥梁。

另外,上面的seq2seq使用了特殊符作为文本的起始和结束符号,也可以使用别的符号。

7.2.2 时序数据转换的简单尝试

将三位数内加法看做是一个时序转换的toy problem。
在这里插入图片描述

图7-10

左边的输入按照字符级进行序列拆分,左边最大长度7,右边最大长度4。

7.2.3 可变长度的时序数据

左右的输入都是长度可变的,但是为了实现mini-batch,输入输出数据需要在一个batch内保持长度一致。所以在一个batch内,超出长度的输入需要截断,长度不足的需要补充。
在这里插入图片描述

图7-11

在输出的开始处加上了分隔符“_”(下划线),使得输出数据的字符数统一为5。简单起见,这里我们不使用表示字符输出结束的分隔符,始终输出固定数量的字符。

7.2.4 加法数据集

7.3 seq2seq的实现

7.4 seq2seq的改进

7.4.1 反转输入数据(Reverse)

反转输入数据的顺序。
在这里插入图片描述

图7-23

据研究,在许多情况下,使用这个技巧后,学习进展得更快,最终的精度也有提高。
虽然理论上不是很清楚,但是直观上可以认为,因为通过反转,输入语句的开始部分和对应的转换后的单词之间的距离变近,所以梯度的传播变得更容易,学习效率也更高。

7.4.2 偷窥(Peeky)

解码器从编码器获取的唯一信息是最后的隐藏状态 h h h,且解码器只有在开始时刻使用了 h h h
在这里插入图片描述

图7-25

h h h分配给解码器的其他层,能有效提升效果,这种方法称为偷窥(Peeky)。如下所示:
在这里插入图片描述

图7-26

有两个向量同时被输入到了LSTM层和Affine层,这实际上表示两个向量的拼接(concatenate)。
加上了Peeky的seq2seq的结果大幅变好。

7.5 seq2seq的应用

  • 机器翻译:将“一种语言的文本”转换为“另一种语言的文本”
  • 自动摘要:将“一个长文本”转换为“短摘要”
  • 问答系统:将“问题”转换为“答案”
  • 邮件自动回复:将“接收到的邮件文本”转换为“回复文本”

7.5.1 聊天机器人

7.5.2 算法学习

7.5.3 自动图像描述

自动图像描述(image captioning)
在这里插入图片描述

图7-31
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
深度学习自然语言处理是指在深度学习的基础上,更加深入地应用于自然语言处理领域的技术和方法。它主要包括以下几个方面的内容: 1. 词向量表示:深度学习自然语言处理中,常用的一种技术是将词语表示为向量形式,以便于计算机行处理。常见的词向量表示方法有Word2Vec、GloVe等。 2. 语言模型:语言模型是自然语言处理中的一个重要任务,它用于预测下一个词语或者句子的概率。深度学习方法可以通过使用循环神经网络(RNN)或者Transformer等模型来建立语言模型。 3. 序列标注:序列标注是指给定一个输入序列,为每个输入元素打上相应的标签。在自然语言处理中,常见的序列标注任务包括命名实体识别、词性标注等。深度学习方法可以通过使用条件随机场(CRF)或者长短时记忆网络(LSTM)等模型来解决序列标注问题。 4. 文本分类:文本分类是指将文本划分到不同的类别中。在自然语言处理中,常见的文本分类任务包括情感分析、垃圾邮件过滤等。深度学习方法可以通过使用卷积神经网络(CNN)或者循环神经网络(RNN)等模型来文本分类。 5. 机器翻译:机器翻译是指将一种语言的文本转换为另一种语言的文本。深度学习方法可以通过使用编码-解码模型,如循环神经网络(RNN)或者Transformer等模型来行机器翻译。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MangoGO芒狗狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值