LSTM古诗词生成

article/2025/9/9 8:00:07

Le LSTM古诗词生成
一、简介
基于LSTM的古诗词生成,设计神经网络模型,使模型学习数据是6291首古诗,没有专门的验证数据和测试数据,感觉不会预测正确。边学习边生成古诗,从生成的古诗来看学习的效果。
涉及到的模块有Pytorch、Dataset、word2vec、LSTM。
二、处理流程
2.1字向量训练(Wordvec)
主要是把字、标点符号转换成向量,以使计算机认识,然后存储为pkl文件,以供后续训练时调用。
2.2封装数据(Dataset、DataLoader)
主要工作是将字向量进行提取、封装、打包,放在2.3的模型中去训练,承接连接2.1和2.3的工作。
在这里插入图片描述
2.3组合模型 (LSTM+Linear)
我们使用的pytorch的一些函数。组合我们自己的模型,用到的有nn.LSTM、nn.Dropout、nn.Linear、nn.CrossEntropyLoss
在这里插入图片描述
2.4训练开始
设置一些超参数,调用已经处理为向量封装好的模型进行训练。超参数包含学习率,epoch轮次等。
2.5生成古诗
训练的时候想要看到训练的效果如何,在训练的时候就调用生成古诗函数,边训练边生成古诗,可以看到生成的古诗会越来越好。下图是古诗词生成的原理图。
在这里插入图片描述
三、代码实现
3.1 数据预处理
这部分主要对数据文件进行读取、预处理等,以符合训练数据的要求进行训练,处理后的文件保存为新文件。
以下是代码:
在这里插入图片描述
接下来是读取处理后的数据文件,把数据转换为向量,然后保存参数模型。
以下是代码:
在这里插入图片描述
创建MyDataset类,继承Dataset类,重写三个函数,def init(),def getitem(),def len():。Getitem()函数主要是对向量数据进行处理操作,以符合生成古诗词模型时对数据的调用。
以下是代码:
在这里插入图片描述
3.2 创建网络模型
在这里插入图片描述
创建MyModel网络模型,继承nn.model。该类主要有三个函数,init()、forward()、to_train()。
Init()函数代码:
在这里插入图片描述
Forward()函数代码:
在这里插入图片描述
To_train()函数代码:
在这里插入图片描述
3.3、古诗词生成
这里先随机生成一个字,然后开始预测后边的字,选择概率最高的确定为下一个字,然后并以此为当前字继续预测下一个字,以此类推最终生成一首诗。
在这里插入图片描述
3.4、主函数
主函数主要是设置一些超参数(学习率、epoch轮次、batch_size、hidden_num)、创建数据类、创建神经网络模型并调用。
在这里插入图片描述
四、运行结果
在这里插入图片描述
可以看到已经经过训练,模型自己已经可以生成正确格式的诗句了,具体诗句的含义和押韵还有待提高
[1] 斋藤康毅.深度学习入门[M].人民邮电出版社,2018.

[2] https://www.bilibili.com/video/BV1G54y177iw?p=1


http://chatgpt.dhexx.cn/article/9muKuwsQ.shtml

相关文章

宋词自动生成

利用宋词语料库,通过单双词的组合与模板的匹配,实现指定词牌宋词的生成 import random import tkinter as tk import re from tkinter import messageboxlist []class Window:# 界面设计def __init__(self, root):label1 tk.Label(root, text输入词牌…

基于Python的宋词生成器

资源下载地址:https://download.csdn.net/download/sheziqiong/85631523 1. 背景 我有两个爱好,一个是传统文化,另一个是高新技术。 传统文化,我喜欢唐诗宋词、笔墨丹青,高新技术我则从事前沿的IT编程,喜…

基于java的古诗词生成管理系统

10161-古诗词生成管理系统 开发工具 eclipse tomact mysql jdk 功能详情: 古诗搜索、古诗问答、机器回复、古诗管理(添加古诗、古诗分类、古诗标签、古诗列表)、用户管理

田字格字帖生成器、孩子取名系列工具

大家好,我是小寻,欢迎关注公众号:工具优选,免费领取优质项目源码和常用工具,还可以加入我的交流群! 这是是一款2013年上线的在线小工具集,包括了 13 款中文学习工具,有田字格字帖、拼音田字格、古诗词字帖…

有趣的深度学习——使用TensorFlow 2.0 + RNN 实现一个古体诗生成器

一、前言 很早之前,我曾经写过一个古体诗生成器(详情可以戳TensorFlow练手项目二:基于循环神经网络(RNN)的古诗生成器),那个时候用的还是Python 2.7和TensorFlow 1.4。 随着框架的迭代,API 的变更&#x…

现在还可以一键自动生成古诗词,你知道吗?

人类在漫长的历史长河中,一直在探索着各种各样的美好,不断地追求着更高的境界。而如今,随着科技的不断发展,人工智能已经成为了我们得力的伙伴之一,为我们带来了更多的便利和可能性。尤其是在艺术和文化领域&#xff0…

古诗词在线起名 - 一刀工具箱

古诗词名字生成器帮助你在线生成古诗词名字,包含:诗经、楚辞、唐诗、宋词、辞赋等古风的名字,这些名字都非常的优美好听,希望你们能够喜欢这款古诗词起名工具。 代码片段 async subName() {let name_arr Object.keys(this.userN…

NLP入门 - 基于Word Embedding + LSTM的古诗生成器

一共实现三个功能: 1. 续写五言诗 2. 续写七言诗 3. 写五言藏头诗 之前用这个做Intro to Computer Science的期末项目折腾太久,不想赘述,内容介绍及实现方法可参考期末presentation的slides: https://docs.google.com/presen…

基于古诗词的名字生成器

数据集 因为数据量庞大,使用本地的 CSV 数据进行测试。 后续改进 CSV 文件保存到 mongodb 数据库,便于聚合查询。 数据分词 我们需要一个分词器将这些数据进行分词,用到的是 Golang 版的 jieba 库如下: "github.com/go-e…

基于LSTM + keras 的古诗生成器

1.语料准备:包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。诗人包括唐宋两朝近 1.4 万古诗人,和两宋时期 1.5 千古词人。数据来源于互联网。每行一首诗,标题在预处理的时候已经去掉了。2.模型参数配置:预先定义模…

唐诗生成器

使用唐诗语料库,经过去噪预处理、分词、生成搭配、生成主题等过程,生成唐诗。 csdn下载地址:http://download.csdn.net/detail/lijiancheng0614/9840952 github上repository地址:https://github.com/lijiancheng0614/poem_genera…

JQuery中的val()函数

JQuery中的val()函数相当于Javascript中的value属性,可以用来设置和获取元素的值。 下面用一个简单的邮箱登陆界面来举个例子: 在默认情况下邮箱的地址输入框和密码输入框都有相应的提示。 要求:当鼠标聚焦在邮箱地址输入框时,提…

【Python】sklearn中的cross_val_score()函数参数

sklearn 中的cross_val_score函数可以用来进行交叉验证,因此十分常用,这里介绍这个函数的参数含义。 sklearn.cross_validation.cross_val_score(estimator, X, yNone, scoringNone, cvNone, n_jobs1, verbose0, fit_paramsNone, pre_dispatch‘2*n_job…

sklearn交叉验证函数cross_val_score用法及参数解释

文章目录 一 、使用示例二、参数含义三、常见的scoring取值1.分类、回归和聚类scoring参数选择2.f1_micro和f1_macro区别3.负均方误差和均方误差 一 、使用示例 import numpy as np from sklearn.model_selection import train_test_split from sklearn import svm from sklea…

java val_Java中是否有val()函数?

慕尼黑的夜晚无繁华 很少有实际用例能够评估String作为Java代码的一个片段是必要的或可取的。也就是说,询问如何做到这一点实际上是XY问题:你实际上有一个不同的问题,可以用不同的方法来解决。先问问自己,这是怎么回事String你想要…

c语言val函数用法,函数VAL()什么意思怎么用啊?/

满意答案 Dickyshe 2013.03.22 采纳率:50% 等级:12 已帮助:12551人 将一个数据行变量转换成数字长整型变量如 text1.text "10" text2.text "11" text3.text text1.texttext2.text 按道理应该得到10+11(…

mysql中val是什么意思_val是什么函数

val是将由数字符号组成的字符型数据转换成相应的数值型数据的函数,其语法是“Val(S,V,Code)”,若字符串内出现非数字字符,那么只转换非数字字符前面的部分;若字符串的首字符不是数字符号,则返回数值零,但忽…

抽象方法的访问修饰符

抽象方法不能使用private修饰符,也不宜使用默认修饰符(default) (1)如果使用private修饰符 public abstract class SuperClass {/** The abstract method test in type SuperClass can only set a visibility modifi…

Java之访问修饰符

1.访问修饰符 java提供四种访问修饰符,用于控制方法和属性(成员变量)的访问权限 四种分别是 公开级别:public,对外公开 受保护级别:protected,对子类和同一个包的类公开 默认级别&#xff…