起因

事情是这样的,前几天我在刷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相关推荐

  1. python编写木马攻击_用Python写一个自动木马程序

    电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...

  2. 用python编写一个点餐程序_Python写一个自动点餐程序

    原博文 2019-08-09 10:45 − # Python写一个自动点餐程序 ## 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘 ...

  3. 用MATLAB写一个自动生成福利彩票双色球号码的程序

    用MATLAB写一个自动生成福利彩票双色球号码的程序 规则 红色球:1-33号任选6个 蓝色球:1-16号任选1个 red = randi([1,33],1,6); disp('红色球'); fpri ...

  4. java软件屏幕大小转换,android 用java写一个自动适配各种屏幕大小的工具

    android 用java写一个自动适配各种屏幕大小的工具,假设我当前机器屏幕宽高为1920*1116,我页面某个组件的宽度为100px,那么在1280*800的机器上,按道理将应该是100/1920 ...

  5. python抢券代码_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...

    京东 199-150 的牛奶券,昨天晚上 400 多人兑换,今天 720 人,也不知道什么时候放的券,说好 10 点放,结果点了 5 分钟也没有影,生气了,准备写一个自动抢券机,需求就是填入从 Chr ...

  6. 用python写一个自动群发微信脚本

    使用 Python 写一个自动群发微信脚本需要使用微信第三方 API 来实现.推荐使用 itchat 库,它提供了简单易用的 API,可以方便地编写微信自动化脚本. 首先,你需要安装 itchat 库 ...

  7. python 抢券_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...

    京东 199-150 的牛奶券,昨天晚上 400 多人兑换,今天 720 人,也不知道什么时候放的券,说好 10 点放,结果点了 5 分钟也没有影,生气了,准备写一个自动抢券机,需求就是填入从 Chr ...

  8. 用python写一个识别仪表读数的AI组件

    要写一个识别仪表读数的AI组件,需要以下步骤: 收集数据集:首先需要收集大量的仪表读数图像,并为其标注读数数字. 建立模型:然后可以使用深度学习技术,例如卷积神经网络 (CNN) 或循环神经网络 (R ...

  9. 如何写一个自动抢微信红包的程序

    春节临近,为避免错失土豪们的红包,动手写了一个自动抢微信红包的小程序,试了一下效果还不错.本程序适用于安卓4.1版本以上手机,不需要ROOT权限.现将程序的设计要点记录如下,供有兴趣的同行参考. 一. ...

最新文章

  1. OpenCV求逆(伪逆)矩阵函数
  2. 2018年智能化发展趋势:语音交互全球开战、AI终端趋势显现
  3. Android中dip、dp、sp、pt和px的区别
  4. 020-Json结构数据序列化异步传递
  5. 用流收集数据Collectors的用法介绍分组groupingBy、分区partitioningBy(一)
  6. 计算机配置界面在那,在哪里设置关机画面?设置为原来的经典界面?
  7. MySQL——Caused by: java.sql.SQLException: Unknown system variable ‘transaction_isolation‘
  8. 下拉树取值与赋值单元格填报(取值赋值)
  9. 05、汇编语言和汇编软件
  10. [15元]人体行为检测和识别毕业论文讲述
  11. 图片太大如何压缩?学会这个方法轻松压缩
  12. 10分钟就能完成别人半天的工作量,Word长文档排版技巧分享
  13. ubuntu设置共享文件夹成功后却不显示找不到
  14. 2019年 支付宝集福攻略
  15. MPS模块化生产加工系统QY-JDYT34
  16. 固态硬盘使用的优化——适用于任何版本的固态
  17. Kafka学习笔记——使用Kafka记录APP的操作日志
  18. 二分查找法的递归和非递归实现(C++)
  19. Xshel和Xftp免费版下载
  20. Linux 设备驱动那些事

热门文章

  1. cellpadding的用法和定义
  2. 中国金融出版社出版的2013版《风险管理》
  3. Qt滚动区域原理(QAbstractScrollArea)
  4. Nginx四层代理和7层反向代理
  5. vscode一格式化就报错?各种风格问题各种报错烦不胜烦,教你如何用好vue的eslint风格配置...
  6. android 各个存储、储存路径及获取方法总结
  7. 嵌入式中绕不开的CAN总线
  8. 全国计算机竞赛保送清华,连夺奥赛金牌 高二男生保送清华、北大
  9. 2008圣诞新年祝语之师长、上司篇
  10. logback的xml文件,b站黑马程序员