当我尝试写一个自动写小说的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
当我尝试写一个自动写小说的AI,长路漫漫的踩坑之路 ToT相关推荐
- python编写木马攻击_用Python写一个自动木马程序
电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...
- 用python编写一个点餐程序_Python写一个自动点餐程序
原博文 2019-08-09 10:45 − # Python写一个自动点餐程序 ## 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘 ...
- 用MATLAB写一个自动生成福利彩票双色球号码的程序
用MATLAB写一个自动生成福利彩票双色球号码的程序 规则 红色球:1-33号任选6个 蓝色球:1-16号任选1个 red = randi([1,33],1,6); disp('红色球'); fpri ...
- java软件屏幕大小转换,android 用java写一个自动适配各种屏幕大小的工具
android 用java写一个自动适配各种屏幕大小的工具,假设我当前机器屏幕宽高为1920*1116,我页面某个组件的宽度为100px,那么在1280*800的机器上,按道理将应该是100/1920 ...
- python抢券代码_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...
京东 199-150 的牛奶券,昨天晚上 400 多人兑换,今天 720 人,也不知道什么时候放的券,说好 10 点放,结果点了 5 分钟也没有影,生气了,准备写一个自动抢券机,需求就是填入从 Chr ...
- 用python写一个自动群发微信脚本
使用 Python 写一个自动群发微信脚本需要使用微信第三方 API 来实现.推荐使用 itchat 库,它提供了简单易用的 API,可以方便地编写微信自动化脚本. 首先,你需要安装 itchat 库 ...
- python 抢券_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...
京东 199-150 的牛奶券,昨天晚上 400 多人兑换,今天 720 人,也不知道什么时候放的券,说好 10 点放,结果点了 5 分钟也没有影,生气了,准备写一个自动抢券机,需求就是填入从 Chr ...
- 用python写一个识别仪表读数的AI组件
要写一个识别仪表读数的AI组件,需要以下步骤: 收集数据集:首先需要收集大量的仪表读数图像,并为其标注读数数字. 建立模型:然后可以使用深度学习技术,例如卷积神经网络 (CNN) 或循环神经网络 (R ...
- 如何写一个自动抢微信红包的程序
春节临近,为避免错失土豪们的红包,动手写了一个自动抢微信红包的小程序,试了一下效果还不错.本程序适用于安卓4.1版本以上手机,不需要ROOT权限.现将程序的设计要点记录如下,供有兴趣的同行参考. 一. ...
最新文章
- OpenCV求逆(伪逆)矩阵函数
- 2018年智能化发展趋势:语音交互全球开战、AI终端趋势显现
- Android中dip、dp、sp、pt和px的区别
- 020-Json结构数据序列化异步传递
- 用流收集数据Collectors的用法介绍分组groupingBy、分区partitioningBy(一)
- 计算机配置界面在那,在哪里设置关机画面?设置为原来的经典界面?
- MySQL——Caused by: java.sql.SQLException: Unknown system variable ‘transaction_isolation‘
- 下拉树取值与赋值单元格填报(取值赋值)
- 05、汇编语言和汇编软件
- [15元]人体行为检测和识别毕业论文讲述
- 图片太大如何压缩?学会这个方法轻松压缩
- 10分钟就能完成别人半天的工作量,Word长文档排版技巧分享
- ubuntu设置共享文件夹成功后却不显示找不到
- 2019年 支付宝集福攻略
- MPS模块化生产加工系统QY-JDYT34
- 固态硬盘使用的优化——适用于任何版本的固态
- Kafka学习笔记——使用Kafka记录APP的操作日志
- 二分查找法的递归和非递归实现(C++)
- Xshel和Xftp免费版下载
- Linux 设备驱动那些事