1 研究任务一介绍

1.1 研究任务

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

1.2 研究内容的具体描述

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

代码:链接:https://pan.baidu.com/s/1sb_Mwx5pghmTgeRxvIrO-A?pwd=l8te 
提取码:l8te

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网络的结构以及原理,对数据预处理过程分为获取字典和编码字典。从最后的生成结果看,生成的古诗和藏头诗基本符合唐诗的形式,词的形式还有待改善,在诗词意境方面还有很大的提升空间。

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

  1. 猿创征文丨深度学习基于双向LSTM模型完成文本分类任务

    大家好,我是猿童学,本期猿创征文的第三期,也是最后一期,给大家带来神经网络中的循环神经网络案例,基于双向LSTM模型完成文本分类任务,数据集来自kaggle,对电影评论进行文本分类. 电影评论可以蕴含 ...

  2. 深度学习基于双向 LSTM 模型完成文本分类任务

    大家好,本期给大家带来神经网络中的循环神经网络案例,基于双向LSTM模型完成文本分类任务,数据集来自kaggle,对电影评论进行文本分类. 电影评论可以蕴含丰富的情感:比如喜欢.讨厌.等等.情感分析( ...

  3. tensorflow2.0 基于LSTM模型的文本生成

    春水碧于天,画船听雨眠 基于LSTM模型的唐诗文本生成 实验基本要求 实验背景 实验数据下载 LSTM模型分析 实验过程 文本预处理 编解码模型 LSTM模型设置 实验代码 实验结果 总结 致谢 实验 ...

  4. [深度学习] Pytorch中RNN/LSTM 模型小结

    目录 一 Liner 二 RNN 三 LSTM 四 LSTM 代码例子 概念介绍可以参考:[深度学习]理解RNN, GRU, LSTM 网络 Pytorch中所有模型分为构造参数和输入和输出构造参数两 ...

  5. 【Github上有趣的项目】基于RNN文本生成器,自动生成莎士比亚的剧本或者shell代码(不是python的是lua的)

    文章目录 下了之后才发现不是python的尴尬得一匹,,ԾㅂԾ,, GitHub 上有哪些有趣的关于 NLP 或者 DL 的项目? - Xiaoran的回答 - 知乎 char-rnn 下了之后才发现 ...

  6. LSTM模型实战案例:TensorFlow实现预测3位彩票号码

    向AI转型的程序员都关注了这个号

  7. 基于双向LSTM模型进行电力需求预测(Matlab代码实现)

  8. Tensorflow使用CNN卷积神经网络以及RNN(Lstm、Gru)循环神经网络进行中文文本分类

    Tensorflow使用CNN卷积神经网络以及RNN(Lstm.Gru)循环神经网络进行中文文本分类 本案例采用清华大学NLP组提供的THUCNews新闻文本分类数据集的一个子集进行训练和测试http ...

  9. IJCAI 2018 基于主题信息的神经网络作文生成模型

    本文介绍哈尔滨工业大学社会计算与信息检索研究中心(SCIR)录用于IJCAI 2018的论文<Topic-to-Essay Generation with Neural Networks> ...

最新文章

  1. 【笔记】 感受野与权值共享 摄像头标定 相机坐标与世界坐标
  2. 使用Nginx反向代理和proxy_cache缓存搭建CDN服务器加快Web访问速度
  3. 七款最常用的PHP本地服务器
  4. 什么是异构数据库?它和分布式数据库的联系是什么?
  5. c语言贪吃蛇积分用什么函数,C语言之贪吃蛇(curses库函数)
  6. 【TA-霜狼_may-《百人计划》】图形3.2 混合模式及剔除
  7. (附源码)springboot校园购物网站 毕业设计 041037
  8. Python网络爬虫数据采集实战:基础知识
  9. mp4+html+ipad无法播放,mp4文件不能在IPAD上播放
  10. 7.Android常用第三方支付
  11. c语言小数如何转换成百分数,小数怎么转换成百分数
  12. JavaScript 银行登录存取钱【案例】
  13. Qt Quick实现的涂鸦程序
  14. Android JNI开发入门与实战
  15. POJ3255(次最短路)
  16. 【纪中受难记】——Day17:本来能AK
  17. Python 、Sqlite3数据库、单片机 、RC522 -公交卡管理系统(含部分源码)#可刷卡登陆
  18. 360和QQ,拿什么来拯救你?
  19. android手机做路由器,手机充当无线路由 给电脑无线信号的方法
  20. 台式计算机蓝屏代码08e,Win8.1电脑开机出现蓝屏代码0x000008e如何解决

热门文章

  1. Windows7/10耳机插入前面板没反应的解决方案
  2. 从多臂老虎机开始学习强化学习中的探索与利用
  3. linux uts 全称
  4. redis cluster 集群 HA 原理和实操(史上最全、面试必备)
  5. 全球营商环境报告及数据(2004-2020年)
  6. 没有windows安装光盘怎么修复计算机,教你用Windows XP的安装盘修复系统
  7. python 换页符_python分页字符串
  8. linux下查看系统配置参数
  9. openwrt路由器php-cli,【在openwrt无线路由器上部署freeswitch+fusionpbx (原帖恩山论坛)】-网关论坛-ZOL中关村在线...
  10. 十位数连加 c语言,用C语言编写一个简易计算器可实现加减乘除,连加连减,连乖连除....