基于RNN-LSTM模型的诗词生成/TensorFlow

2023-05-16

1 研究任务一介绍

1.1 研究任务

给定诗词数据集poems,采用基于循环神经网络(RNN)的LSTM模型实现古诗词自动生成,调整参数实现五言诗、七言诗、五言藏头诗、七言藏头诗和词的自动生成。

1.2 研究内容的具体描述

自然语言处理(NLP)是使机器处理或读懂人类语言系统,是目前比较热门的方向,Long Short Term Memory (LSTM)是循环神经网络的改进,在NLP方面有明显优势。实验采用两层的LSTM网络,训练数据集为34646首唐诗,数据格式为诗词名加上诗词内容,所有诗词存放在一个txt文档中,每一行存储一首诗。

代码:https://pan.baidu.com/s/1CQaru1PkkycqYYIcJJeJiA?pwd=r0pw 

2 研究方法原理与步骤

2.1 数据预处理

数据预处理的过程,实际上是文本处理的过程,先对诗歌进行拆分,提取诗歌内容。步骤包括获取字典和编码字典。

1、获取字典

  1. 读取诗集,使用open函数。把每首诗分离出来存入列表,根据列表长度得出共有多少首古诗。
  2. 分割题目和内容,使用strip函数去掉空格,只需保存诗的内容。
  3. 标记诗词的开始和结尾,开头加上字符“[”,末尾加上字符“]”,在训练的时候程序也会根据该符号来作为训练的始末状态。
  4. 把所有唐诗内容加入列表,列表长度即为唐诗的总数。

    2、编码字典

  1. 统计词频:统计每个字出现次数。
  2. 按词频排序:使用sorted函数,key表示排序方法。
  3. 生成字库:每个字映射一个数字ID,使用dict(d)创建编码字典。
  4. 诗句转换为向量:根据字库把每一首诗转化为一个向量

2.2 LSTM网络结构

2.2.1 研究方法选择原因

LSTM(Long-Short Term Memory,长短时记忆网络)模型是文本处理中最为常用的RNN循环神经网络。RNN模型是基于当前的状态和当前的输入来对下一时刻做出预判。而LSTM模型则可以记忆距离当前位置较远的上下文信息。

2.2.2 方法原理与步骤

图1 LSTM模型逻辑图

图中LSTM有四个输入,分别是input(模型输入),forget gate(遗忘门),input gate(输入门),以及output gate(输出门)。相比,LSTM参数量是普通神经网络的4倍。遗忘门决定前一刻memory是否会被记住,遗忘门打开时,前一刻记忆会被保留,关闭时,前一刻记忆会被清空。输入门决定当前输入有多少保留下来,因为在序列输入中,并不是每个时刻的输入信息都同等重要,当输入完全没有用时,输入门关闭,此刻输入信息被丢弃。输出门决定当前memroy的信息有多少被立即输出,输出门打开时,会被全部输出,关闭时,当前memory中的信息不会被输出。

 图2 LSTM模型结构图

2.2.3 模型训练超参设置

1、超参数设置:

表1 超参数设置

网络层数

num_layers

2

隐藏层节点

rnn_size

128

训练次数

epoch

10

每次训练诗词数目

batch_size

64

2、使用RNN进行训练的过程:

1)定义模型和结构。

2)初始化当前状态。

3)输入数据进行ID到单词向量的转化。

4)输入数据和初始化状态代入模型进行训练,得到训练结果。

5)对训练结果加入一个全连接层得到最终输出。

6)训练结束后得到储存神经网络模型。

2.2.4 诗词生成

1、古诗词生成步骤:

1)读取模板文件,对每个字的出现个数都进行统计。

2)得到编码字典,根据统计结果取出数据来进行编码。

3)生成RNN模型网络,应用于根据输入信息得到相应的输出信息。与训练模型的编写方法相同。

4)读取已保存的网络模型,根据已经训练好的模型来进行新的数据预测。使用循环语句进行编码和字之间的转化,直到一首诗做完后退出。

2、生成古诗

已知一首诗的开始标志字为"[",设其初始状态为0,由此开始载入模型,迭代可以求得整首古诗,古诗的结束标志为"]",出现了此输出结果表示古诗生成完毕,退出循环,打印结果。

3、生成藏头诗

藏头诗与自由作诗的区别在于,需指定每句话的头一个字,所以初始状态需要重新设定为给定的字,设置for循环取出藏头句子的每一个单字,对该单字进行训练。把第一个字设置为"[",求出状态state_,然后将该状态代入该单字中求下一个字的解。即,已知当前输入为"word",当前状态是“[”的状态state_,求输出和下一步状态。输出作为当前输入,下一步状态作为当前状态,再求下一个字。直到诗句满足字数状态或结束,则退出循环,处理下一个单字。

3 实验结果及分析

3.1 实验结果

3.1.1 开发环境介绍

系统:Win7 

处理器:Intel(R) Core(TM)i5-5200U CPU

内存:4G

软件:TensorFlow 1.4.0 、Python 3.6.5

3.1.2 实验结果

1、生成古诗

1)五言诗

近云此蝶欲,色苔借念走。漂本片过索,侍中陌同声。

依右朱元巷,尝漠堪三试。看非背低蒙,津雪袍不从。

紫未疏从星,龙初宛思代。翠谷十绛兮,托望寿金长。

2)七言诗

盈巷仁术无凝斋,事泉非须音正栖。盈名教将贞滴文,浮舍树空安照池。

卧起收防鸣不饮,人尧仰松张谷尚。就敛兵天洒哭莫,单家貂渡未光私。

荒民杉乱浪迢辈,此怜堂精忧艳拂。亦序多将调并新,壁木鹊古胜以迟。

2、生成藏头诗

1)五言藏头诗

藏头为“上善若水”:

上禄摇户迎,善颜引绕籁。若雅露近马,水暂曲骑欲。

上起白初所,善来固好引。若应乱青庐,水威度乖如。

上柔余弹飘,善取分峡昼。若住艰时类,水乖逸满寒。

2)七言藏头诗:

藏头为“巾帼英雄”:

巾天雪惨带独生,帼溅邻禾鸦芦上。英宵阳家台开立,雄借断夜影处月。

巾纱逸众起及尽,帼碑是留忠音斗。英绿冲降开餐生,雄西残炎安河蛮。

巾花影蛾饮水三,帼皆主十久巾魂。英春直轻寒滴岂,雄经中江动紫秘。

3、生成词

昨出流偃败气予余宽离,祥明。雪家虚达衰带杨,万入野挂暂栖。因,修永人偏尘语儒云云中霖出啭谒浮寒。律清,委类凉石死世红。

山可二阙翼尘,离疑窥由采妾招。兵勒识上正比,无枝龙四化。山子主拾漠,好为洲天微无草爱圣卿喜承映泪明。菲雨谁山能云仙功,闻镜瑞鲤。

两密成流应飘,欹。三子来摇妆将月在可彩从度,离子。露细如昼终,田步中浮。岂蛮佛,休稍山斯冲此玉园人田暂闲职断练高画洞力新。

3.2 实验结果分析

从最后的生成结果看,生成的古诗和藏头诗基本符合唐诗的形式,词的形式还有待改善,在诗词意境方面还有很大的提升空间。

4 结论

实验设计了基于LSTM模型的古诗词自动生成框架,报告详细介绍LSTM网络的结构以及原理,对数据预处理过程分为获取字典和编码字典。从最后的生成结果看,生成的古诗和藏头诗基本符合唐诗的形式,词的形式还有待改善,在诗词意境方面还有很大的提升空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于RNN-LSTM模型的诗词生成/TensorFlow 的相关文章

随机推荐

  • k8s监控prometheus+Grafana

    Kubernetes集群资源监控 概述 监控指标 一个好的系统 xff0c 主要监控以下内容 集群监控 节点资源利用率节点数运行PodsPod监控 容器指标应用程序 程序占用多少CPU 内存 监控平台 使用普罗米修斯 prometheus
  • python学习(猜数字游戏)

    import random x 61 int random randint 0 10 i 61 1 print 39 39 39 欢迎进入猜数字小游戏 xff01 本次游戏机会只有三次 xff01 小伙伴拼手气的机会到了哟 xff01 39
  • python脚本批量创建job并自动添加视图

    由于我们项目jenkinsfile和deployment yaml都是单独分开放在git仓库上管理的 xff0c 脚本实现的是通过批量创建对应的文件和job任务自动提交git仓库 xff0c 并把job加入到视图里 xff01 话不多说贴脚
  • 远程登陆Ubuntu服务器anaconda的使用问题(多用户)

    远程登录Ubuntu的新用户在使用 conda 命令时 xff0c 可能会遇到找不到 conda 命令的情况 xff0c 因此在多用户使用 anaconda 的情况下 xff0c 需要提前在 Ubuntu 服务器上做一下 anaconda
  • telnet批量检查端口是否正常

    一 本机测试目标端口是否正常 xff1a python调用的socket模块来实现 xff1a usr bin python3 import socket ip 43 port 描述 ip prot 61 39 39 39 0 0 0 0
  • mongo副本集一主两从读写分离部署

    mongodb 副本集部署 mongodb 0 gt 3717 mongodb 1 gt 3718 mongodb 2 gt 3719 wget https fastdl mongodb org linux mongodb linux x8
  • 二进制部署mongodb_exporter

    一 先安装部署好prometheus和grafana 二 部署exporter客户端 1 下载软件mongodb下载地址 xff08 grafana模板选择2583 xff09 版本选择0 11 2的 xff0c 不然和模板的语句prome
  • rocketmq二进制2m-2s异步集群部署

    一 机器规划 第一台机器 192 168 20 101 端口规划 xff1a 9876 NameServer1 10910 BrokerA master 10921 BrokerB slave 第二台机器 192 168 20 102 端口
  • Linux(Ubuntu系统)安装unzip

    最近在阿里云服务器上下载了zip形式的数据集压缩包 xff0c 解压时却发现并没有unzip解压命令 xff0c 于是习惯性地pip install unzip xff0c 并不能成功 xff0c 网上很多方法都说运行 sudo apt g
  • Python问题&解决

    python pycharm小技巧 1 要学会使用Debug pycharm Debug使用 Debug记得打断点 xff01 Pycharm debug技巧 在debug的时候python console可以直接敲变量显示 在安装Pych
  • Linux系统安装ClamAV的详细步骤

    ClamAV是一款开源免费的杀毒软件 xff0c 它可以在Linux系统上运行 以下是在Linux系统上安装ClamAV的步骤 xff1a 打开终端并更新软件包列表 xff1a sudo apt update 安装ClamAV xff1a
  • 为什么 0.1 + 0.2 不等于0.3?如何解决这个问题?

    一 开头 我们都知道0 1 43 0 2 61 61 0 3 xff0c 而是0 30000000000000004 xff0c 那么是为什么 xff1f 我们都知道计算机在内部实现中使用的是二进制 xff0c 0 1也是不例外的 xff0
  • 前端手写(十八)——Promise并行限制

    一 写在前面 一般我们做多个异步请求 xff0c 此时我们常常采用的是Promise all来进行处理 xff0c Promise all会全部的一起执行 xff0c 但是如果存在一些并行的限制 xff0c 也就是说一次最多只能执行固定的数
  • 深度学习环境安装(VMware)-Miniconda-pytorch

    提示 xff1a 最近要要跑一些算法 xff0c 用的linux系统一直是在服务器上进行开发 xff08 无GUI界面 xff09 xff0c 双系统又懒得开关机 xff0c 虚拟机还不能调用gpu xff0c 真无了个大语 对于文章中出现
  • novnc安装

    ubuntu22 04 span class token comment 安装软件 span span class token function sudo span span class token function apt span sp
  • python扫描端口

    什么是端口扫描 定义 xff1a 对一段端口或指定的端口进行扫描 目的 xff1a 通过扫描结果可以知道一台计算机上都提供了哪些服务 xff0c 然后就可以通过所提供的这些服务的己知漏洞就可进行攻击 原理 xff1a 当一个主机向远端一个服
  • HTML_移动端界面

    homework8 移动端界面 注 点击图标放大 点击图片旋转180度 ydd html span class token doctype lt DOCTYPE html gt span span class token tag span
  • Windows11安装与使用初体验

    Windows11安装 因为下载的是美国镜像 xff0c 所以系统语言是英文的 xff0c 但是这么多年的使用 xff0c 还是能够看懂一二的 xff0c 一步步操作就好了呗 xff0c 随缘点击 xff0c 无脑下一步 不知是我没有选择对
  • 基于51单片机的智能窗帘仿真方案原理图设计

    系统总体方案 xff08 附文件 xff09 通过上述对各个模块介绍 xff0c 我们最终选择了采用STC89C52作为的主控芯片 xff0c 采用光敏电阻采集环境光强通过ADC0832转换成数字信息然后由单片机处理得出环境光强的情况 xf
  • 基于RNN-LSTM模型的诗词生成/TensorFlow

    1 研究任务一介绍 1 1 研究任务 给定诗词数据集poems xff0c 采用基于循环神经网络 xff08 RNN xff09 的LSTM模型实现古诗词自动生成 xff0c 调整参数实现五言诗 七言诗 五言藏头诗 七言藏头诗和词的自动生成