/Paddle-AI-Writer

Paddle2.x version AI-Writer 用魔改 GPT 生成网文小说。AI 写小说。Tuned GPT for novel generation。

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Paddle2.x 版本AI-Writer

用魔改 GPT 生成网文。Tuned GPT for novel generation. 原作者github地址:https://github.com/BlinkDL/AI-Writer

更新记录

  • 2022/02/27 切换到dev分支(旧代码在main分支),dev分支同步原作者代码,并且更新到最新版本,此外还添加了Aistudio项目链接,可以直接快速体验!

Aistudio项目链接

【爽文生成器】用魔改 GPT 生成网文 https://aistudio.baidu.com/aistudio/projectdetail/3532246

目录结构

root:[./]
|--AI-writer-yq.png
|--AI-Writer.gif
|--AI-Writer.jpg
|--convert_pytorch2paddle.py # 转换pytorch权重代码
|--LICENSE
|--model
|      |--N.-.-wangwen-2022-02-15.zip # 下载的N卡权重压缩包
|      |--wangwen-2022-02-15.json
|      |--wangwen-2022-02-15.pdparams # 转换好的paddle权重文件
|      |--wangwen-2022-02-15.pth # 解压后的权重文件
|--paddle_src # 新版模型
|      |--convert_pytorch2paddle.py # 转换pytorch权重代码
|      |--model.py
|      |--utils.py
|      |--__init__.py
|--print_project_tree.py # 打印项目树状结构
|--README.md
|--run.bat # windows运行脚本
|--run.py # 命令行运行
|--server.jpg
|--server.py # 开启服务
|--src # 原作者新版代码
|      |--model.py
|      |--utils.py
|      |--__init__.py
|--web-client # 前端页面
|      |--index.html
|      |--index.js

依赖

命令行使用方法:

  1. 进入原作者的 https://github.com/BlinkDL/AI-Writer ,下载模型,在右边 Release(v2022-02-15 最新综合模型(N卡)),解压 pth 到 model 目录。
  2. python convert_pytorch2paddle.py 转换权重。
  3. 运行 python run.py
Paddle2.x版本AI人工智障写作 https://github.com/BlinkDL/AI-Writer
注:这是使用paddle框架改写后的AI人工智障写作!!!!!!!!!!!!!
请关注原作者的知乎 https://zhuanlan.zhihu.com/p/394766831

声明:模型的训练数据全部来自网文,缺乏生活常识。生成的文字仅供娱乐。请遵守法律法规。
您输入的开头有 5 个字。注意,模型只会看最后 512 个字。

Loading model...
W0227 20:18:34.731586 20876 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.2, Runtime API Version: 11.0
W0227 20:18:34.786597 20876 device_context.cc:465] device: 0, cuDNN Version: 8.0.
INFO:paddle_src.model:number of parameters: 1.403546e+08
done: model/wangwen-2022-02-15 & model/wangwen-2022-02-15
------------------------------------------------------------
  这是一颗全新的巨型星辰。
  可以说,在这颗星辰上面,整个星球上面,只有一颗巨型的星辰,而且还是拥有着一定的能量。
  它有一个很是特殊的能量,这种能量不是单纯的能量,而是由无数颗奇特的能量组成的一个小型的能量核,每一颗星球上面的能量,都是无比巨大的,其能量的强大,恐怕连正常的星球,都无法和这颗巨型星球比较。
  但是它也是有它的缺点,那就是它无法用特殊的方法将能量释放出来,所以才会有那么多的星辰飞出来,但是一旦释放出来,立刻就会被那些能量击中。
  没有什么特殊的能量,就代表着星球上面的那些能量无法释放出来。
  这就好像是一个迷一样,能量释放出来的时候,所释放出来的能量,都是由能量释放出来的。
  “我的天,这个星球竟然还有这样的能量,太厉害了,这是我以前从来没有听说过的。”
  一个女人说道,她的脸上,带着一些震惊的神色,虽然很多人都没有见过,但是她知道,这是能量释放出来的能量。
  虽然很多人也都知道,但是能量释放出来的时候,会出现很多的能量,那些能量释放出来的能量释放出来,绝对是无比的恐怖。
  如果没有一些强大的能量释放出来,那是绝对无法承受的。
  现在的能量释放出来之后,那些能量释放出来的能量释放出来的能量释放出来之后,就释放出来一些能量释
------------------------------------------------------------
  这是一颗灵石。
  这灵石的价值,远比一般的灵石更加的惊人。
  “这个价格,不错。”
  杨逍也没有推辞,看着这颗灵石,就把这颗灵石给了身后的楚天云。
  第360章  灵石来历
  “楚老,这灵石的价值,似乎很大,如果能够拍下来,那可是一笔大财富。”
  楚天云对于这灵石的来历,自然是知道的。
  可是他却是没有想到,楚天云会如此的大方,竟然是直接把灵石送给了自己。
  这样的手笔,当真是让人无法拒绝。
  楚天云闻言,也是笑了笑。
  “如此,那就这么说定了。”
  楚天云也是回到了自己的房间里,把这颗灵石给放在了一个玉盒之中,便是将灵石给装了进去。
  下一刻,楚天云便是闭上了眼睛。
  而楚天云则是在这颗灵石之中,悄悄的进行着修炼。
  时间流逝,转眼间,便是过去了一天的时间。
  这一天的时间里,楚天云修炼的也是有些不错。
  楚天云闭关,便是把自己的修为,都是给提升了。
  而且还是十分的顺利。
  因为他也知道,自己修炼的速度,肯定是会大大的增加的。
  因为他现在也是可以控制自己的修为,不断的提升。
  现在,他只是有着二十五天的时间。
  所以,他可以先把自己的修为,给提升一些。
  因为如今他的修为,已经达到了炼神境八重。
  这对于他来说,是一个机会。
  而对于这灵石,他也是需要好好的
------------------------------------------------------------
  这是一颗空间晶石,与普通的空间石一般无二。
  而在空间晶石上面,则是写着一个古字,这个空间晶石并不是很大,但却是十分的大,里面的空间全部都是黄金一般的东西,上面一排排的金字在闪烁着。
  “不是黄金吗?”
  沈龙疑惑的看着空间晶石,但是他却是知道,这是一个宝贝,而且不是那种一般的神通,而是相当的珍贵的。
  甚至在下界,有人发现黄金一般的东西,就是一个金字,因为上面有空间神通,所以得到了一些稀奇古怪的东西,这种东西,是无数人想要得到的。
  这也是为什么上古时期,各种修真者争斗不断的原因,但是有一个人,那就是沈龙认识的人。
  “我这是……”
  沈龙看着面前的黄金,他从来没有见过这么大的金字,他愣愣的看着这个金字,他看了一眼,才发现,这个金字,是一个金字,而且这个金字,一共九个字,沈龙看着这个字,微微的愣了一下。
  “这是……”
  他的眼睛看着这个金字,脑海之中,顿时就想起来,一个地图,一个空间晶石,一个功法秘籍,不过那个地方,似乎并不在这个空间晶石的世界里面。
  不过,这个金字,这个时候似乎很像是一个空间晶石,这个空间晶石,是一个地图,上面是一个地图,而那个地图,则是一个生灵,一个文字。
  难道这个金字,就是地图的意思?
  沈龙摇了摇头,心中还是
------------------------------------------------------------
  这是一颗极为神秘的珠子,这一颗珠子极为特殊,散发出恐怖的能量,这种特殊的能量会在一定范围内,无论任何一个地方,都会留下能量的痕迹。
  凌风等人的速度非常的快,只是短短的几秒钟的时间,这颗珠子就直接飞了起来,在空中飞了起来,在半空中旋转着,朝着楚江王等人的方向飞了过去。
  此时,楚江王等人都已经收起了剑,静静的看着这颗珠子。
  “这是……”
  一名修者脸上带着惊恐之色,在他的身后,还有一名黑衣人。
  不过,这名黑衣人并没有放过楚江王等人的意思,依旧冲着楚江王等人飞了过来。
  “咦?”
  那名黑衣人忽然惊讶的说道:“你竟然能发现我?”
  “那不过是你的一道灵魂印记罢了,没有任何的作用。”
  楚江王淡淡的说道。
  不过,他的心中却在暗暗的想道:“这是怎么回事?为什么我的灵魂印记在,你的身上却没有。”
  他觉得很奇怪,但却没有在意。
  而这名黑衣人并没有在意,而是继续飞了起来,再次朝着楚江王等人飞了过去。
  楚江王等人也都紧紧的跟在了他的身后,他们都在飞行,他们都在控制着飞行,而且飞的很慢。
  不过,他们也都在飞行,很快就来到了楚江王等人的面前。
  此时,他们都已经感觉到了楚江王等人的气息,很显然,楚江王等人的灵魂印记已经落在了他们的身上。
  他们都感觉到
------------------------------------------------------------
  这是一颗星球,但是实际上是一颗星球,只不过,比起天心界要小了许多,很多不适合修行,所以,这里是无数年前才出现的。
  这里不同于中心,而是在一个独立的世界,这个世界不存在,这里有的只是一个修行之地。
  这个世界的存在,自然也是有的。
  吴邪和徐琳都没有发现,她们所在的这颗星球的确不一样。
  只是在这个世界中,除了一些不知道是什么的东西之外,什么都没有,天心界中没有什么宝物,可是,在这里,却有无数的天地灵气,这让这个世界,极为的神秘,没有什么能够比得上这个世界的。
  但是,这个世界,这里却是完全没有的。
  吴邪看了一眼,一个黑色的小点,从天空中飞过,在一个小点上停留了片刻,又继续飞行了,不过,这个小点的速度比较快,吴邪想要看个究竟,却发现,这个小点的速度并不快,在空中飞行的时候,都是一些极小的气泡,根本就没有办法赶上。
  在这个世界中,一切都变得无比的寂静,空气中有一些灰尘,也不知道什么时候会停下,只有一些不知名的小气泡,让这里变得有些诡异。
  “这里到底是什么地方?”
  吴邪有些奇怪,为什么这个世界的灵气,会如此的充裕?
  似乎是感觉到吴邪的疑问,徐琳也没有隐瞒,她说道:“我也不知道,你能不能够告诉我,你是怎么来到这个世界的?”
  吴邪想了
------------------------------------------------------------

网页界面使用方法:

  1. 进入原作者的 https://github.com/BlinkDL/AI-Writer ,下载模型,在右边 Release(v2022-02-15 最新综合模型(N卡)),解压 pth 到 model 目录。
  2. python convert_pytorch2paddle.py 转换权重。
  3. 运行 python server.py 开启服务。
  4. 打开 web-client/index.html,进行愉快的玩耍。

Reference

https://github.com/BlinkDL/AI-Writer


原作者的README

AI 写小说,支持 N/A/I卡 GPU 加速。采用我的 RWKV 模型,比 GPT 更快,训练代码:https://github.com/BlinkDL/RWKV-LM另外请大家看,本页面的最后,我会解释模型的原理,不懂电脑也能懂。

  1. 先看下面的【安装方法】。下载模型,在右边 Release(或者看QQ群文件),解压到 model 目录。
  2. 运行 python run.py(或双击run.bat),建议在cmd运行,看出错提示。有问题请看【安装方法】和【常见问题】。

也支持纯 CPU 快速生成,每秒 1-10 个字,下载请加:技术和用户 QQ 群 143626394(加入时请简单自我介绍)。

最新加入网页界面,执行 python server.py(或双击server.bat)然后打开 web-client 中的 index.html(推荐用Chrome)。

Screenshot

注意:模型的训练数据全部来自网文,缺乏生活常识。生成的文字仅供娱乐。请遵守法律法规。

同时使用了特殊采样方法,改善小模型的生成质量(介绍见 https://zhuanlan.zhihu.com/p/394766831 )。

我的知乎是 https://www.zhihu.com/people/bopengbopeng

网友移植的 Paddle 版:https://github.com/JunnYu/Paddle-AI-Writer

安装方法(请装精确版本。例如python装3.8.x;Windows请升级win10 64位21H1):

Windows小白:先试QQ群文件的【纯CPU exe版】,但CPU需要AVX2(例如intel四代以上),不支持AVX2就用【WindowsCPU版】
Windows有N卡:装python3.8,CUDA 11.1,CUDNN,torch1.9.1+cu111(在QQ群文件都有)。用940mx也能跑。用1050ti就挺快。目前只需要2G显存,以后需要4G显存
Windows有A/I卡:装python3.8,pip install torch onnxruntime-directml。用A/I卡模型。在 run.py 和 server.py 设置为 dml 模式
WindowsCPU版:装python3.8,pip install torch,用N卡模型。在 run.py 和 server.py 设置为 cpu 模式
Linux有N卡:和【Windows有N卡】相同
Linux有A/I卡:可以用https://onnxruntime.ai/加速,自己研究。不懂就用CPU版
LinuxCPU版:和【WindowsCPU版】相同
Mac:目前只能CPU版。和【WindowsCPU版】相同。某些Mac需要用pip3装包,用python3运行。

常见问题:

1. 先打开 run.py 和 server.py 看里面的设置。例如,玄幻和言情模型,需要在里面手工切换。
2. no module named 'xxx' --> 执行 pip install xxx 缺什么就装什么。注意N卡GPU版需要装pytorch的cuda版。注意A/I卡GPU版需要装onnxruntime-directml。
3. module 'torch' has no attribute 'tile' --> 需要 pytorch 1.9 以后版本。
4. no such file or directory: 'model/xxx' --> 先确定模型解压到 model 目录。然后在命令行需要先进入项目所在的目录,再用python运行py。
5. 怎么设置每次续写多少字 --> 修改run.py和server.py的LENGTH_OF_EACH。可以设置9999999也没问题,但是,单次写很长,容易出现无限循环。
6. 怎么训练 --> https://github.com/BlinkDL/RWKV-LM 不懂就加QQ群143626394(加入时请简单自我介绍)。
7. 写作原理 --> 每次分析最后的512个字,得到下一个字的概率分布(xx%概率是x字,等等),根据概率写一个字。这样一个个字写下去。
8. ctx_len是什么意思 --> 模型的记忆长度,就是每次只看最后的多少个字。越大效果越好也越慢。目前最大512。

群友写的训练教程:

https://zhuanlan.zhihu.com/p/432263234

https://zhuanlan.zhihu.com/p/432715547

https://zhuanlan.zhihu.com/p/435972716

训练后怎么运行:

1. 默认 RWKV-LM 训练的模型很小,所以,需要修改 AI-writer 的 run.py,设置 ctx_len n_layer n_head 和 RWKV-LM 的 train.py 一致。还有 WORD_NAME(json词表) MODEL_NAME。
2. 在 run.py 的 UNKNOWN_CHAR,将 \ue083 改成词表中一个不可能在正常文字出现的\uxxxx乱码,或某个最罕见的字(字不需要\符号)。意思是,如果看见不在词表里面的字,就用 UNKNOWN_CHAR 代表。
3. 如果用 server.py,也同样修改。

新玄幻模型效果:

Screenshot

言情模型效果【黄字是用户输入的开头,后面是模型续写】:

Screenshot

  当霏微萧瑟与车水马龙相遇,烟雨朦胧,如雾如尘,古巷的一切热闹都被包裹在这片忽然而至的雨色夜空中。淅淅沥沥的雨声没能完全掩盖烟火 燃放的砰响,一切显得真切而又隐约。烟雨如墨,月光铺在地上,将沙发、沙发、小沙发都点染成一片银色,触目惊心。
  地面上铺着黑灰的地毯,门上挂着一幅中世纪的红旗,帘子里隐隐传来有节奏的电梯咔嗒声,一双乌黑的眼睛正无声地望着雨雾中的一切。
  “美丽的地毯啊!”霏轻轻地一声轻笑,用指头轻轻叩击着沙发的扶手,“小烟,一张漂亮的脸蛋啊!”
  霏慢条斯理地翻着手上的金色的绸缎,从一旁抽出一只金色的羽绒枕套,将金色的帷幔翻了起来,伸向了霏微雨:“真的好漂亮啊,这个东西,一定很漂亮。”
  “这是你要的。”霏也拿过自己的金色缎带,把小毯子挂回到霏轻舒的肩上,用一种隐秘的方式,告诉霏一个真相:“我很喜欢这个地毯。”
  “喜欢吗?”霏再度靠近霏的耳边,小声问道。霏睁大眼睛,只看见霏手中那对金色的缎带,她记得很清楚,这是雨幕天气下,霏会在烟雨里寻求
一种温柔的慰藉,金色的缎带。
  霏从霏的身边爬了下来,在霏的脸上亲了一下,然后就站了起来,迈着自信的步子,跟在霏的身后。
  零落的鸟儿叫声在雨中久久回响,当雨声停止,雨声渐渐变小,霏终于抬起头来,却发现身后站着一个陌生的男人,不由得呆了呆,但瞬间,霏
的泪水已经流了出来,她抬起头,这个男人一张脸,难道刚刚是眼泪?
  霏连忙把刚刚的那个东西拿过
------------------------------------------------------------
  当霏微萧瑟与车水马龙相遇,烟雨朦胧,如雾如尘,古巷的一切热闹都被包裹在这片忽然而至的雨色夜空中。淅淅沥沥的雨声没能完全掩盖烟火 燃放的砰响,一切显得真切而又隐约。
  等到那火光消散在暗夜里,当那个方才被淋了一头水的昏暗夜色,却已然完完全全消失不见。雨势,只是轻轻的在四周飘过。
  修长如柳的指尖,指尖的指节深深的陷入掌心,陆泽还是在心底感叹,自己竟然还有那么一丝丝的悸动。
  单手搭在衣袖的烟灰色长袖上,衣袖轻轻晃动,卷起一点暗淡的雨丝,却已然是安然无恙。
  吹了口气,烟灰已经在鼻尖处旋转,呼出一片极淡的清冷烟丝,伴随着烟雨湿漉的蒸汽,陆泽微微眯起的眼,让烟丝有些变幻的黑白色,此刻已
经与刚刚的情况一般无二。
  目光悄然落在烟丝身上,陆泽双手十指飞快的在腰间的破洞处轻轻一点,以一个最简单,不起眼的动作,朝烟丝的动作来回挪移。
  长指,极其缓慢的落在烟丝的位置。
  流水一般的流线,在烟丝之后,变为一种莫名的黏稠,连绵不绝,一眨眼的功夫,烟丝便已经彻底消失了一般。
  长长的睫毛微微抖动着,烟丝的长长的睫毛下,眼眸看不出什么神采,此刻的烟丝只有几丝,但是看上去却十分的柔和,充满了少女般的光泽,
眼眸之间的神采,与她的眼眸一模一样。
  微微一笑,烟丝轻声道:“你已经变成了一个成熟美丽的少女。”
  陆泽顿了顿,又是轻笑:“虽然这个身份不值得一提,但是不管怎么说,也比我在这里要好。”
  “你之前在黑市遇到的那

旧模型效果:

Screenshot

模型原理(简化版)

电脑的原理,是题海战术+笨鸟先飞。它把字变成很多数,然后,找这些数的数学(统计学)规律。

电脑的学习目标:输入一堆字,预测下一个字。

  • 只要学会这个,就可以一个个字写下去。
  • 训练的小说有几万本,每次随机挑一段 512 个字输进去,让电脑猜下一个字,看是否能猜对。
  • 不断重复这个过程,不断考试。
  • 你可以自己玩这个游戏(遮住后文,猜下一个字),会发现,需要理解前文才能玩对。

我的小模型,支持 8849 种字。每个字对应两组数,每组有 768 个数。

  • 例如:"我" = 【0.123 -1.534 ...】,【-0.827 2.343 ...】,不妨称为【输入组】和【输出组】。
  • 大模型,每个字会对应几千几万个数。

第一,编码。

  • 每个字根据它的【输入组】,变成 768 个数,每个数代表某种隐藏含义。
  • 举例,每个字的第A个数代表"好-坏"维度,第B个数代表"名词-非名词"维度,等等。

实际找到的编码,不一定有容易描述的维度含义。

  • 因为具体的编码,是电脑自动去发现,无需人工干预。
  • 最初是随机编码。电脑会不断用【求导数】的方法计算,修改编码,改进预测结果。
  • 大致可以认为:如果电脑发现,把某个字的第某个数增加 0.001,可以改进预测结果,它就去做这个事。
  • 因为预测结果是否正确,是客观标准。所以它只要不断这里+0.001,那里-0.001,就慢慢接近目标。

总之,输入 512 个字,会变成 512*768 = 393216 个数。

第二,模型会把这 393216 个数经过一番运算(和另外几千万个数做运算,这几千万个数也会不断调整),最终得到 768 个数。这个过程是最有趣的,稍后也可以解释。

第三,将 768 个数,与 8849 种字的【输出组】比较,计算和每个字的接近程度,就是输出这个字的概率。