java rnn生成古诗_基于循环神经网络(RNN)的古诗生成器
基于循环神经网络(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)的古诗生成器相关推荐
- python输出一首诗_基于循环神经网络(RNN)的古诗生成器
基于循环神经网络(RNN)的古诗生成器,具体内容如下 之前在手机百度上看到有个"为你写诗"功能,能够随机生成古诗,当时感觉很酷炫= = 在学习了深度学习后,了解了一下原理,打算自己 ...
- TensorFlow练手项目二:基于循环神经网络(RNN)的古诗生成器
基于循环神经网络(RNN)的古诗生成器 2019.01.02更新: 代码比较老了,当时的开发环境为Python 2.7 + TensorFlow 1.4,现在可能无法直接运行了.如果有兴趣,可以移步我 ...
- 自然语言处理入门实战——基于循环神经网络RNN、LSTM、GRU的文本分类(超级详细,学不会找我!!!)
1 一.实验过程 1.1 实验目的 通过这个课程项目大,期望达到以下目的: 1.了解如何对 自然语言处理 的数据集进行预处理操作. 2.初识自然语言数据集处理操作的步骤流程. 3.进一步学习RNN ...
- 基于循环神经网络RNN预测彩票开奖结果附完整代码
一.获取数据 想训练个模型的话,第一步肯定是获取数据啦. 我在网上找了一下,很快从[](https://www.js-lottery.com/Pla yZone/lottoData.html)找到了历 ...
- [人工智能-深度学习-48]:循环神经网络 - RNN是循环神经网络还是递归神经网络?
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- 深度学习 -- TensorFlow(9)循环神经网络RNN
目录 一.循环神经网络RNN介绍 二.Elman network && Jordan network 三.RNN的多种架构 1.一对一 2.多对一 3.多对多 4. 一对多 5.Seq ...
- 双向循环神经网络_情感分析:基于循环神经网络
情感分析:基于循环神经网络 Sentiment Analysis: Using Recurrent Neural Networks 与搜索同义词和类比词类似,文本分类也是单词嵌入的一个下游应用.在本文 ...
- Chemistry.AI | 基于循环神经网络(RNN)预测分子性质
Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit版本:RDKit 2 ...
- 第六章_循环神经网络(RNN)
文章目录 第六章 循环神经网络(RNN) CNN和RNN的对比 http://www.elecfans.com/d/775895.html 6.1 为什么需要RNN? 6.1 RNN种类? RNN t ...
- Tensorflow与keras学习 (3)——循环神经网络RNN
循环神经网络RNN 3.1 RNN与LSTM介绍: 循环神经网络中的神经单元类似于模拟数字电路技术中的门电路,具有很多控制门来控制输入输出. RNN结构: LSTM结构: 相比与传统的神经网络,RNN ...
最新文章
- 我又发现了7个让人心动的宝藏软件,很少有人知道
- 求3*4数组的全部元素之和
- 【业界】Facebook的基础AI算法是如何驱动社交网络的发展?
- java泛型之有界类型
- 30岁前不必在乎的28件事
- 【直播预告】创享未来 2016微软开发者峰会
- 结构型模式 适配器模式
- leetcode 692. 前K个高频单词
- Linux 内核进程uid,Linux内核学习笔记: uid之ruid,euid,suid
- php mysql 创建数据表_PHP MySQL 创建数据表
- qt.qpa.plugin: Could not load the Qt platform plugin xcb in /root/PycharmProjects/pythonPr
- qlabel显示两行_PyQt5 系统化学习: QLabel
- DENSE_RANK函数
- 数据库:概念结构设计
- 莫名奇妙的异常010:Unexpected server response (0) while retrieving PDF
- Java设置小数点位数小妙招
- 小白篇:阿里云 对象存储 OSS
- 为什么换了固态硬盘电脑会快?详解硬盘与内存的关系
- urllib3.exceptions.MaxRetryError问题的解决
- SEO之搜索引擎劫持