0%

2021-08-04 使用 tensorflow-gpu 训练 AI 写小说

使用 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

# 如果是 Windows 系统用不了 shell 脚本,那么就直接执行 python 命令就行了,例如
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

安装完 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
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!