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

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

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

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

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

1.生成古体诗

示例1:

树阴飞尽水三依,谩自为能厚景奇。

莫怪仙舟欲西望,楚人今此惜春风。

示例2:

岩外前苗点有泉,紫崖烟霭碧芊芊。

似僧月明秋更好,一踪颜事欲犹伤?

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

示例1:

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

示例2:

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

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

1.数据预处理

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

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

# -*- coding: utf-8 -*-

# @Time : 18-3-13 上午11:04

# @Author : AaronJny

# @Email : Aaron__7@163.com

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 '

continue

# 舍弃过短或过长的唐诗

lenth = len(content)

if lenth < 20 or lenth > 100:

continue

# 加入列表

poetry_list.append('s' + content + 'e')

print '用于训练的唐诗数 : {}'.format(len(poetry_list))

poetry_list=sorted(poetry_list,key=lambda x:len(x))

words_list = []

# 获取唐诗中所有的字符

for poetry in poetry_list:

words_list.extend([word for word in poetry])

# 统计其出现的次数

counter = collections.Counter(words_list)

# 排序

sorted_words = sorted(counter.items(), key=lambda x: x[1], reverse=True)

# 获得出现次数降序排列的字符列表

words_list = [''] + [x[0] for x in sorted_words]

# 这里选择保留高频词的数目,词只有不到七千个,所以我全部保留

words_list = words_list[:len(words_list)]

print '词汇表大小 : {}'.format(words_list)

with open(VOCAB_DATA, 'w') as f:

for word in words_list:

f.write(word + 'n')

# 生成单词到id的映射

word_id_dict = dict(zip(words_list, range(len(words_list))))

# 将poetry_list转换成向量形式

id_list=[]

for poetry in poetry_list:

id_list.append([str(word_to_id(word,word_id_dict)) for word in poetry])

# 将向量写入文件

with open(OUTPUT_DATA, 'w') as f:

for id_l in id_list:

f.write(' '.join(id_l) + 'n')

java rnn生成古诗_基于循环神经网络(RNN)的古诗生成器相关推荐

  1. python输出一首诗_基于循环神经网络(RNN)的古诗生成器

    基于循环神经网络(RNN)的古诗生成器,具体内容如下 之前在手机百度上看到有个"为你写诗"功能,能够随机生成古诗,当时感觉很酷炫= = 在学习了深度学习后,了解了一下原理,打算自己 ...

  2. TensorFlow练手项目二:基于循环神经网络(RNN)的古诗生成器

    基于循环神经网络(RNN)的古诗生成器 2019.01.02更新: 代码比较老了,当时的开发环境为Python 2.7 + TensorFlow 1.4,现在可能无法直接运行了.如果有兴趣,可以移步我 ...

  3. 自然语言处理入门实战——基于循环神经网络RNN、LSTM、GRU的文本分类(超级详细,学不会找我!!!)

    1  一.实验过程 1.1  实验目的 通过这个课程项目大,期望达到以下目的: 1.了解如何对 自然语言处理 的数据集进行预处理操作. 2.初识自然语言数据集处理操作的步骤流程. 3.进一步学习RNN ...

  4. 基于循环神经网络RNN预测彩票开奖结果附完整代码

    一.获取数据 想训练个模型的话,第一步肯定是获取数据啦. 我在网上找了一下,很快从[](https://www.js-lottery.com/Pla yZone/lottoData.html)找到了历 ...

  5. [人工智能-深度学习-48]:循环神经网络 - RNN是循环神经网络还是递归神经网络?

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  6. 深度学习 -- TensorFlow(9)循环神经网络RNN

    目录 一.循环神经网络RNN介绍 二.Elman network && Jordan network 三.RNN的多种架构 1.一对一 2.多对一 3.多对多 4. 一对多 5.Seq ...

  7. 双向循环神经网络_情感分析:基于循环神经网络

    情感分析:基于循环神经网络 Sentiment Analysis: Using Recurrent Neural Networks 与搜索同义词和类比词类似,文本分类也是单词嵌入的一个下游应用.在本文 ...

  8. Chemistry.AI | 基于循环神经网络(RNN)预测分子性质

    Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit版本:RDKit 2 ...

  9. 第六章_循环神经网络(RNN)

    文章目录 第六章 循环神经网络(RNN) CNN和RNN的对比 http://www.elecfans.com/d/775895.html 6.1 为什么需要RNN? 6.1 RNN种类? RNN t ...

  10. Tensorflow与keras学习 (3)——循环神经网络RNN

    循环神经网络RNN 3.1 RNN与LSTM介绍: 循环神经网络中的神经单元类似于模拟数字电路技术中的门电路,具有很多控制门来控制输入输出. RNN结构: LSTM结构: 相比与传统的神经网络,RNN ...

最新文章

  1. 我又发现了7个让人心动的宝藏软件,很少有人知道
  2. 求3*4数组的全部元素之和
  3. 【业界】Facebook的基础AI算法是如何驱动社交网络的发展?
  4. java泛型之有界类型
  5. 30岁前不必在乎的28件事
  6. 【直播预告】创享未来 2016微软开发者峰会
  7. 结构型模式 适配器模式
  8. leetcode 692. 前K个高频单词
  9. Linux 内核进程uid,Linux内核学习笔记: uid之ruid,euid,suid
  10. php mysql 创建数据表_PHP MySQL 创建数据表
  11. qt.qpa.plugin: Could not load the Qt platform plugin xcb in /root/PycharmProjects/pythonPr
  12. qlabel显示两行_PyQt5 系统化学习: QLabel
  13. DENSE_RANK函数
  14. 数据库:概念结构设计
  15. 莫名奇妙的异常010:Unexpected server response (0) while retrieving PDF
  16. Java设置小数点位数小妙招
  17. 小白篇:阿里云 对象存储 OSS
  18. 为什么换了固态硬盘电脑会快?详解硬盘与内存的关系
  19. urllib3.exceptions.MaxRetryError问题的解决
  20. SEO之搜索引擎劫持

热门文章

  1. UE5实现HTC Vive VR功能
  2. Android项目:基于安卓Android平台手机商城系统app(计算机毕业设计)
  3. 软件配置一套键鼠控制两台电脑
  4. 2017我都干了啥?
  5. -转载-我要我们在一起故事原著
  6. 如何写SCI论文的摘要
  7. Windows下NexusPHP搭建PT站过程
  8. 中国云服务商最新排名:阿里云第一腾讯云华为云分列二、三名
  9. MYSQL中内连接与左(右)连接的区别
  10. 计算机处理器性能排名,2020电脑cpu性能排行榜天梯图