3.5-RNN文本生成

1语言模型生成文本的顺序

  1. 前面我们已经能够实现使用下图的LSTM网络进行语言建模;

    在这里插入图片描述

  2. 对于一个已经在语料库上学习好的LSTM模型;如果语料库就只是you say goobye and i say hello;那么当把单词i输入到模型中,Time xxx层的第一个LSTM层将会输出一个概率分布,这个概率分布中概率最大的那个对应的单词应该是say;如下图所示;

    在这里插入图片描述

  3. 上图的情况是按照选择概率最大的那个作为当前输出的文本的;因此可以说是“确定的”,只要模型训练的好,他都会倾向于输出那些准确的单词;

  4. 那么我们就可以接着以这个层的输出的单词作为下一个时刻的输入,输出下一个时刻的概率分布,然后选择概率最大的,如下图所示;以此类推,就可以一直输出下去;我们可以人为控制什么时候停止,也可以设定当模型输出的下一个单词是特殊结束符号标记的时候就终止;如果模型训练的好,模型觉得要说完了,就会输出一个特殊结束符号标记,从而自动停止;

    在这里插入图片描述

  5. 另一种方法是以这个概率分布作为准则,随机的从词库中选择单词;就是之前说的np.choice方法;这样一来:

    1. 因为具有随机性,因此被选到的单词(被采样到的单词)每次都不一样
    2. 但是选到的单词又具有倾向性,即概率高的单词容易被选到,概率低的单词难以被选到。
  6. 这种引入随机性的方法,可以让模型生成训练数据中没有的文本,即新的文本;不过构成这些新文本的单词依然是那么些个单词,毕竟训练集里面只有这些单词;

2使用改进前的LSTM语言模型尝试生成文本

  1. 这里使用的是未改进的LSTMLM模型;且不使用训练好的权重;只是看一下生成的过程;
  2. 代码位于:RNN_generate/RNNLM_gen.py · GY/basicNLP - 码云 - 开源中国 (gitee.com);
  1. 生成的过程可以描述为:

    1. 给初始的单词,reshape之后输入到模型中;
    2. 由于Time xxx层是权重共享的,因此可以根据输入的数据的维度调整T值;
    3. 那么这里每次都输入一个单词,用上图中不带Time的层来输出一个概率分布;
    4. 以一定概率选择要预测的单词,然后将这个单词再次作为输入,输入到上图中不带Time的层,再输出一个概率分布;以此类推;直到全部输出完;
  2. 这里直接继承了未改进的Rnnlm类,然后实现了生成函数;生成函数代码如下:

    1. model 的 predict() 方法进行的是 mini-batch 处理,所以输入 x 必须是二维数组。因此,即使在只输入 1 个单词 ID 的情况下,也要将它的批大小视为 1,并将其整理成形状为 1 × 1 的 NumPy 数组
    class RnnlmGen(Rnnlm):def generate(self, start_id, skip_ids=None, sample_size=100):'''@param start_id: 第一个单词的ID@param skip_ids: 不生成的ID;用于排除一些填充符之类的@param sample_size: 生成的长度@return:生成的文本'''word_ids = [start_id]x = start_idwhile len(word_ids) < sample_size:# x = np.array(x).reshape(1, 1)if GPU:x = cupy.array(x).reshape(1, 1)else:x = np.array(x).reshape(1, 1)score = self.predict(x) # (N,T,V);这里是(1,1,10000)p = softmax(score.flatten()) # score.flatten()展平成一维的;softmax函数中设置了一维的计算方式if GPU:sampled = cupy.random.choice(len(p), size=1, p=p)else:sampled = np.random.choice(len(p), size=1, p=p)if (skip_ids is None) or (sampled not in skip_ids):x = sampledword_ids.append(int(x[0]))return word_ids
    
  3. 以下是生成文本;因为没有训练,所以杂乱无序;

    you fired designing indianapolis counsel calgary readers reviewed wright shouting underlying
    existing agip frankfurt depress interstate steelmakers natural weeks begins gatt stiff delivering 
    telesis grounds boards stream louisiana breed sample indexing acquiring commentary hired al 
    philip blast helping dictaphone attention confusion auditors beaten arbitrage ii scholars 
    forecasting monopolies burke fit spacecraft takeover-stock engineering aftershocks arise shipbuilding 
    minivans along recalls bone recreational year may disappears sixth motivated monitors understanding 
    swing previously coupon expects difference plo remain attendants sullivan kansas peninsula patent 
    skeptical fields galileo blackstone battered steps anger fusion mandatory mca trains postal 
    forest-products scrapped faa censorship tea building tests milton
    

3使用改进后的LSTM语言模型尝试生成文本

  1. 这里使用之前训练好的权重;权重位于:BetterRnnlm.pkl · GY/basicNLP - 码云 - 开源中国 (gitee.com);

  2. 代码位于:RNN_generate/betterRNNLM_gen.py · GY/basicNLP - 码云 - 开源中国 (gitee.com);

  3. 还演示了给模型一句话或者一句话开头几个单词,然后让其续写的方法;

    1. 代码位于:RNN_generate/betterRNNLM_gen_better_text.py · GY/basicNLP - 码云 - 开源中国 (gitee.com);
  1. 这里的改进即前面说的LSTM多层化、embedding层和Affine层的权重共享,以及在纵向上加入dropout层;

  2. 继承了BetterRnnlm类,然后实现generate函数;这个generate函数与2使用改进前的LSTM语言模型尝试生成文本小节的generate函数一样;

  3. 以下是生成的结果:

    1. 可以看到,训练好的模型生成的文本流畅多了;
    you said.
    in the event of falling environmental prices and the rapid growth of revenues rate for the third quarter abc has up from almost every time says frozen president of fox 's pro conn.
    i obtained a courthouse for other new york series on its job virginia to do with mr. spielvogel and the task and the merged bank business.
    according to the usx spokesman bernard and other major investors have declined to support this profit from personal management.
    delmed.
    the matter was held by berry 's family in five years.
    mr. nadeau
    
  4. 目前为止我们只是给模型第一个单词,然后让模型预测之后的单词;那么如果我们希望给模型一句话或者一句话开头几个单词,然后让其续写呢?

  5. 方法是:先将前几个单词依次输入到模型中;这样在LSTM层进行计算时会将隐藏状态保存在类的成员变量self.h中;但是要记得设置stateful=True,这样才能继承前面计算的隐藏状态;

  6. 之后,再将最后一个单词输入到模型中,依次获取模型输出即可;

  7. 核心代码如下:

    if __name__ == '__main__':start_words = 'the meaning of life is'start_ids = [word_to_id[w] for w in start_words.split(' ')]for x in start_ids[:-1]:if GPU:x = cupy.array(x).reshape(1, 1)else:x = np.array(x).reshape(1, 1)model.predict(x)# 文本生成word_ids = model.generate(start_ids[-1], skip_ids)txt = ' '.join([id_to_word[i] for i in word_ids])txt = txt.replace(' <eos>', '.\n')print(txt)
    
  8. 以下是一次输出的文本:

    the meaning of life is not a nightmare in many of the newspapers.
    the solution will be shipped although washington 's future is n't likely to adopt the first changes in the world.
    our state bailout is very large payments he says.
    on the in the corporate market the analyst said the arrest by the new york borough president had arranged less than one million shares in the event.
    and by selling their stake in rico the public home short-term market system is a one-time candidate for an investment bank.
    it 's time to worry that customers will need
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖01

0. 配置maven (仅一次的操作 1.项目导入idea 2. 保证nginx服务器运行 &#xff08;nginx.exe要在非中文的目录下&#xff09; 开启服务&#xff1a; start nginx 查看任务进程是否存在&#xff1a; tasklist /fi "imagename eq nginx.exe" 关闭ngi…

中文之美,美在辞藻富丽,也美在情感含蓄内敛。

文章目录 引言句句不提幸福,句句都是幸福句句不提释怀,句句都是释怀句句不提爱意,句句都是爱意句句不提安慰,句句都是安慰句句不提遗憾,句句都是遗憾句句不提思念,句句都是思念引言 许多句子没有将主题直抒胸臆,却通过字词间的呼应、碰撞,让人感受到“言未表而意无穷”…

java高级——Exception异常类基本解读

java高级——Exception异常类基本解读 前情提要文章介绍继承结构异常详解1. 异常的定义2. 异常的分类3.3 异常的处理机制3.3.1 try catch finally语句3.3.2 throw关键字3.3.3 throws关键字 4. 浅谈如何有效的避免异常的发生5. 自定义异常6. 常见的RuntimeException 总结 前情提…

JDBC(Java访问数据库)

Java Database Connectivity&#xff1a;Java访问数据库的解决方案 JDBC定义了一套标准接口&#xff0c;即访问数据库的通用API&#xff0c; 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c;让具体的数据库操作与数…

HDU1056——HangOver,HDU1057——A New Growth Industry,HDU1058——Humble Numbers

目录 HDU1056——HangOver 题目描述 运行代码 代码思路 HDU1057——A New Growth Industry 题目描述 运行代码 代码思路 HDU1058——Humble Numbers 题目描述 运行代码 代码思路 HDU1056——HangOver 题目描述 Problem - 1056 运行代码 #include <iostream&…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…

【SpringBoot】2 项目搭建

创建项目 1&#xff09;确实本地 jdk 版本 打开命令行窗口&#xff1a;快捷键 Windows R&#xff0c;输入 CMD&#xff0c;敲回车 执行命令&#xff1a;java -version 2&#xff09;在项目 clone 的位置创建 Spring Boot 项目&#xff0c;使用 Maven 进行依赖管理&#xff…

大模型学习(1)

初学者&#xff0c;仅做自己学习记录&#xff0c;如果对你有什么帮助&#xff0c;那更好了。 下面是论文《Attention Is All You Need》的经典transformer架构&#xff0c;在学习的过程中&#xff0c;有很多疑惑。 embedding层在做什么 Transformer的embedding层在做的是将输…

35.【C语言】详解函数递归

目录&#xff1a; 定义 作用 例子1~3 拓展学习 趣味练习 1.定义&#xff1a;函数自己调用自己&#xff08;递推回归&#xff09; int main() {main()return 0; } 这样容易死循环&#xff0c;导致爆栈(Stack Overflow) 所以需要设立限制条件&#xff0c;使执行时越来越接近条…

02 Golang面向对象编程_20240727 课程笔记

视频课程 最近发现越来越多的公司在用Golang了&#xff0c;所以精心整理了一套视频教程给大家&#xff0c;这个是其中的第二部&#xff0c;后续还会有很多。 视频已经录制完成&#xff0c;完整目录截图如下&#xff1a; 课程目录 01 结构体的声明.mp402 使用var根据结构体…

iOS基础---多线程:GCD、NSThread、NSOperation

系列文章目录 iOS基础—多线程&#xff1a;GCD、NSThread、NSOperation 文章目录 系列文章目录一、GCD1.GCD的任务、函数、队列a.任务b.函数c.队列 2.GCD的使用a.同步函数并发队列b.异步函数并发队列c.同步函数串行队列d.异步函数串行队列e.同步函数主队列f.异步函数主队列 3.…

FastAPI(七十五)实战开发《在线课程学习系统》接口开发-- 创建课程

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 上次我们分享了&#xff0c;FastAPI&#xff08;七十四&#xff09;实战开发《在线课程学习系统》接口开发-- 删除留言 从本篇文章开始&#xff0c;…

如何学习Doris:糙快猛的大数据之路(从入门到专家)

引言:大数据世界的新玩家 还记得我第一次听说"Doris"这个名字时的情景吗?那是在一个炎热的夏日午后,我正在办公室里为接下来的大数据项目发愁。作为一个刚刚跨行到大数据领域的新手,我感觉自己就像是被丢进了深海的小鱼—周围全是陌生的概念和技术。 就在这时,我的…

嵌入式Python、ROS、SLAM、WebSocket和Node.js:智能巡逻监控安防机器人设计流程(代码示例)

项目概述 随着智能技术的发展&#xff0c;智能巡逻机器人在安防、监控和巡逻等领域的应用越来越广泛。本文将介绍一个结合嵌入式系统、机器人技术和后端开发的智能巡逻机器人。该机器人能够自主导航&#xff0c;实时检测异常情况&#xff08;如火灾或入侵者&#xff09;&#…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十七章 Linux中断实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

AI绘画:艺术与科技融合的新篇章

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI绘画作为一种新兴的艺术形式&#xff0c;正逐步改变着传统艺术创作的格局。从早期的简单模仿到如今的个性化创作&#xff0c;AI绘画不仅提升了艺术创作的效率和质量&#xff0c;还开辟了全新的应用场景和商…

C++模板——泛型编程

目录 1. 什么是泛型编程 2. 函数模板 2.1 定义格式 2.2 实例化及原理 2.3 参数匹配原则 3. 类模板 3.1 定义格式 3.2 实例化 4. 非类型模板参数 5. 模板的特化 5.1 概念 5.2 函数模板和类模板特化 6. 模板的分离编译 1. 什么是泛型编程 如何实现一个通用的加…

【Java算法专场】二分查找(下)

目录 山脉数组的峰顶索引 算法分析 算法步骤 算法代码 算法示例 寻找峰值 算法分析 算法步骤 算法代码 算法示例 寻找旋转排序数组中的最小值 算法分析 算法步骤 算法代码 算法示例 点名 算法分析 算法步骤 算法代码 算法示例 山脉数组的峰顶索引 …

TCP/IP协议(全的一b)应用层,数据链层,传输层,网络层,以及面试题

目录 TCP/IP协议介绍 协议是什么,有什么作用? 网络协议为什么要分层 TCP/IP五层网络协议每层的作用 应⽤层 DNS的作用及原理 DNS工作流程 数据链路层 以太⽹帧格式 MAC地址的作用 ARP协议的作⽤ ARP协议的工作流程 MTU以及MTU对 IP / UD / TCP 协议的影响 传输层…

数据结构之判断二叉树是否为搜索树(C/C++实现)

文章目录 判断二叉树是否为搜索树方法一&#xff1a;递归法方法二&#xff1a;中序遍历法总结 二叉树是一种非常常见的数据结构&#xff0c;它在计算机科学中有着广泛的应用。二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是二叉树的一种特殊形式&…