在线古诗自动生成器的设计与实现

2023-05-16

在线古诗自动生成器的设计与实现

  • 前言
  • 一、算法模型介绍
    • LSTM简介
    • 模型框架
    • 实验环境
    • 实验与分析
      • 实验数据集
      • 数据集预处理
      • 训练过程
      • 模型训练结果
      • 模型的评估
  • 二.在线古诗生成器的设计与实现
      • 系统结构
      • 远程服务器的项目部署
      • 系统测试
  • 三.成品展示


前言

  古诗,作为中华文化的凝结,诠释了古人至上无比的智慧,是千千万万文人墨客的思想结晶。古诗不论是句式的结构,文字的结合,亦或是对文字音调的搭配都达到了一个相当高的水准。同时,古诗是一种不朽的文化精髓,更是中华名族的文化瑰宝。近年来,随着人们生活水平的提高,传统的诗词文化再一次掀起了人们对于传统文化的学习浪潮。越来越多的人希望创作出符合自己意愿的诗句,但是却因为诗歌创作的难度便望而却步。
近年来,随着计算机人工智能技术的不断发展,循环神经网络在自然语言处理方面得到了广泛的应用,在技术的支持下,开发出一款在线古诗自动生成的软件具有充分的现实意义,该软件集结了海量的诗词库,支持古诗的检索,可以按照智能的方法生成特定的诗句,解决了人们在诗歌创作方面的部分难题。
本论文在对比了不同神经网络模型在古诗自动生成的基础上,结合在线古诗自动生成软件的具体需求,采用了基于长短期记忆网络模型(LSTM)的神经网络结构,进行古诗自动生成算法模型的构建,并对模型的诗歌生成效果给出了评估结果,最终结合软件开发的流程完成了在线古诗自动生成系统的设计。


一、算法模型介绍

LSTM简介

  LSTM作为深度学习的模型之一,是一种RNN的改进版,解决了普通RNN神经网络训练过程中出现的梯度消失和梯度爆炸的问题,能够学习长期的依赖关系。通过门控状态来控制传输,记住需要记忆的信息,忘记不重要的信息。
  下图是LSTM神经网络结构图。对于此结构图,每一行都表示一个完整的向量,代表从一个节点的输入到另外一个节点的输入。粉圈表示点化操作,黄框表示学习神经网络网络层,行合并表示连接,分叉表示复制的内容到对应位置。
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文件中。

模型训练结果

初始训练效果

初始训练效果accuracy曲线

在这里插入图片描述

初始训练效果loss曲线

改进版loss

改进版loss曲线

模型的评估

 古诗生成评估方案采用人工评估、BLEU机器评估和模型生成时间效率

 针对于以上的评估标准,人工评估方案选取采用的方法为选取对诗歌有研究的20位学者对生成的十组诗歌进行打分(满分为10分,最低分为1分),然后去除最低分和最高分最后取平均分。其公式如下所示:

 其中,n表示评委总人数,Si表示第i个评委的分数,Smax、Smin分别表示最高分和最低分。
在这里插入图片描述

 BLEU(双语评估标准),其计算速度快、不区分语言具有较好的适用性。可以用于文本生成质量的评价,BLEU输出一个0到1之间的数字,来评估生成文本和真实文本两者之间的相似度。BLEU是准确率为基础,然后对机器翻译以及文本生成的结果做出评价,因此相对于其他方法而言是一种更加主流的方法。作为机器评价两个方案的指标,利用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进行压力测试








三.成品展示

在这里插入图片描述

注:(源码:古诗生成器源码)

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

在线古诗自动生成器的设计与实现 的相关文章

  • C#中使用IMemoryCache实现内存缓存

    1 缓存基础知识 缓存是实际工作中非常常用的一种提高性能的方法 缓存可以减少生成内容所需的工作 xff0c 从而显著提高应用程序的性能和可伸缩性 缓存最适用于不经常更改的数据 通过缓存 xff0c 可以比从原始数据源返回的数据的副本速度快得
  • 2021-09-13使用@Slf4j报错 程序包org.slf4j不存在

    导入两个maven依赖 然后就OK了 span class token tag span class token tag span class token punctuation lt span dependency span span c
  • PowerShell7.X的安装与美化

    参考链接1 xff1a https blog csdn net qq 39537898 article details 117411132参考链接2 xff1a https sspai com post 59380 很有参考价值 xff0c
  • Lab2 p3 围棋吃子的算法实现

    简单介绍下框架 xff1a 1 xff0e 声明一维数组block 作为一个临时变量记录一个块的大小 xff0c 声明一个整型blockLength记录这个块的长度 2 xff0e kill 为吃子的主函数 recersion int i
  • Python爬取皮皮虾视频

    背景 xff1a 今天闲着没事做 xff0c 然后想着刷刷视频 xff0c 然后发现前段时间学习了一下网络爬虫的一些基本应用 xff0c 就想着利用爬虫到网上去爬取一点视频来模拟人为的点击 下载操作 因为皮皮虾是手机端的app xff0c
  • 解决Result Maps collection already contains value for...BaseResultMap问题

    使用generatorSqlmapCustom逆向工程生成代码报错 假如使用generatorSqlmapCustom逆向工程生成代码 xff0c 即生成dao文件和mapper xml文件 xff0c 复制粘贴至工程中运行报错 Resul
  • IDEA2022.1的一些不常见问题解决方案

    文章目录 IDEA2022 1小问题解决方案 学习的时候尝鲜用了最新版本的IDEA 出现过以下老版本不会遇见的问题 Spring Initializer 创建的项目 无法新建module 显示Directory is already tak
  • 史上最全,Android P指纹应用及源码解析

    简单使用 源码分析 首先需要了解以下几点 指纹识别相关api是在Android23版本添加的 xff0c 所以过早版本的设备是无法使用的 xff1b android span class token punctuation span os
  • RNA-seq数据分析(HISAT2+featureCounts+StringTie)

    RNA seq数据分析 简介1 生物基础1 1 中心法则1 2 RNA seq Protocol1 3 RNA seq总的路线图 2 数据分析2 1 前期准备2 1 1 创建目录 amp 安装conda2 1 2 常用文件格式简介 2 2
  • Lottie动画的优劣及原理

    前言 Lottie是目前应用十分广泛的动画框架 在周会汇报的时候 xff0c 老板问能不能对Lottie进行优化 xff0c 于是就有了下文对Lottie原理的研究 毕竟要进行优化 xff0c 首先要深入了解原理嘛 Lottie实现 Lot
  • 详解微服务技术中进程间通信

    在单体应用中 xff0c 一个组件调用其它组组件时 xff0c 是通过语言级的方法或者函数调用 xff0c 而一个基于微服务的应用是运行于多个服务器上的分布式系统 xff0c 每个服务实例是一个典型的进程 所以 xff0c 如下图显示的 x
  • FusionCompute8.0.0实验(0)CNA及VRM安装(2280v2)

    给公司的华为泰山2280V2服务器安装CNA xff0c arm架构的 xff0c 采用方案为CNA和VRM在一个物理机上 准备文件 xff1a FusionCompute VRM 8 0 0 ARM 64 zip FusionComput
  • 网上买的st7789v3屏幕7脚的不能显示(1)

    今天通过网上购买了一款最便宜的1 3寸液晶显示屏分辨率240x240 xff0c 虽然小了一点 xff0c 但是看起来还不错 xff0c 于是准备了以前的用于驱动st7789的程序 xff0c 连接所有的引脚 xff0c 发现没有cs引脚
  • 新版idea中的terminal会打开windows的power shell窗口

    IDEA升级后发现点击terminal不会像之前一样显示在ide的底部而是会打开windows的Power Shell窗口 xff0c 此时需要找到windows Power Shell的位置右键属性在选项中 xff0c 取消勾选 使用旧版
  • 如何在非/home目录下下载安装vscode-server

    实现目标 xff1a 通过windows端的VSCODE xff0c 利用SSH工具在Ubuntu服务器的非 home目录下在下载安装vscode server 问题 xff1a 服务器 home文件夹剩余空间为0 xff0c 使用SSH工
  • Python 求解最大连通子网络问题

    记录一下不借助networkx包解决寻找最大连通子网络问题 这里没有源码 xff0c 只有问题解析 需要自己动手 这里是关键代码 xff1a span class token keyword for span i in span class
  • @Configuration的使用 和作用

    原文 从Spring3 0 xff0c 64 Configuration用于定义配置类 xff0c 可替换xml配置文件 xff0c 被注解的类内部包含有一个或多个被 64 Bean注解的方法 xff0c 这些方法将会被Annotation
  • @Component和@Configuration

    64 configuration和 64 component之间的区别是 xff1a 64 Component注解的范围最广 xff0c 所有类都可以注解 xff0c 但是 64 Configuration注解一般注解在这样的类上 xff1
  • zookeeper笔记

    ZooKeeper对分布式系统的协调 xff0c 使 共享存储解决分布式系统 临的问题 其实共享存储 xff0c 分布式应 也需要和存储进 络通信 大多数分布式系统中出现的问题 xff0c 都源于信息的共享出了问题 如果各个节点间信息不能及
  • Dubbo

    1 分布式架构 xff08 SOA 分层 按照业务性质分层 每一层要求简单 和 容易维护 应用层 距离用户最近的一层 也称之为接入层 使用tomcat 作为web容器 接收用户请求 使用下游的dubbo提供的接口来返回数据并且该层禁止访问数

随机推荐

  • Java的对象模型

    原文链接 对象在堆内存的布局分为三个区域 xff1a 分别是对象头 xff08 Header xff09 实例数据 xff08 Instance Data xff09 对齐填充 xff08 Padding xff09 对象头 xff1a 对
  • CopyOnWriterArrayList

    CopyOnWrite CopyOnWrite容器即写时复制的容器 通俗的理解是当我们往一个容器添加元素的时候 xff0c 不直接往当前容器添加 xff0c 而是先将当前容器进行Copy xff0c 复制出一个新的容器 xff0c 然后新的
  • Java 并发编程一篇 -(Synchronized 原理、LockSupport 原理、ReentrantLock 原理)

    并发编程已完结 xff0c 章节如下 xff1a Java 并发编程一篇 xff08 Synchronized 原理 LockSupport 原理 ReentrantLock 原理 xff09 Java 并发编程二篇 xff08 JMM C
  • Google离开我们已经快十年

    2010年1月13日 xff0c Google离开中国 掐指算来 xff0c Google已经离开我们快十年了 2010年是个特殊的年份 xff0c 这一年还发生了3Q大战 为什么诸多大事都发生在2010年 就是因为2010年是PC Web
  • Java 并发编程四篇 -(JUC、AQS 源码、ReentrantLock 源码)

    并发编程已完结 xff0c 章节如下 xff1a Java 并发编程一篇 xff08 Synchronized 原理 LockSupport 原理 ReentrantLock 原理 xff09 Java 并发编程二篇 xff08 JMM C
  • 在 IDEA 中的各种调试技巧,轻松定位 Bug(超级全面)

    原文地址
  • 20210721复盘

    1 在大厂中用的是java8吗 xff1f 还是更高版本的 xff1f 基本都是8 xff0c 一些老项目是7 2 远程面试的时候让写算法题 xff0c 是线上写还是用纸写还是用面试公司开发的工具写 xff1f 会有方法输入提示吗 xff1
  • 解决No plugin found for prefix ‘archetype‘ in the current project and in the plugin groups

    建立Maven项目时 xff0c 在cmd输入mvn archetype generate命令后出现了标题的报错 xff0c 我在settings xml里面配置的mirror是阿里云 xff0c 尝试了网上的好几个解决方案都不行 xff0
  • RocketMQ介绍和简单使用

    RocketMq下载安装 下载网址 xff1a http rocketmq apache org dowloading releases 系统要求64bit Linux Unix或Mac JDK版本 gt 61 1 8 解压后其中的目录文件
  • 如何在Oracle官网下载java的JDK最新版本和历史版本

    1 打开Oracle官网 xff0c 准备下载JDK 下载时需要使用注册用户登陆 xff0c 可以免费注册 地址 xff1a https developer oracle com 2 点击Downloads xff0c 并选择Java SE
  • 【Java】Collections集合类介绍

    Collections集合类介绍 Collections 是一个操作Set List和Map等集合的工具类 xff0c 提供了一系列静态方法对集合元素进行排序 查询和修改等操作 1 排序操作 xff08 1 xff09 reverse Li
  • AD将元器件由正面,放置到反面/元器件由反面放到正面

    按住选中元器件 xff0c 选中元器件之外的部分变灰 xff0c 选中元器件变成高亮 再按英文按键 l xff0c 实现元器件的正反面放置
  • CentOS6 yum命令报错YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决

    原文地址 xff1a https www cnblogs com pistachio123 p 14301949 html 一 CentOS6 yum命令报错YumRepo Error All mirror URLs are not usi
  • Ubuntu 系统直接使用 root 用户登录实例

    Ubuntu 系统直接使用 root 用户登录实例 一般安装的Ubuntu 系统默认的不设置 root 帐户和密码 xff0c 这是为了安全做考虑 但是如果是本地虚拟机或者是作为测试使用 xff0c 直接使用root账户登录能减少很多麻烦
  • 深入浅出: 理解云原生基本原则

    云原生指的是一个敏捷的工程团队 xff0c 遵循敏捷的研发原则 xff0c 使用高度自动化的研发工具 xff0c 开发基于云基础设施和服务的应用以满足快速变化的客户需求 这些应用采用弹性 xff0c 可扩展和高可用的架构 这个工程团队通过高
  • java实现html转pdf

    1 需求 xff1a 将一个html页面转成pdf格式 2 方法 xff1a 在实现之前先考虑一个问题 xff0c pdf是前端生成还是后端生成 这里采用pdfbox 43 itext xff08 PDF文件名可自定义 xff09 技术在服
  • 生产者消费者模型(代码实现)

    一个场所 xff1a 队列 两个角色 xff1a 生产者 消费者 三种关系 xff1a 生产者 生产者 xff1a 互斥 消费者 消费者 xff1a 互斥 生产者 消费者 xff1a 同步 43 互斥 如果生产者直接将数据交给消费 xff0
  • XmlDocument操作XML

    https www cnblogs com fengxuehuanlin p 5631664 html C XmlDocument操作XML XML xff1a Extensible Markup Language xff08 可扩展标记语
  • Spring框架配置

    创建Maven项目 点击 Finish 按钮修改项目的Maven配置 在Maven仓库里查找Spring框架 xff0c 查看Spring Core xff0c 选择最新的版本 5 3 20 xff0c 添加到pom xml文件的 lt d
  • 在线古诗自动生成器的设计与实现

    在线古诗自动生成器的设计与实现 前言一 算法模型介绍LSTM简介模型框架实验环境实验与分析实验数据集数据集预处理训练过程模型训练结果模型的评估 二 在线古诗生成器的设计与实现系统结构远程服务器的项目部署系统测试 三 成品展示 前言 古诗 x