基于 LSTM 模型的古诗词自动生成算法实现及系统实现

        近年来,研究者在利用循环神经网络(Recurrent Neural Network,RNN)进行古诗自动生成方面取得了显著的效果。但 RNN 存在梯度问题,导致处理时间跨度较长的序列时 RNN 并不具备长期记忆存储功能。随后,出现的基于长短期记忆网络(Long Short-Term Memory,LSTM)古诗自动生成方法在一定程度上解决了 RNN 的梯度问题。本文将LSTM 应用在古诗自动生成技术上,并利用sparse_categorical_crossentropy损失函数和Adam(lr=0.002)优化算法对 LSTM模型进行优化,最后利用 flask 设计web界面进行操作和查看,可以根据提示词生成不同结构的五言律诗、七言绝句及藏头诗。结表明,相对于传统的RNN模型,LSTM模型在古诗自动生成方面生成的古诗效果更好。

1. LSTM模型设计与实现

        古诗在中华传统文化中扮演着不可或缺的重要角色,其精炼的语言、和谐的音调和鲜明的节奏令人神往。古诗的创造讲究平仄声调、韵律严谨、绝句对仗、起承转合以及用词考究,还讲究意境的创造,要求意境优美;要通过简洁凝练的诗句表现出一定的意义,达到语美、音美、意美的效果 。这给没有文学功底的古诗爱好者在写作古诗时带来了一定的挑战,同时也促进了研究者利用现代技术对古诗自动生成的研究与开发。深度学习(Deep Learning,DL)主要应用于图像识别、语音识别和自然语言处理等领域 。深度学习是机器学习和神经网络更深层次的融合技术,其本质是众多成熟的神经网络算法模型,旨在利用计算机模拟人的大脑神经元学习过程,从而具有人的“思考”“推理”“规划”“判断”等能力。目前,利用深度学习神经网络实现古诗自动生成已成为了一大研究热点。

        基于深度学习的歌词和古诗自动生成系统由多个模块构成,总体可以分为服务于 LSTM 神经网络的数据预处理模块、LSTM 神经网络模块等。数据预处理模块主要是对34646首传统古诗进行预处理,转换成 One-Hot 编码,神经网络才能进行矩阵计算、学习。LSTM 神经网络模块是最核心的模块,该模块是歌词和古诗生成最关键的部分,训练参数的选择十分重要,需要通过不断进行对比、调参,记录损失值和准确率来最终确定模型参数。建立古诗生成模型,需要三个步骤:搭建、训练和保存。
        1.1 搭建模型::核心结构是两层 LSTM 神经网络,需要注意的是每次都定义一个新的BasicCell,而不是定义一个 BasicCell 之后多次调用。LSTM 神经网络在处理序列数据方面非常有效,虽然 RNN 与 CNN 都能进行序列建模,但本质上有不同。在搭建模型过程中还使用了 Embedding 层,称为嵌入层,相当于一个网络层,在模型第一层中使用,其目的是将有索引的标签映射到高密度低维向量,达到降维的作用,可以防止One-Hot 向量维度过大导致的运算速度过慢的问题,该层通常用于文本数据建模。使用 LSTM 神经网络模型还有一个必不可少的全连接层(Dense 层),它能够根据特征的组合进行分类,大大减少特征位置对分类带来的影响。

# 定义双层LSTM模型
model = Sequential()
model.add(Embedding(len(words), 128, input_length=78))
model.add(LSTM(128, return_sequences=True))
model.add(LSTM(128, return_sequences=True))
model.add(Dense(len(words), activation=' relu'))
optimizer = Adam(lr=0.002)
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer)

        由于数据集较大,模型使用 Embedding 层将样本映射成低维向量,达到降维提速的效果。Embedding 层的词表大小设置为数据集中不重复字符的总数大小,词嵌入维度设置为 128。全连接层(Dense)设计。将数据集的词表大小设置为 Dense 层的维度,并使用 relu 作为 Dense 层的激活函数。优化函数设计。本文使用 Adam 优化算法对模型进行优化。利用大量数据集进行文本生成时,参数的梯度往往比较大,而加快训练速度减小参数梯度是 Adam优化算法的核心所在 。

        1.2 训练模型::创建 session 会话进行训练,由于训练集比较大,所以歌词生成模型训练 30 个周期,古诗生成模型训练 100 个周期。输入每一轮的损失值,通过每轮训练后损失值的变化判断 LSTM 神经网络模型性能是否发生欠拟合,再比较 LSTM神经网络模型在训练集和测试集的正确率判断 LSTM 神经网络模型是否发生过拟合。若发生欠拟合则应该增加 LSTM 神经网络模型的深度或者增加训练的时间,若发生过拟合则应该采取正则化的方法或者 Dropout 抑制过拟合。

# 训练模型
for epoch in range(100):for batch_idx, (x_batch, y_batch) in enumerate(generate_batch(poetrys_vector, batch_size)):model.fit(x_batch, y_batch, verbose=0)if batch_idx % 50 == 1:print('Epoch:', epoch, 'Batch:', batch_idx, 'Loss:', model.evaluate(x_batch, y_batch, verbose=0))

        1.3 保存模型
        古诗生成模型保存为H5文件。Keras 框架使用 model.save() 方法保存模型。

# 保存模型
model.save('poetry_model.h5')

        其训练过程如下:

 

2.  基于LSTM 模型的古诗词自动生成系统

        结合 Flask 框架的 Web 应用设计实现一个简单的 AI 诗歌生成器。在该代码中包含数据预处理:从文件中读取古诗数据,并进行预处理,包括去除特殊符号、筛选古诗长度等。将古诗转换为向量形式,每个字对应一个数字 ID。创建一个数据集类,用于按批次提取数据。使用 TensorFlow 定义了一个基于 LSTM 的 模型,用于生成古诗。定义生成古诗的函数:gen_head_poetry() 函数用于生成藏头诗,接受藏头和诗的类型(五言或七言)作为输入。gen_poetry() 函数用于随机生成古诗。在接收到请求时,根据请求的内容进行处理:如果请求是 POST 请求,则从表单中获取藏头和诗的类型,并生成对应的藏头诗或随机古诗。如果请求是 GET 请求,则从 URL 参数中获取相同的信息。最后,将生成的诗返回给客户端。实现界面如下:

        该系统的功能包含用户选择框,让用户选择生成的诗歌类型(随机生成、藏头诗5言、藏头诗7言);一个输入框,让用户输入诗歌的名称或关键词,用于生成诗歌的内容。在用户点击生成按钮后,根据用户选择的诗歌类型和输入内容,生成的诗歌内容将在页面上展示出来,供用户阅读和分享。

藏头诗5言:

随机生成: 

藏头诗7言:

3.结语 

        本文主要采用 LSTM(长短期记忆网络)神经网络模型来实现古诗的自动生成。首先,通过设计和实现循环神经网络(LSTM)诗歌生成模型,包括模型结构的设计、参数的设置以及模型的训练过程。然后,根据用户输入的条件,调用相应的模型生成相应的诗歌内容,并结合 Flask 技术将生成的诗歌展示在前端界面上,供用户阅读。
完整代码及数据集链接:
https://download.csdn.net/download/weixin_40651515/89131450

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【架构方法论(一)】架构的定义与架构要解决的问题

文章目录 一. 架构定义与架构的作用1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构:4R 架构 二、架构设计的真正目的-别掉入架构设计的误区1. 是为了解决软件复杂度2. 简单的复杂度分析案例 三. 案例思考 本文关键字 架构定义 架构与系统的关系从业务逻…

企业linux-堡垒机与跳板机测试案例-6140字详谈

在开始今天内容前,小编先把专栏前面学的Linux命令(部分)做了思维导图帮助各位平时的学习: 场景: 运维人员管理三台机器,通过远程连接工具连接上三台机器,也知道这三台机器root密码&#xff0c…

【Java探索之旅】掌握数组操作,轻松应对编程挑战

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、数组巩固练习1.1 数组转字符串1.2 数组拷贝1.3 求数组中的平均值1.4 查找数组中指…

Windows版Apache 2.4.59解压直用(免安装-绿色-项目打包直接使用)

windows下Apache分类 Apache分为 安装版和解压版 安装版: 安装方便,下一步------下一步就OK了,但重装系统更换环境又要重新来一遍,会特别麻烦 解压版(推荐): 这种方式(项目打包特别方便&#x…

力扣哈哈哈哈

public class MyStack {int top;Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1new LinkedList<Integer>();q2new LinkedList<Integer>();}public void push(int x) {q2.offer(x);//offer是入队方法while (!q1.isEmpty()){q2.offer(q1.pol…

HPTNet:为点云提取表面特征

论文题目&#xff1a;High-Performance Feature Extraction Network for Point Cloud Semantic Segmentation 论文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/10474110 文章目录 1. 平面几何特征的提取2. 几何和语义特征的分开处理3. Transformer模块4. 结…

MySQL基础知识——MySQL事务

事务背景 什么是事务&#xff1f; 一组由一个或多个数据库操作组成的操作组&#xff0c;能够原子的执行&#xff0c;且事务间相互独立&#xff1b; 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 注&#xff1a;MyS…

代码随想录算法训练营第一天 | 704. 二分查找 | 27. 移除元素

704. 二分查找 int search(int* nums, int numsSize, int target) {int left 0, right numsSize, mid;while (left < right) {mid left (right -left) / 2;if (nums[mid] < target) {left mid 1;} else if (nums[mid] > target) {right mid;} else {return mid…

CMMI认证是什么?如何确定CMMI认证的目标和范围

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证是一种用于评估和改进组织软件和项目管理过程的框架。它由美国国防部软件工程所&#xff08;SEI&#xff09;开发&#xff0c;旨在帮助组织提高其软件和项目管理的成熟度水平。 CMMI认证的意义在于&…

哪里有su材质库免费下载?

su材质库是一套草图大师的通用材质大全&#xff0c;包含多种不同类型的材质包和材质贴图&#xff0c;使得设计师能够轻松在电脑上进行直观的构思。对于需要免费下载su材质库的用户&#xff0c;可以尝试通过以下途径获取。 1. 官方网站查找&#xff1a;许多软件都会在官网上提供…

第十六篇:springboot案例

文章目录 一、准备工作1.1 需求说明1.2 环境搭建1.3 开发规范1.4 思路 二、部门管理2.1 查询部门2.2 删除部门2.3 新增部门2.4 修改部门2.5 RequestMapping 三、员工管理3.1 分页查询3.2 删除员工3.3 新增员工3.3.1 新增员工3.3.2 文件上传 3.4 修改员工3.4.1 页面回显3.4.2 修…

【数据结构】-- 栈和队列

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

二十一.订单分析RFM模型

目录 1.数据读取 2.数据清洗 3.可视化分析 做图吧 4.RFM模型 本次数据条数为: 51101 import pandas as pd import numpy as np 1.数据读取 #读取文件 df_data pd.read_csv("../data/dataset.csv",encoding"gbk") df_data#因为列标签都是英文,这里我…

通讯录的实现(顺序表)

前言&#xff1a;上篇文章我们讲解的顺序表以及顺序表的具体实现过程&#xff0c;那么我们的顺序表在实际应用中又有什么作用呢&#xff1f;今天我们就基于顺序表来实现一下通讯录。 目录 一.准备工作 二.通讯录的实现 1.通讯录的初始化 2.插入联系人 3.删除联系人 4.…

手机副业赚钱秘籍:让你的手机变成赚钱利器

当今社会&#xff0c;智能手机已然成为我们生活不可或缺的一部分。随着技术的飞速进步&#xff0c;手机不再仅仅是通讯工具&#xff0c;而是化身为生活伴侣与工作助手。在这个信息爆炸的时代&#xff0c;我们时常会被一种焦虑感所困扰&#xff1a;如何能让手机超越消磨时光的定…

TinyEMU源码分析之访存处理

TinyEMU源码分析之访存处理 1 访存指令介绍2 指令译码3 地址转换3.1 VA与PA3.2 VA转PA 4 判断地址空间范围5 执行访存操作5.1 访问RAM内存5.2 访问非RAM&#xff08;设备&#xff09;内存 6 访存处理流程图 本文属于《 TinyEMU模拟器基础系列教程》之一&#xff0c;欢迎查看其…

【AI】什么是Ai Agent

什么是AI Agent&#xff1f; AI Agent是指人工智能代理&#xff08;Artificial Intelligence Agent&#xff09;是一种能够感知环境进行自主理解&#xff0c;进行决策和执行动作的智能体。AI Agent具备通过独立思考、调用工具逐步完成给定目标的能力。不同于大模型的区别在于&…

OpenHarmony实战开发-如何使用屏幕属性getDefaultDisplaySync、getCutoutInfo接口实现适配挖孔屏。

介绍 本示例介绍使用屏幕属性getDefaultDisplaySync、getCutoutInfo接口实现适配挖孔屏。该场景多用于沉浸式场景下。 效果图预览 使用说明 1.加载完成后顶部状态栏时间和电量显示位置规避了不可用区域。 实现思路 1.通过setWindowLayoutFullScreen、setWindowSystemBarEn…

代码随想录训练营

Day23代码随想录 669.修剪二叉搜索树 1.题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有…

Hbase的简单学习一

一 Hbase的搭建与安装 1.1 安装 1.准备好文件&#xff0c;上传到Linux上 2.解压文件 tar zxvf hbase-2.2.7-bin.tar.gz -C ../ ../是解压到的路径 1.2 配置文件 1.配置环境变量 去etc/profile目录下 export HBASE_HOME/usr/local/soft/hbase-2.2.7 export PATH$PATH:$H…