基于循环神经网络(RNN)的古诗生成器

您所在的位置:网站首页 古诗生成器aichpoem 基于循环神经网络(RNN)的古诗生成器

基于循环神经网络(RNN)的古诗生成器

2023-09-05 06:04| 来源: 网络整理| 查看: 265

基于循环神经网络(RNN)的古诗生成器,具体内容如下

之前在手机百度上看到有个“为你写诗”功能,能够随机生成古诗,当时感觉很酷炫= =

在学习了深度学习后,了解了一下原理,打算自己做个实现练练手,于是,就有了这个项目。文中如有瑕疵纰漏之处,还请路过的诸位大佬不吝赐教,万分感谢!

使用循环神经网络实现的古诗生成器,能够完成古体诗的自动生成。我简单地训练了一下,格式是对上了,至于意境么。。。emmm,呵呵

举一下模型测试结果例子:

1.生成古体诗

示例1:

树阴飞尽水三依,谩自为能厚景奇。 莫怪仙舟欲西望,楚人今此惜春风。

示例2:

岩外前苗点有泉,紫崖烟霭碧芊芊。 似僧月明秋更好,一踪颜事欲犹伤?

2.生成藏头诗(以“神策”为例)

示例1:

神照隆祭测馨尘,策紫珑氲羽团娟。

示例2:

神辇莺满花台潭,策穷渐见仙君地。

下面记录项目实现过程(由于都是文本处理方面,跟前一个项目存在很多类似的内容,对于这部分内容,我就只简单提一下,不展开了,新的东西再具体说):

1.数据预处理

数据集使用四万首的唐诗训练集,可以点击这里进行下载。

数据预处理的过程与前一个项目TensorFlow练手项目一:使用循环神经网络(RNN)实现影评情感分类大同小异,可以参考前一个项目,这里就不多说了,直接上代码。

# -*- coding: utf-8 -*- # @Time : 18-3-13 上午11:04 # @Author : AaronJny # @Email : [email protected] import sys reload(sys) sys.setdefaultencoding('utf8') import collections ORIGIN_DATA = 'origin_data/poetry.txt' # 源数据路径 OUTPUT_DATA = 'processed_data/poetry.txt' # 输出向量路径 VOCAB_DATA = 'vocab/poetry.vocab' def word_to_id(word, id_dict): if word in id_dict: return id_dict[word] else: return id_dict[''] poetry_list = [] # 存放唐诗的数组 # 从文件中读取唐诗 with open(ORIGIN_DATA, 'r') as f: f_lines = f.readlines() print '唐诗总数 : {}'.format(len(f_lines)) # 逐行进行处理 for line in f_lines: # 去除前后空白符,转码 strip_line = line.strip().decode('utf8') try: # 将唐诗分为标题和内容 title, content = strip_line.split(':') except: # 出现多个':'的将被舍弃 continue # 去除内容中的空格 content = content.strip().replace(' ', '') # 舍弃含有非法字符的唐诗 if '(' in content or '(' in content or ' 25: print 'bad.' break # 根据单双句添加标点符号 if cnt & 1: poem += ',' else: poem += '。' cnt += 1 # 打印生成的诗歌 print poem return poem if __name__ == '__main__': # generate_acrostic(u'神策') generate_poem()

6.一些提取出来的方法和配置

很简单,不多说。

utils.py

# -*- coding: utf-8 -*- # @Time : 18-3-13 下午4:16 # @Author : AaronJny # @Email : [email protected] import setting def read_word_list(): """ 从文件读取词汇表 :return: 词汇列表 """ with open(setting.VOCAB_PATH, 'r') as f: word_list = [word for word in f.read().decode('utf8').strip().split('\n')] return word_list def read_word_to_id_dict(): """ 生成单词到id的映射 :return: """ word_list=read_word_list() word2id=dict(zip(word_list,range(len(word_list)))) return word2id def read_id_to_word_dict(): """ 生成id到单词的映射 :return: """ word_list=read_word_list() id2word=dict(zip(range(len(word_list)),word_list)) return id2word if __name__ == '__main__': read_id_to_word_dict()

setting.py

# -*- coding: utf-8 -*- # @Time : 18-3-13 下午3:08 # @Author : AaronJny # @Email : [email protected] VOCAB_SIZE = 6272 # 词汇表大小 SHARE_EMD_WITH_SOFTMAX = True # 是否在embedding层和softmax层之间共享参数 MAX_GRAD = 5.0 # 最大梯度,防止梯度爆炸 LEARN_RATE = 0.0005 # 初始学习率 LR_DECAY = 0.92 # 学习率衰减 LR_DECAY_STEP = 600 # 衰减步数 BATCH_SIZE = 64 # batch大小 CKPT_PATH = 'ckpt/model_ckpt' # 模型保存路径 VOCAB_PATH = 'vocab/poetry.vocab' # 词表路径 EMB_KEEP = 0.5 # embedding层dropout保留率 RNN_KEEP = 0.5 # lstm层dropout保留率

7.完毕

编码到此结束,有兴趣的朋友可以自己跑一跑,玩一玩,我就不多做测试了。

项目GitHub地址:https://github.com/AaronJny/peotry_generate

博主也正在学习,能力浅薄,文中如有瑕疵纰漏之处,还请路过的诸位大佬不吝赐教,万分感谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:深度学习TextRNN的tensorflow1.14实现示例python循环神经网络RNN函数tf.nn.dynamic_rnn使用python人工智能tensorflow构建循环神经网络RNNPython使用循环神经网络解决文本分类问题的方法详解基于循环神经网络(RNN)实现影评情感分类TensorFlow实现RNN循环神经网络循环神经网络TextRNN实现情感短文本分类任务


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3