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

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

猜你喜欢

转载自blog.csdn.net/weixin_47546087/article/details/126652542
今日推荐