使用 tensorflow-gpu 训练 AI 写小说
代码仓库:https://github.com/GaoPeng97/transformer-xl-chinese
Tensorflow:https://tensorflow.google.cn/
彩云小梦:http://if.caiyunai.com/dream/#/
前言
笔者自从使用过彩云小梦这样的小说续写软件后就一直念念不忘,毕竟谁不想写个开头就能自动补完后续呢?所以,在经过一番搜寻后,我发现 transformer-xl-chinese 这个仓库在一定程度上满足我的需求。
经过本人的测试,在迭代轮次 10 次左右,纯属人工智障,只会续写逗号、空格等无意义的符号。当迭代轮次达到 200~1000 的时候,也是人工智障,只会重复一句话。不过,当迭代轮次超过 30000 次的时候,就已经能勉强写出有意义的话语了。
下面举个我自己迭代 37100 次的模型续写的效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 萧炎对这威胁之话还是感到陌生,若非他灵魂力量同样不弱的话,恐怕早就忍不住的出手了。“这小家伙,果然是个好东西啊。”
心中轻叹了一口气,萧炎目光转向一旁正与小医仙交谈的小医仙,此刻后者的脸庞上也是涌上一抹凝重之意。
小医仙目光在小医仙身上扫了扫,旋即黛眉微微皱起,她的实力,在这黑角域之中,也是拥有着极强的名气。
“这些家伙。 “都是黑角域的人?”萧厉目光扫过那些黑角域的强者,心头却是忍不住的跳了跳。
在萧炎身旁,小区仙与紫研也是微笑着走进,在那些人的包围下,她们也是知道一些不对劲,但这些家伙却是没有什么反抗力,因为她们也清楚,在这里,他们也是拥有着极强的实力,而这些家伙,也是货真价实的斗尊强者。”
“那家伙的实力,倒是越来越强,这种实力,恐怕也就斗尊阶别,而且还是斗宗巅峰,若是再加上一些斗宗阶别,那么这一点的话,便是会被那些斗尊阶别的强者所占据,毕竟,斗宗,也是一个极大的差距。”
萧炎微微点了点头,目光望着那些弥漫的黑雾,片刻后,缓缓的道。“那些家伙,可是一名货真价实的六品炼药宗师,这等阵容,即便是放在中州,也是不敢有着半点的名声。“”
“那些家伙,也不是什么好事,不知道他们是否有着这般资格,当年在黑角域,也算是一种名气不弱的势力。
”萧厉笑道,他自
|
虽然仔细看的话依旧存在逻辑问题,但是不是乍一看已经很有逻辑的样子?如果再继续迭代,达到十万、百万的迭代轮次,完全有理由相信能写出通顺的小说。
下面来讲讲怎么使用 transformer-xl-chinese 这个仓库
安装
tensorflow 1.15.5 需要 Python3.6 才能运行,太新的版本不支持
有点坑爹的是,仓库里面没有 requirements.txt
文件,只能自行生成一个,参考如下
1 2 3 4 5 6
| matplotlib==3.3.3 tensorflow==1.15.5 absl_py==0.9.0 six==1.12.0 numpy==1.17.2 progressbar33==2.4
|
然后再执行
1
| pip install -r requirements.txt
|
安装依赖。
等待依赖安装完之后,切换到 tf 目录,执行
1 2 3 4 5 6 7 8 9 10 11 12 13
| bash scripts/doupo_base_gpu.sh train_data
bash scripts/doupo_base_gpu.sh train
bash scripts/doupo_base_gpu.sh inference
python data_utils_chinese.py --data_dir=..\data\doupo --dataset=doupo --tgt_len=100 --per_host_train_bsz=64 --per_host_valid_bsz=64 --num_passes=1 --use_tpu=False
python train_gpu.py --data_dir=..\data\doupo\tfrecords --record_info_dir=..\data\doupo\tfrecords\ --corpus_info_path=..\data\doupo\corpus-info.json --model_dir=EXP-doupo4-1_head-1e4 --div_val=1 --untie_r=True --proj_share_all_but_first=True --n_layer=16 --d_model=410 --d_embed=410 --n_head=10 --d_head=41 --d_inner=2100 --dropout=0.1 --dropatt=0.0 --learning_rate=0.00010 --warmup_steps=0 --train_steps=1000000 --tgt_len=100 --mem_len=100 --train_batch_size=32 --num_core_per_host=8 --iterations=200 --save_steps=4000
python train_gpu.py --data_dir=../data/doupo/tfrecords --record_info_dir=../data/doupo/tfrecords/ --corpus_info_path=../data/doupo/corpus-info.json --model_dir=EXP-doupo4-1_head-1e4 --div_val=1 --untie_r=True --proj_share_all_but_first=True --n_layer=16 --d_model=410 --d_embed=410 --n_head=10 --d_head=41 --d_inner=2100 --dropout=0.0 --dropatt=0.0 --tgt_len=10 --mem_len=50 --clamp_len=40 --same_length=True --eval_batch_size=1 --num_core_per_host=8 --do_train=False --do_inference=True --eval_split=test
|
只要能够顺利执行,那就表示依赖安装成功了。
接下来是启用 GPU 加速。
启用 GPU 加速
GPU 支持 https://tensorflow.google.cn/install/gpu
对于 1.15 及更早版本,CPU 和 GPU 软件包是分开的,所以需要另外下载 GPU 版本
1
| pip install tensorflow-gpu==1.15
|
安装完 GPU 版本之后,再安装
1 2 3 4
| NVIDIA® GPU 驱动程序 CUDA® 工具包 CUDA® 工具包附带的 CUPTI。 cuDNN SDK
|
即可,关于版本号,是这样的,以 tensorflow 1.15 版本为例,对应的是 CUDA 10.0 版本,缺失的是 xxx_100.dll
;类似的,CuDNN 版本是 7.6.4。下载的时候注意下就行了。
最后,当再次执行上述命令的时候,应该会显示 dynamic load xxx.dll
,没有报错就是安装成功了。
顺带一提,使用 GPU 版本比 CPU 版本快多了,至少存在百倍的差距。笔者一开始使用 CPU 版本,一天时间只迭代了 200 轮,效率极低;在换成 GPU 版本之后,一天迭代 30000 轮不在话下。当然了,笔者的电脑配置十分差,如果采用更高性能的配置一定能跑的更多,届时,训练效果也会更好。笔者乐观预计,迭代轮次超过 10 万应该就能看到比较好的效果了。
后记
在本人又训练过几次 30000 轮迭代后,我发现训练出来的 AI 还是有点问题。
这个 AI 训练的原理就是根据前一段文字来预测后一段文字,那么在小说这种文本中,由于经常是一个主角+多个配角的情况,那么主角相对于这些配角都有关联,此时进行预测的时候,就会发现,配角的名字一直在改变,也就是说这个算法无法分析出当前文本中的主要角色。
例如在我开头的例子中,除了“萧炎”这个绝对主角外,对话对象理应是“小医仙”,但预测出的文本中莫名出现了“紫研”、“萧厉”等角色。如果续写的文本更长,这个问题会更严重,在此不再举例。
故,想要训练出一个堪比“彩云小梦”的续写 AI,那是不太可能的,在此也只能希望小梦能早日恢复使用。
本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/9c24bf6d.html
版权声明:转载请注明出处!