Tensorflow-3-使用RNN生成中文小说

这篇文章不涉及RNN的基本原理,只是从选择数据集开始,到最后生成文本,展示一个RNN使用实例的过程。

对于深度学习的应用者,最应该关注的除了算法和模型,还应该关注如何预处理好自己的数据,合理降噪,以及如何在数据量不同的情况下选择合理的超参,来达到最理想的训练结果。

在经过近三个月的学习之后,我打算使用Tensorflow,创建一个LSTM RNN模型,使用中文小说作为数据源,训练RNN来生成中文小说文本。平时做练习训练数据都是英文,我想看看换成中文之后会是什么结果,能不能写出一些语义通顺的句子。

数据选取的是起点中文网的获奖历史小说『寒门首辅』,作者一袖乾坤。

整个notebook在我的github上,感兴趣的同学可以下载使用,不断尝试训练自己喜欢的风格的小说生成器。强烈建议大家使用notebook进行尝试,可以实时看到每一步的输出,学习效果更好。

以下就是整个应用过程。

来试试用起点中文网的历史小说『寒门首辅(一袖乾坤 著)』来做训练数据,看看这个RNN网络能产生一些什么样子的文本。 尝试过程中必遇到问题,也借此加深一些对RNN的理解。

首先我从网上下载到了『寒门首辅』的txt版本,打开时候发现有很多空行,还包含了很多不必要的链接,看起来是这样的。

这里写图片描述

预处理一下数据。

import helper

读入数据

dir = './data/寒门首辅.txt'
text = helper.load_text(dir)

设置一下要用多少个字来训练,方便调试。这里先用100000字进行训练

num_words_for_training = 100000

text = text[:num_words_for_training]

看看有多少行

lines_of_text = text.split('\n')

print(len(lines_of_text))

Out: 4329

先看看前15行是什么内容

print(lines_of_text[:15])

Out: ['《寒门首辅》', '作者:一袖乾坤', '', '内容简介:    弘治五年,四海靖平。徐溥春风得意当了一朝首辅,李东阳初出茅庐做了会试考官。刘健熬成了文渊阁大学士,谢迁尚未入阁成就贤相美名。杨廷和奉旨参修《宪宗实录》,刘大夏一把火烧了《郑和海图》。王阳明抱着书本埋头苦读准备着即将到来的乡试,弘治皇帝与张皇后悠然自得的逗弄着绕膝玩耍的萌娃正德......    群贤毕至,少长咸集。在这个大师云集,名臣辈出的美好时代,春风迷醉的余姚城里出身贫寒的穿越少年谢慎登高远望,心中已经埋下了梦想。    谁言寒门再难出贵子,我便要入一入内阁,做一做首辅,提两壶美酒,拥一方佳人。    世人有云:谢阁老一只秃笔安社稷,一张薄纸定乾坤。无人不知谢文正,无人不晓谢余姚......  ', '寒门首辅txt下载:http://www.80txt.com/txtxz/63028/down.html', '寒门首辅最新章节:http://www.80txt.com/txtxz/63028/down.html', '================================', '免责声明:寒门首辅txt全集下载由80TXT电子书(WwW.80txt.com)书友收集整理自网络,版权归原作者所有,仅作学习交流使用,不可用于任何商业途径,如非免费资源,请在试用之后24小时内立即删除,如果喜欢该资源请购买正版谢谢合作;如不慎该资源侵犯了您的权利,请麻烦通知我及时删除,谢谢!', '================================', 'A:【更多精彩好书,更多原创TXT手机电子书,我们因你而专业,TXT格式电子书下载 请登陆 80TXT电子书 --www.80txt.com】', 'B: 如果发现未完....登录(80TXT小说网)www.80txt.com 提供24小时循环更新!!', '', '', '', '章节目录 第一章 积善之家']

把『章节目录』之前的行全部砍掉,一大堆没用的东西。

lines_of_text = lines_of_text[14:]

再来看看,第一行应该就进入正题了。

print(lines_of_text[:5])

Out: ['章节目录 第一章 积善之家', '', '    弘治五年,春和景明。[求书网qiushu.cc更新快,网站页面清爽,广告少,无弹窗,最喜欢这种网站了,一定要好评]', '', '    浙江承宣布政使司,绍兴府,余姚县。']

我查看了一下,这个小说一共有129万字左右。
先把空行去掉吧。去掉空行之后应该就只有一半左右的行数了。

lines_of_text = [lines for lines in lines_of_text if len(lines) > 0]

print(len(lines_of_text))

Out: 2158

打印前20行看看什么情况

print(lines_of_text[:20])

Out: ['章节目录 第一章 积善之家', '    弘治五年,春和景明。[求书网qiushu.cc更新快,网站页面清爽,广告少,无弹窗,最喜欢这种网站了,一定要好评]', '    浙江承宣布政使司,绍兴府,余姚县。', '    县城里靠近城隍庙的一处小巷口,一个年约十二,身着淡蓝色粗布长衫,头戴黑色幞头的少年望着不远处熙熙攘攘的人群不发一言。', '    他叫谢慎,是土生土长的余姚人。但是也不尽然,因为他的灵魂来自后世,是穿越而来夺舍附着在这个与他同名同姓的少年身上。事情的经过他并不是很清楚,只知道这个少年应该是不慎落水,被人救上后就一直昏迷不醒,奄奄一息,直到自己穿越才鸠占鹊巢,成了这具身体的主人。', '    不过有些奇特的是,谢慎还兼有原先身体里的一部分记忆,他拼命检索这才对身处的环境有了一个大概的认识。', '    如今是弘治五年,当今天子朱祐樘立志中兴,招贤纳士,敕令各省提学官巡视省内各府、州、县学,选拔参加乡试的人选。今年是乡试之年,明年则是会试,殿试连着两场大试,是出进士的年份。朝为田舍郎,暮登天子堂,在明朝读书自然是最有前途的事情。不过这似乎和他没有什么关系,虽然原先的谢慎也算是个读书人,可却并没有功名在身,最多只能算一个半吊子童生。', '    谢慎前世可是苦修明史的研究生,虽然主攻方向是嘉靖万历两朝,但对弘治朝多少也有些了解。浙江一直是科举强省,在弘治朝也是绝对的霸主,而绍兴府则是浙江省中出进士最多的府。mianhuatang.cc [棉花糖小说网]若要落在县一级,那魁首非余姚莫属。山阴,会稽两县加在一起,所中的进士数目都不比余姚的多。这么说来,余姚绝对是科举的死亡之组了。王阳明,谢迁,王华,一想到余姚出的那些名人,谢慎便免不了自嘲。', '    谢慎虽然前世苦修明史,对八股文也有所研究,但要让他在明代科场竞争最恐怖的余姚县脱颖而出,确实有些艰难。', '    可当他垂下头看了看自己瘦弱的身体,不免摇了摇头,长叹了一声。', '    不科举还能干什么呢,就他这副竹竿子般的身体,肩不能抗,手不能提,杀鸡没准还被鸡调戏......', '    何况在这个万般皆下品惟有读书高的年代,不科举就只能为民,不管是务农还是经商终归都是被官府压着,没有出头的机会。大明朝那个著名的沈万三不就是最好的例子,家财万贯富可敌国还不是随意一个罪名就成了别人茶余饭后唏嘘慨叹的谈资?', '    读书,还是得读书,便前方是刀山火海硬着头皮也得上。他才十二岁,还有可塑性......', '    “小郎,你怎么在这儿呢,快快随我回家去。你落水后被救起身子本就虚弱,若是在此时再染上了风寒,那可了不得。你嫂嫂给你特地煮了鸡汤,你多喝上几碗也好补补身子。”', '    一个中年男子的声音打断了谢慎的沉思,他抬了抬头见来人是自己的胞兄谢方,心中不由得泛起一抹暖意。', '    谢家门丁不旺,到了他们这一代只有他和谢方二人,不过这个便宜大哥似乎对他还不错,吃穿用度上绝不短着缺着。', '    谢方在余姚县城里开着一家茶铺,将每年收上的茶叶运到县城售卖,质地更好的一些会有人收走在府城售卖。', '    明代浙江绍兴府各县几乎都种植茶叶。最著名的要数杭州府钱塘县的龙井茶以及宁波府象山县的珠山茶。至于余姚虽然也种植茶树,但其出产的茶叶并不像其种植棉花所产的“浙花”那么出名。', '    不过似乎余姚本地的百姓很喜欢这种清淡的姚江茶,其在本县的销路并不差。', '    靠着辛勤的工作,谢方也算撑起了一个家。在谢方的一再坚持下,谢慎从小便被送去开蒙,如今已经学了六年了。不过原先的谢慎最多只能算是中上之资,跟神童绝对沾不上边,照着原有轨迹发展下去,能不能取得秀才功名都是一个问题。']

下一步,把每行里面的『空格』,『[]里的内容』,『<>里的内容』都去掉。

# 去掉每行首尾空格
lines_of_text = [lines.strip() for lines in lines_of_text]

看下情况如何,打印前20句

评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值