在线古诗自动生成器的设计与实现
- 前言
- 一、算法模型介绍
- LSTM简介
- 模型框架
- 实验环境
- 实验与分析
- 实验数据集
- 数据集预处理
- 训练过程
- 模型训练结果
- 模型的评估
- 二.在线古诗生成器的设计与实现
- 系统结构
- 远程服务器的项目部署
- 系统测试
- 三.成品展示
前言
古诗,作为中华文化的凝结,诠释了古人至上无比的智慧,是千千万万文人墨客的思想结晶。古诗不论是句式的结构,文字的结合,亦或是对文字音调的搭配都达到了一个相当高的水准。同时,古诗是一种不朽的文化精髓,更是中华名族的文化瑰宝。近年来,随着人们生活水平的提高,传统的诗词文化再一次掀起了人们对于传统文化的学习浪潮。越来越多的人希望创作出符合自己意愿的诗句,但是却因为诗歌创作的难度便望而却步。
近年来,随着计算机人工智能技术的不断发展,循环神经网络在自然语言处理方面得到了广泛的应用,在技术的支持下,开发出一款在线古诗自动生成的软件具有充分的现实意义,该软件集结了海量的诗词库,支持古诗的检索,可以按照智能的方法生成特定的诗句,解决了人们在诗歌创作方面的部分难题。
本论文在对比了不同神经网络模型在古诗自动生成的基础上,结合在线古诗自动生成软件的具体需求,采用了基于长短期记忆网络模型(LSTM)的神经网络结构,进行古诗自动生成算法模型的构建,并对模型的诗歌生成效果给出了评估结果,最终结合软件开发的流程完成了在线古诗自动生成系统的设计。
一、算法模型介绍
LSTM简介
LSTM作为深度学习的模型之一,是一种RNN的改进版,解决了普通RNN神经网络训练过程中出现的梯度消失和梯度爆炸的问题,能够学习长期的依赖关系。通过门控状态来控制传输,记住需要记忆的信息,忘记不重要的信息。
下图是LSTM神经网络结构图。对于此结构图,每一行都表示一个完整的向量,代表从一个节点的输入到另外一个节点的输入。粉圈表示点化操作,黄框表示学习神经网络网络层,行合并表示连接,分叉表示复制的内容到对应位置。
LSTM改善了RNN中的长期依赖问题,作为非线性模型可以用于构造更大深度的神经网络。但是,RNN的梯度问题虽然在LSTM的一个变种中得到解决,但是还是不彻底,更长序列依然存在问题,以及受时间跨度和网络深度的影响。由于LSTM模型可以实现长期记忆,可以保存上下文的关联性,因此在自然语言处理方面得到了广泛的应用。
模型框架
古诗自动生成模型,基于python中第三方库Keras以及Tensorflow2.0,采用Keras中的LSTM模型进行实验。模型主要构造了两层LSTM layer和两层dropout layer以及一个全连接层和softmax作为输出层,利用自定义构造器进行数据输入,使得数据批量载入内存,使用Adam优化器以及交叉熵损失的模型损失函数。
实验环境
硬件类型 | 硬件型号 |
---|---|
CPU | 英特尔 Core i7 主频 2.00GHz |
显卡 | NVIDIA GeForce GTX 1050 Ti |
内存 | 8G |
硬件类型 | 硬件型号 |
---|---|
操作系统 | Windows10 |
GPU 运算平台 | CUDA Toolkit 8.0 |
Anaconda | 机器学习平台 |
深度学习框架 | Keras开源框架 |
Python开发环境 | Python 3.8 |
JupyterLab | 训练平台 |
实验与分析
实验数据集
数据集来源于Github社区作者Sheng You开源的古诗文本文件poetry.txt。如下图2.3所示。数据集包含了唐宋时期常见的40030首古诗,涵盖了古诗生成机器学习的常见诗歌,同时,数据集按照一定的规则进行排列,题目和作者通过特定字符去分割,以及每一首古诗占据一行,方便机器学习中文本的处理和向量转化.
数据集预处理
数据集预处理算法:
输入:古诗数据集poetry.txt
输出:word与id映射的字典
1.按行读取预料文本内容
2.for t = 1 : max
2.根据五言律诗诗句的长度筛选训练集
3.对选取好的训练集合中诗句字频进行统计排序
4.对频率较低的字进行删除
5.打包成元组列表,生成word到id的映射和id到word的映射关系
返回经过筛选的古诗文本以及word与id映射的字典|
训练过程
模型有两层LSTM层和两层Dropout层以及最后一个全连接层组成,可以将输入的待训练的五言律诗诗句,即包含6个向量,通过不断训练转换成对应的输出向量。
实验训练过程中,由于传统的梯度下降法和反向传播方法优化造成影响较大,可能导致模型很难学习到相关的参数,本实验采用了Adam算法来实现优化,Adam算法作为一个一阶的优化算法,不仅可以像其他算法一样通过基于一阶的矩阵的均值来计算适应性参数的学习率,同时还能够使用二阶的矩阵均值。因此,Adam 算法可以根据用户的训练数据,迭代的更新神经网络的权重。
模型训练的过程,由于划分的训练任务较大,没有采用fit方法去输入向量,而是采用fit_generator的方法实现自定义的生成器,让数据批量生成加载进入内存,减小内存的压力。在回调函数中使用tensorboard库查看对应的模型学习曲线,在每一次Epoch后,打印损失率和准确率,同时调用模型模拟古诗的生成,将训练结果保存在out.txt文件中。
模型训练结果
模型的评估
古诗生成评估方案采用人工评估、BLEU机器评估和模型生成时间效率
针对于以上的评估标准,人工评估方案选取采用的方法为选取对诗歌有研究的20位学者对生成的十组诗歌进行打分(满分为10分,最低分为1分),然后去除最低分和最高分最后取平均分。其公式如下所示:
其中,n表示评委总人数,Si表示第i个评委的分数,Smax、Smin分别表示最高分和最低分。
BLEU(双语评估标准),其计算速度快、不区分语言具有较好的适用性。可以用于文本生成质量的评价,BLEU输出一个0到1之间的数字,来评估生成文本和真实文本两者之间的相似度。BLEU是准确率为基础,然后对机器翻译以及文本生成的结果做出评价,因此相对于其他方法而言是一种更加主流的方法。作为机器评价两个方案的指标,利用BLEU的重叠计算公式计算待评估文本中的词组在实际的参考文本中出现的频率。也就是,计算古诗自动生成的诗句结果和原本实际的诗句之间的差异度,由于其结果已经标签化为向量的形式,因此可以针对于向量的结果进行计算,其计算公式如下:
公式中,一组待评估的文本表示为Ci,对应的参考文本为si={si1,si2,…,sim},n是语法词组长度,hk(ci)表示wk在待评估文本ci中出现的次数,hk(sij)表示wk在参考文本中sij出现的次数。
古诗生成时间作为两个方案的另一个评价指标,通过比较两个方案在十组不同的古诗自动生成的过程中需要花费的平均时间,以此来衡量不同模型的调度效率。
古诗生成时间效率计算公式如下:
二.在线古诗生成器的设计与实现
系统结构
根据系统开发的简易需求,本系统采用B/S架构的模式实现设计,分为表现层、逻辑层和数据层。表现层负责用户的交互以及最终运行结果的输出,逻辑层使用服务器完成客户端请求的相关处理,数据层针对不同的请求从后台数据库进行操作和数据的返回。
系统总体结构如下图所示:
远程服务器的项目部署
首选申请一台服务器,此为阿里云服务器实例,获取ip,也可以设置域名绑定到对应的公有ip地址上,同时在阿里云控制台添加访问的安全组。使用xshell连接远程服务器,使用FileZilla Client实现文件远程传输,将项目拉取到服务器相应位置。
其次,在服务器上可以按照界面文件实现可视化操作,安装python的虚拟环境virtualenv 安装对应3.8版本的python,激活虚拟环境,设置虚拟环境的环境变量,同时在虚拟环境中安装所需要的机器学习库(tensorflow,django,keras等),运行本地服务器命令便可以实现项目在远程服务器本地拉取,可在浏览器查看对应的界面。
在实现远程本地拉取成功之后,下载安装nginx,配置nginx相关的conf文件,实现项目部署中的反向代理,同时收集静态的文件资源。除此之外,下载安装uwsgi包,配置相关的配置文件,实现python项目的服务器运行,最后通过命令调用配置文件可以实现项目成功部署,可以设置日志保存位置,方便应用调试和对出错信息的查看。
系统测试
1.编写测试样例进行功能测试
2.jmeter进行压力测试
三.成品展示
注:(源码:古诗生成器源码)