当我尝试写一个自动写小说的AI,长路漫漫的踩坑之路 ToT

起因

事情是这样的,前几天我在刷B站的时候看到一个大佬用训练了一个自动写高考作文的AI
链接: https://www.bilibili.com/video/BV1pr4y1w7uM
那我就想既然别人能训练自动写作文的AI,那我就训练一个自动写小说的AI帮我自动赚稿费。

挑战

我也去github上clone了仓库,看了看效果还不错,
但是有那么几个问题

  • 费用

费用是我承担不起的,我看了一下他的模型,一共17亿个参数,其中GPT-2的参数就占了15亿,估算了一下如果有分布式集群的话可能2000左右可以训练,没有的话可能得花个几万块钱。更不要说动辄几千万的GPT-3了。这个是硬伤,没办法的,所以我训练的模型可能不会用他那么大的,效果可能会稍微差一点,但是应该也不会太差。

  • 小说的维度

其实我有这个ID的时候就已经知道写小说这个ID别人肯定也想过了,我随便逛了几个仓库就发现了有人用斗破苍穹来训练GPT-2,我可以给一张图大家看看效果
在这里插入图片描述
看起来效果很不错对不对,但是相信你们已经发现缺陷了,就是训练的模型只能用来续写文章,因为一篇中篇小说就几十万字了,如果要训练写一个玄幻类的小说的AI的话,那几千篇小说肯定是需要的,那这样需要的语料的量就十分可怕了,否则AI能写的也只有萧炎的故事而已,所以说训练的模型只能用来续写文章。而且GPT的粒度太小了,这是所有文本生成的深度学习所具有的通病,因为其实网络只是一个词一个词那样生成的,然而对于动则几十万词的小说来说,很难保证故事顺利的发生下去,会不会小说写了一半主人公就换了一个名字呢?这些都是未知的。
昨天中午吃饭的时候一直在想这个问题,我当时想的是能不能运用强化学习,把书里所有的主人公全部作为一个智能体。我想到了我之前特别喜欢的一个小说APP,快点阅读。里面的画风是这样的
在这里插入图片描述
我只要对每一本书里面的主角,根据环境,也就是别人的话和旁白来对AI接下来说的话和行动打分就好了,根据AI输入出的话和行动已经实际小说中的话和行动(根据语义相似度)用分数最高的AI去替换有点类似于阿尔法狗。一个AI对应一个人格,每一本书训练一个人格,然后把他们放一起,再加入随机事件。当然我的话可能比较幼稚,可能不太正确因为我对强化学习也只是一知半解。
但是晚上我又想了一想其实这种事情即使不用强化学习仅仅是GPT也可以做到。这样我只需要把对话和旁白分开,只剩两类,大大减少了小说预测的维度,我们要做的任务从文本生成变成了一个类似聊天机器人的东西(其实是差不多的),我们训练好了语言模型之后要做的仅仅是给出初始的事件(即旁白)罢了。

开始

2020.10.31

说干就干,首先就是要获取数据集,我一开始想到的是用我牛逼哄哄的爬虫去爬取快点的数据,但是我失败了,原因是快点是一个手机APP,而不是网站的,类似于笔趣阁的小说我一抓一大把,但是手机APP的爬虫有点难到我了。
晚上我想了一个方案,就是下载模拟器,然后用过的抓包的方式,根据模拟器进程来抓取http包,然后解析包来获取语料
我用的是这个抓包工具。
在这里插入图片描述
有关计算机网络的东西我还是稍微懂一点的。
下载了雷电模拟器之后安装了快点
然后在本地打开HTTP代理,端口8888
在这里插入图片描述
再看一下本地IP
在这里插入图片描述
然后在我们的模拟器上设置ip代理
在这里插入图片描述
然后模拟器打开浏览器去下载SSL凭证然后安装。
在这里插入图片描述
电脑也是安装SSL凭证
在这里插入图片描述
好了一看这个/dialogs?start=30&end=50就知道是http的请求对话的 get 请求了,但是这一串乱码是什么鬼
在这里插入图片描述
因为Json的英文数据和图片数据抓包都没有问题,我一开始以为是中文乱码,于是我在rewrite里面加了type
在这里插入图片描述
但是发现并不是中文乱码问题,因为我抓了一些别的中文网站没有什么问题,我发现
http的头 Content-Type 字段
是 application/octet-stream
我查了一下资料,貌似是8进制流,这涉及到我的盲区了,我尝试做解码,直接转肯定是不对的,我尝试先转16进制再转成字符串,但是还是不对,我猜是内部封的数据结构转的流
在这里插入图片描述
如果有大佬知道怎么解析的,球球指点一下
然后就是换思路,可以用代码直接模拟鼠标的滚轮然后用EAST或者CPTN来检测文字位置,CLC或者RNN做识别,然后翻到最下面再点击下一章。
今天太晚了明天在搞

检测

2020.11.1

尝试了一下基于分割的EAST,
效果可能不太理想,有些话会分成两段,同时有些字不回被框进去,广告那部分会很奇怪。
在这里插入图片描述
再尝试基于检测的CTPN试试,因为CTPN卷积后面用到了BLSTM,也就是取了文字水平的特征,所以盲猜测CTPN对水平的字体检测效果更好一些

晚上尝试了一下CTPN,然后两种方法做了对比
为了让检测效果更好一些,我放大了文字
分别试了二值化还有夜间模式的检测效果

  • 正常模式的CTPN
    在这里插入图片描述

  • 夜间模式的CTPN
    在这里插入图片描述

  • 二值化的CTPN
    在这里插入图片描述

  • 正常模式的EAST
    在这里插入图片描述

  • 夜间模式的EAST
    在这里插入图片描述

  • 二值化的EAST
    在这里插入图片描述
    其中正常模式下的CTPN的效果最好
    然后就是在github上建立了仓库
    https://github.com/william970/WritingGod

识别

11.7

添加了中文识别网络
在这里插入图片描述

结构是DenseNet + CTC

然后下午通过正则表达式去除了识别出的乱码和符号

晚上写了python自动下拉自动翻页的功能,用了pyautogui这个库来控制鼠标和键盘,然后就是对于屏幕边缘的字体如下图,只有一半的文字,网络的识别效果不是很好,会识别成一些乱码,我采取最大乱码比来去除识别到的乱码区,就是如果乱码的字数占总字数的一半以上,则把整句话删掉
在这里插入图片描述
同时我用边缘检测来控制每次要检测的文字区域
在这里插入图片描述
找出所有的圆形然后来对应每个人分别对应那句话,同时控制每次下拉的距离
在这里插入图片描述
找到对应的y轴坐标

11.13

目前在尝试AI的对话生成系统,参考了别人的代码,别人的AI都是简单的只提取前几句话来预测下一句话,和我要实现的东西很不一样。我感觉我的AI需要对于一些重要话做保存要是会永远对下一句话产生影响的,及记忆力机制,而且是多角色的记忆力机制。

11.14

今天去参加同学婚礼了,没怎么肝进度,测试了一下我的自动化数据喂投系统,大致把一本小说全部写到json数据里面了
在这里插入图片描述
明天再改改代码
在这里插入图片描述
以上图的思路做语义嵌入

11.15

喝完同学喜酒回到家 从晚上10点改到现在凌晨4点,终于把GPT的代码改完了
在这里插入图片描述
现在开始炼丹咯!

11.21

狗屁不通生成器
在这里插入图片描述
继续优化中

11.22

想了想对于长篇的小说来说AI的处理能力还是太弱了,这涉及到很多东西,对于几十万字的小说,首先就是序列问题,如何能处理这么长的一个序列呢,最简单的就是加长BLSTM的长度,也就是增大网络模型,这就需要大量的GPU并行集群,今天看了一些资料https://weibo.com/ttarticle/p/show?id=2309404565055071977542,发现国内也有人在做这一方面的试验。我相信AI最终肯定是能够完成这种复杂的事情的,只是现在我们的认知不够,一些创新性的方法没有被提出,现在的论文有创新的真是太少,这是一个过程,长路漫漫。我决定退而求其次,暂时先从中篇科技短文下手,再逐步完善我的AI。我相信终有一天AI可以革作家的命,希望我能活到那一天,哈哈。
尝试用科幻文做训练语料,搜科幻世界txt百度网盘全给和谐了。找了好长时间的语料但是只找到几Mb阿西莫夫科幻小说集的语料,下图是训练完的效果,还是不尽人意,继续想思路中。。。
在这里插入图片描述
尝试先从语料量和模型参数下手,语料可以用爬虫,模型参数打算尝试使用阿里的PAI平台。打算试试那个15亿参数的GPT-2,但是那个模型太大了,我8G显存搞不起,3090又好几万买不起,尝试阿里的PAI平台看看行不行。

12.6

有其他重要的事情要忙,该项目先停止

未完待续。。。

有对这个项目感兴趣的技术大佬请联系我
VX:13738116117

  • 51
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
欢迎体验AI1.0 1 ------------ 运行本软件需要JRE(java运行时)1.5.0_08以上版本。 运行方法:在program目录下,右键点击AI10.jar,选打开方式为“java platform standard edition binary”即可。 2 ------------ 界面介绍: 界面左侧是一个树(load数据后显示树结构),右侧上方是您在树上点选的节点的信息的显示与编辑区,右侧中间是命令的输入区,右侧下方是输出区。 您会发现界面上有很多按钮,其实他们都是我调试程序用的,您只需了解几个按钮即可。 File菜单的“Set default dir”是设置选择载入、导出文件的默认目录, “save as”是将树保存为文件,“load”则是将文件中保存的树装入到程序中来(会覆盖原有树的呦~~,记得先save)。 Script菜单的“save script as”是将命令区的内容存入文件,“load script”是将文件读入命令区(覆盖原有的命令)。 右侧中部的“Execute”按钮可以执行命令区的命令,可以用鼠标选择一部分命令为高亮,而只执行选择的命令。 ***注意***需要人工将右下的输出区的滚动条滚到最下!(作者在此道歉了,但作者毕竟是技艺不精啊……) 右侧中部的“CLO”是清除输出区的按钮,“—”则是在输出区加横线的按钮。 3 ------------ 功能介绍: ***注意***使用前需LOAD目录import_me下的template.dat。(或LOAD您以前保存的树,但要确认模板的存在。) 之后就可以运行各种命令了。 但是命令是有限的。 ***注意***从那张源代码截图可看出本软件支持的命令…… 还有就是import_me目录下的developing.txt是我开发时积累的命令脚本,大家可以导入玩一玩。 4 ------------ 欢迎批评与建议。 作者:cmpltrtok 电邮:[email protected] 5 ------------ 命令列表: 作者还是不放心,把命令列表一下: 删除分类……。 删除……属于……。 ……是一种……不是一种……。 ……是一种……。 ……是一个……不是一个……。 ……是一个……。 ……是一种……(吗)? ……是一个……(吗)? ……是什么? ……是……吗?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值