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

news2024/12/23 18:46:04

        近年来,研究者在利用循环神经网络(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.coloradmin.cn/o/1601667.html

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

相关文章

(十一)C++自制植物大战僵尸游戏客户端更新实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/cFP3z 更新检查 游戏启动后会下载服务器中的版本号然后与本地版本号进行对比,如果本地版本号小于服务器版本号就会弹出更新提示。让用户选择是否更新客户端。 在弹出的更新对话框中有显示最新版本更新的内容…

全球化背景下的海外社媒营销战略:趋势洞察与策略调整

随着全球化的不断深入,企业在海外市场的竞争愈发激烈。在这一背景下,海外社交媒体平台成为了企业品牌推广和营销的重要渠道。本文Nox聚星将和大家探讨全球化背景下,企业如何利用海外社交媒体平台进行品牌推广和营销,并分析企业如何…

Git分布式版本控制系统——在IDEA中使用Git(一)

一、在IDEA中配置Git 本质上还是使用的本地安装的Git软件,所以需要在IDEA中配置Git 打开IDEA的设置页面,按照下图操作 二、在IDEA中使用Git获取仓库 1、本地初始化仓库 2、从远程仓库克隆 方法一: 方法二: 三、.gitignore文件…

#陶晶驰串口屏使用

1.陶晶驰串口屏输入要连接的wifi信息实现 (1)选择文本控件 (2)给文本控件配置输入键盘,id代表用户名,password代表wifi密码(注意wifi的频段需要为2.4GHz) (3&#xff0…

k8s之etcd

1.特点: etcd 是云原生架构中重要的基础组件。有如下特点: 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中监…

RAG (Retrieval Augmented Generation) 结合 LlamaIndex、Elasticsearch 和 Mistral

作者:Srikanth Manvi 在这篇文章中,我们将讨论如何使用 RAG 技术(检索增强生成)和 Elasticsearch 作为向量数据库来实现问答体验。我们将使用 LlamaIndex 和本地运行的 Mistral LLM。 在开始之前,我们将先了解一些术…

性能工具之emqtt-bench BenchMark 测试示例

文章目录 一、前言二、典型压测场景三、机器准备四、典型压测场景1、并发连接2、消息吞吐量测试2.1 1 对 1(示例)2.2 多对1(示例)2.3 1对多(示例) 五、遇到的问题client(): EXIT for {shutdown,eaddrnotava…

OpenStack镜像管理与制作

一、OpenStack镜像服务 1、什么是镜像 镜像通常是指一系列文件或一个磁盘驱动器的精确副本。虚拟机所使用的虚拟磁盘,实际上是一种特殊格式的镜像文件。云环境下尤其需要镜像。镜像就是一个模板,类似于VMware的虚拟机模板,其预先安装基本的…

五步教你正确申请免费SSL证书

在当今数字化时代,保护网站数据安全和提升用户信任至关重要,而实现这一目标的有效途径之一便是为网站部署SSL(Secure Sockets Layer)证书。SSL证书能够加密网站与用户之间的通信,确保敏感信息不被第三方窃取。幸运的是…

1.8.5 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v4 和 Inception-ResNet

1.8.5 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v4 和 Inception-ResNet 前情回顾: 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet 1.8.3 卷积神经网络近…

一篇安装配置ubuntu22.04(步骤详细,配置成功)

一篇配置ubuntu22.04(步骤详细,配置成功) 官网下载相应的镜像 vitualbox安装ubuntu 新建虚拟机 第一步 第二步 第三步、按需分配内存、处理器个数、磁盘大小 第四步、一直下一步直至完成 配置虚拟机网络 第一步、先停止虚拟机 第二步、设置虚拟机网络 正常启…

浅谈Java JVM

Java虚拟机(Java Virtual Machine,简称JVM)是Java语言的核心组成部分,它是一个抽象的计算机,负责执行Java字节码指令。JVM是Java平台无关性的基石,它为Java代码提供了一个标准的运行环境,使Java…

stable diffusion--小白学习步骤

1.看一下Unet网络的讲解_哔哩哔哩_bilibili,了解Unet网络 2.看一下【生成式AI】Diffusion Model 原理剖析 (1/4)_哔哩哔哩_bilibili,起码要看前3/6个视频 3.看一下超详细的扩散模型(Diffusion Models)原理代码 - 知乎 (zhihu.co…

关于Ubuntu Server root用户的坑

1 ubuntu server root 用户 ubuntu server 安装过程中会有这个界面,这个界面会比较烦人,让你必须创建一个非root用户,然后只能用这个用户登录,登录上去之后又没有root权限。 输入上一步创建的用户名和密码 登录成功之后&#xff0…

VS Code 前端个人常用扩展分享

这里总结一下 VS Code 里自己开发常用的一些扩展,分三类:基础的,进阶的,工作相关的 一、基础类 首先就是代码拼写检查,引入,辅助开发的一些扩展 语言包 Chinese (Simplified) (简体中文) Language Pack…

重生奇迹mu恶魔来袭副本

在游戏重生奇迹mu中,恶魔来袭副本是玩家能够组队通过的副本。但是因为手游组队的不方便性,部分玩家对其还是非常苦手。而今天,我们就给大家讲解一下这个游戏的双人通关攻略。 1、挂机找怪手动输出 (1)对于普通剧情副本而言,挂机…

HA-Maleimide-HA马来酰亚胺修饰透明质酸 水凝胶递送药物

HA-Maleimide-HA马来酰亚胺修饰透明质酸 水凝胶递送药物 【中文名称】马来酰亚胺修饰透明质酸 【英文名称】HA-Maleimide 【分 子 量】3k/5k/7k/10k/50k/100k/200k/300k/500k/1000k...... 【结 构 式】 【品 牌】碳水科技(Tanshtech) 【纯 度…

模型微调与迁移学习:实现领域适应性评估

源自:大数据AI人工智能 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 机器学习的挑战 在机器学习领域,我们通常面临着许多挑战,如数据量不足、数据不平衡、模型泛化能力不足等。为了解决这些问题,研究人员提出了许…

【结构型模式】组合模式

一、组合模式概述 组合模式的定义与意图:将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。(对象结构型) 组合模式分析: 1.当容器对象的某一个方法被调用时,将遍…

鸿蒙入门02-首次安装和配置

注:还没有安装编辑器( deveco studio )的小伙伴请看鸿蒙入门01-下载和安装-CSDN博客 首次安装配置 编辑器( deveco studio )安装完毕以后需要进入配置界面进行相关配置配置完毕以后才可以正常使用 环境配置&#xf…