古诗文本自动生成唐诗文本生成(算例代码)

首先准备好一个本地文件,在此我命名为唐诗三百首.txt如下图(https://img-blog.csdnimg.

图片:

##代码如下


import numpy as np, os
from collections import Counter
from warnings import filterwarnings
filterwarnings('ignore')  # 不打印警告from keras.utils import to_categorical
from keras.models import Sequential, load_model
from keras.layers import Conv1D, MaxPool1D, GlobalMaxPool1D, Dense,Flattencorpus_path = '唐诗三百首.txt'
len_chr = 1000  # 字库大小
window = 24  # 滑窗大小
filters = 20  # 卷积录波器数量
kernel_size = 5  # 卷积核大小
times = 4 # 训练总次数
batch_size = 250
epochs = 2
window = 24  # 滑窗大小(一句诗词5个字,加一个标点共6个字符。一首诗4句。共24个字符
filepath = 'model.hdf5'#读取古诗文件
with open(corpus_path, encoding='utf-8') as f:seq_chr = f.read().replace('\n', '')len_seq = len(seq_chr)  # 语料长度372864
chr_ls = Counter(list(seq_chr)).most_common(len_chr)#按照词频统计字,从高频到低频 生成类似(',', 31072), ('。', 31072), ('不', 3779), ('人', 3377),
chr_ls = [i[0] for i in chr_ls]#将字按频数写成列表 类似[',', '。', '不', '人', '山', '日', '云', '风', '无', '一', '月', '何', '有
chr2id = {c: i for i, c in enumerate(chr_ls)}#{字:频数 }字典
id2chr = {i: c for c, i in chr2id.items()}#{频数:字 }字典
seq_id = [chr2id[c] for c in seq_chr]  # 文字序列 --> 索引序列 #找到chr2id里的每个字在原文的索引位置.
c2i = lambda c: chr2id.get(c, np.random.randint(len_chr))#字典取值,有取c,没有随便从1000(len_chr)个取一个字

输入x,输出y处理:

#输入输出处理
reshape = lambda x: np.reshape(x, (-1, window, 1)) / len_chr#1维卷积输入格式(-1,size,1)
x = [seq_id[i: i + window] for i in range(len_seq - window)]
x = reshape(x)#(372840, 24, 1)
y = [seq_id[i + window] for i in range(len_seq - window)]
y = to_categorical(y, num_classes=len_chr)#(372840, 1000) 一个文字一个种类

模型:

def CNNmodel():model = Sequential()model.add(Conv1D(filters, kernel_size * 2, padding='same', activation='relu'))model.add(MaxPool1D())model.add(Conv1D(filters * 2, kernel_size, padding='same', activation='relu'))model.add(Flatten())model.add(Dense(len_chr, activation='softmax'))model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy'])return modelmodel=CNNmodel()
model.fit(x,y)
model.save(filepath)

#随机采样:

#随机采样
def draw_sample(predictions, temperature):pred = predictions.astype('float64')  # 提高精度防报错pred = np.log(pred) / temperaturepred = np.exp(pred)pred = pred / np.sum(pred)pred = np.random.multinomial(1, pred, 1)return np.argmax(pred)

预测函数:

def predict(t, pred):if t:print('随机采样,温度:%.1f' % t)sample = draw_sample#调用随机采样函数else:print('贪婪采样')sample = np.argmaxfor _ in range(window):#循环24次,进行预测,打印24个字形成一首诗x_pred = reshape(pred[-window:])#-window:每次取最后24个字作为输入,并变换为一维卷积神经网络输入格式reshapey_pred = model.predict(x_pred)[0]#y_pred为[[]]2维数组(1, 1000),[0]表示变换格式为[](1000,)i = sample(y_pred, t)#随机采样pred.append(i)text = ''.join([id2chr[i] for i in pred[-window:]])#将输出添加进字符串print('\033[033m%s\033[0m' % text)

#加载模型

model = load_model(filepath)

#主函数

if __name__ == '__main__':while True:#无限循环title = input('输入标题').strip() + '。'len_t = len(title)randint = np.random.randint(len_seq - window + len_t)#数据库字的总长度-要输出的文字window长度+标题长度,从这里面取数randint = int(randint // 12 * 12)pred = seq_id[randint: randint + window - len_t] + [c2i(c) for c in title]#随机取一些字+输入标题字组成24个字作为输入for t in (None, 1, 2,3):predict(t, pred)

预测示范:

总代码

import numpy as np, os
from collections import Counter
from warnings import filterwarnings
filterwarnings('ignore')  # 不打印警告from keras.utils import to_categorical
from keras.models import Sequential, load_model
from keras.layers import Conv1D, MaxPool1D, GlobalMaxPool1D, Dense,Flattencorpus_path = '唐诗三百首.txt'
len_chr = 1000  # 字库大小
window = 24  # 滑窗大小
filters = 20  # 卷积录波器数量
kernel_size = 5  # 卷积核大小
times = 4 # 训练总次数
batch_size = 250
epochs = 2
window = 24  # 滑窗大小(一句诗词5个字,加一个标点共6个字符。一首诗4句。共24个字符
filepath = 'model.hdf5'#读取古诗文件
with open(corpus_path, encoding='utf-8') as f:seq_chr = f.read().replace('\n', '')len_seq = len(seq_chr)  # 语料长度372864
chr_ls = Counter(list(seq_chr)).most_common(len_chr)#按照词频统计字,从高频到低频 生成类似(',', 31072), ('。', 31072), ('不', 3779), ('人', 3377),
chr_ls = [i[0] for i in chr_ls]#将字按频数写成列表 类似[',', '。', '不', '人', '山', '日', '云', '风', '无', '一', '月', '何', '有
chr2id = {c: i for i, c in enumerate(chr_ls)}#{字:频数 }字典
id2chr = {i: c for c, i in chr2id.items()}#{频数:字 }字典
seq_id = [chr2id[c] for c in seq_chr]  # 文字序列 --> 索引序列 #找到chr2id里的每个字在原文的索引位置.
c2i = lambda c: chr2id.get(c, np.random.randint(len_chr))#字典取值,有取c,没有随便从1000(len_chr)个取一个字#输入输出处理
reshape = lambda x: np.reshape(x, (-1, window, 1)) / len_chr#1维卷积输入格式(-1,size,1)
x = [seq_id[i: i + window] for i in range(len_seq - window)]
x = reshape(x)#(372840, 24, 1)
y = [seq_id[i + window] for i in range(len_seq - window)]
y = to_categorical(y, num_classes=len_chr)#(372840, 1000) 一个文字一个种类def CNNmodel():model = Sequential()model.add(Conv1D(filters, kernel_size * 2, padding='same', activation='relu'))model.add(MaxPool1D())model.add(Conv1D(filters * 2, kernel_size, padding='same', activation='relu'))model.add(Flatten())model.add(Dense(len_chr, activation='softmax'))model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy'])return model
"""
model=CNNmodel()
model.fit(x,y)
model.save(filepath)"""
#模型加载
model = load_model(filepath)
#随机采样
def draw_sample(predictions, temperature):pred = predictions.astype('float64')  # 提高精度防报错pred = np.log(pred) / temperaturepred = np.exp(pred)pred = pred / np.sum(pred)pred = np.random.multinomial(1, pred, 1)return np.argmax(pred)def predict(t, pred):if t:print('随机采样,温度:%.1f' % t)sample = draw_sample#调用随机采样函数else:print('贪婪采样')sample = np.argmaxfor _ in range(window):#循环24次,进行预测,打印24个字形成一首诗x_pred = reshape(pred[-window:])#-window:每次取最后24个字作为输入,并变换为一维卷积神经网络输入格式reshapey_pred = model.predict(x_pred)[0]#y_pred为[[]]2维数组(1, 1000),[0]表示变换格式为[](1000,)i = sample(y_pred, t)#随机采样pred.append(i)text = ''.join([id2chr[i] for i in pred[-window:]])#将输出添加进字符串print('\033[033m%s\033[0m' % text)if __name__ == '__main__':while True:#无限循环title = input('输入标题').strip() + '。'len_t = len(title)randint = np.random.randint(len_seq - window + len_t)#数据库字的总长度-要输出的文字window长度+标题长度,从这里面取数randint = int(randint // 12 * 12)pred = seq_id[randint: randint + window - len_t] + [c2i(c) for c in title]#随机取一些字+输入标题字组成24个字作为输入for t in (None, 1, 2,3):predict(t, pred)

数据集低配版链接:唐诗一百首.txt 数据集
高配数据集链接:
数据集:唐诗三百首.txt

数据集决定着最后好坏,几百首还是太少啦。
在这里插入图片描述
电气工程的计算机萌新:余登武。写博文不容易,如果你觉得本文对你有用,请点个赞支持下。谢谢。
在这里插入图片描述

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

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

相关文章

UE4_UE5结合offline voice recognition插件做语音识别功能

市面上主流的语音识别大多是用科大讯飞的SDK,但是那个也不是完全免费使用的,于是我选择使用offline voice recognition的语音识别,购买插件终生使用。 offline voice recognition插件在UE官方商城卖200多元。 我将它需要的资源都打包成一个r…

AI协助理清思路?两位大学生短时间内开发的ChatMind思维导图为知识工作者带来无限便利

为什么结合ChatGPT生成的思维导图比其他ChatGPT有优势 结合ChatGPT生成的思维导图的优势在于,它可以将ChatGPT生成的信息可视化并以图形化的方式呈现出来。这样可以让用户更容易理解,记忆和组织ChatGPT生成的信息。思维导图还可以帮助人们分析ChatGPT生…

写了一首 Java 表白诗,女朋友不愁了!

祝大家 情人节快乐 一首原创 Java 诗 表白大家了 遇见你的第一天 忍不住内心的躁动 我在心里开辟了一块你的内存区域 和你的每一次美好邂逅 我都封装成记忆 深深将它压入堆栈 舍不得让它逃逸 追求你的队列很长 并发很高 我也加入了竞争 拼命挣抢着你的爱情锁 却被一直阻塞着 想…

写一首 Java 表白诗,女朋友不愁了 | 每日趣闻

作者 | 栈长 来源 | Java技术栈(ID:javastack) 遇见你的第一天 忍不住内心的躁动 我在心里开辟了一块你的内存区域 和你的每一次美好邂逅 我都封装成记忆 深深将它压入堆栈 舍不得让它逃逸 追求你的队列很长 并发很高 我也加入了竞争 拼命挣抢…

我居然帮初恋用Python去追她男神,这波舔狗真的坐实了啊~

事情的起因呢是这样的,初恋前几天突然给我发消息,内心一阵的波涛汹涌啊以为好事将近。聊了几句之后才发现她这是醉翁之意不在酒啊 特意找上我居然是因为辣条我是程序员来让我想办法帮她追现在隔壁家的小哥哥,真的是叔可忍婶不可忍啊。但是面…

【python】程序员最浪漫的表白方式,将情书写在她的照片里

前言 大家早好、午好、晚好吖~ 这不光棍节快到了,表弟准备写一封情书给他的女神,想在光棍节之前脱单。 为了提高成功率,于是跑来找我给他参谋参谋,本来我是不想理他的。 不过谁让他是我表弟呢(请我洗jio)…

程序员最浪漫的表白方式,将情书写在她的照片里,Python简直太厉害啦~

人生苦短,我用Python 序言实现步骤1、准备工作2、Pillow 介绍3、实战演练 序言 这不光棍节快到了,表弟准备写一封情书给他的女神,想在光棍节之前脱单。 为了提高成功率,于是跑来找我给他参谋参谋,本来我是不想理他的&…

一次10万token!GPT4最强对手史诗升级,百页资料一分钟总结完毕

号称ChatGPT“最强竞争对手”的Claude,今天迎来史诗级更新—— 模型记忆力原地起飞,现在1分钟看完一本数万字的小说,已经不在话下。 消息一出,评论区直接炸了,网友们蜂拥而至,“woc连连”: 疯了…

刚刚!全球科技巨头官宣:再裁 9000 人...

点关注公众号,回复“1024”获取2TB学习资源! 当地时间3月20日,全球科技巨头亚马逊宣布再裁员约9000人,目标瞄准薪酬更高的员工。按照美联社说法,最新宣布的这轮裁员规模为亚马逊“历史上第二大”,仅次于1月…

微信官方回应不会推出「已读」功能,网友:“这些功能先完善一下!”

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 7 月 11 日,#如果微信显示已读的话# 的话题冲上微博热搜,引发热议不断。 与此同时,「回复焦虑、社交困扰、意念回复、退网」等词眼,开始涌…

chatgpt赋能python:用Python进行选股——走进智能投资时代

用Python进行选股——走进智能投资时代 简介 投资者在股票投资中常常面临的问题是如何找到潜在的优质股票。传统的选股方法是基于人工分析和大量数据筛选,耗时又费力。而现代的使用 Python 进行选股的方法,可以将人工分析和大量数据筛选进行自动化&…

3.11 怎么增加小红书评论区的互动?【玩赚小红书】

今天就为大家总结了一下,关于小红书粉丝互动的一些小技巧,来供大家参考。 ​ ​ 一、 固好“真爱粉” 经常会在笔记下面评论、点赞、浏览笔记内容的粉丝,也就是所谓的“真爱粉”、“铁粉”,我们就需要用心维护这一部分粉丝。 ​…

无聊小知识.04 以下代码会输出什么?

1、前言 今天同事给我看了一段代码,然后这段简单的代码,我却陷入了沉思。 2、代码 String string ""; try {string "123";return string; } finally {string "234"; } 这段代码,string最终是“123”还是…

API接口设计不合理?个人和公司都有问题

前言 在软件产品或项目开发过程中,往往涉及到大量API接口的开发任务。而一个接口的诞生如果是令人费解的、痛苦折磨的以及有严重后遗症的,究其根本原因还在于设计API接口的时候不够清晰、合理以及缺乏长远考虑。我依据多位同事的问答、实际工作的经验和…

从亿点点失误,到一点点失误,我是如何做的【工作失误怎么办】

前言 只要我们还在做事,或者说还活着,就没有不犯错的时候。作为一名前端搬砖工,哪怕工作中再仔细小心,也免不了一些失误。 那这是不是说,失误很正常,改了就是嘛? 这么说好像没错。作为失误本…

2023年春季学期NLP总结作业

自然语言处理(Natural Language Processing,NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。自然语言处理是计算机科学领域与人工智能领域中的一个重要方向…

检讨怎么写?检讨范文,秘密法宝帮你一分钟速写检讨

检讨不会写,看这里,一分钟速成班教学开始 其实。。。哪有什么一分钟速成班,就是告诉你有个秘密法宝,一分钟之内帮你写出一篇检讨,你只要输入你的问题描述,包括因为什么犯了错、需要写几百字等等&#xff0…

[Android] 检讨书生成器1.0

软件介绍 软件名称:检讨书生成器 适用设备:Android 软件大小 : 10.4 M 使用说明 进入软件后在主题对话框输入,例如:上课 吃屎,字数200,即可生成检讨书,如图所示 下载链接

为啥不能用比特币给贪官送礼?

知乎上有很多脑洞,飘在天上的还好说,结合现实的也太好笑了,比如下面这个: 图源知乎 谈笑间,币圈灰飞烟灭。 ——网友热评

企业微信如何快速接入智能机器人(智能客服)?

如何让你的企业微信快速接入智能机器人,增加和员工互动的趣味性,同时解决员工各种高频问题呢? 1、首先,你需要创建一个属于自己的聊天机器人,直接注册并完成创建就可以了。 2、找到【对接渠道】,选择【企业…