diff --git a/AI-writer-yq.png b/AI-writer-yq.png new file mode 100644 index 0000000..f86b2ae Binary files /dev/null and b/AI-writer-yq.png differ diff --git a/README.md b/README.md index 23d9422..e7e76c1 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # AI-Writer -用魔改 GPT 生成网文。Tuned GPT for novel generation. 现已支持 N卡 A卡 I卡 GPU 加速。 +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 快速生成,每秒生成 10 个字,下载请加:技术和用户 QQ 群 143626394(加入时请简单自我介绍)。*** +也支持纯 CPU 快速生成,每秒 1-10 个字,下载请加:技术和用户 QQ 群 143626394(加入时请简单自我介绍)。 最新加入网页界面,执行 python server.py(或双击server.bat)然后打开 web-client 中的 index.html(推荐用Chrome)。 @@ -12,8 +13,6 @@ 注意:模型的训练数据全部来自网文,缺乏生活常识。***生成的文字仅供娱乐。请遵守法律法规。*** -***采用我的 RWKV 模型,比 GPT 更快,训练代码:https://github.com/BlinkDL/RWKV-LM*** - 同时使用了特殊采样方法,改善小模型的生成质量(介绍见 https://zhuanlan.zhihu.com/p/394766831 )。 我的知乎是 https://www.zhihu.com/people/bopengbopeng 。 @@ -42,41 +41,80 @@ Mac:目前只能CPU版。和【WindowsCPU版】相同。某些Mac需要用pip3 7. 写作原理 --> 每次分析最后的512个字,得到下一个字的概率分布(xx%概率是x字,等等),根据概率写一个字。这样一个个字写下去。 8. ctx_len是什么意思 --> 模型的记忆长度,就是每次只看最后的多少个字。越大效果越好也越慢。目前最大512。 ``` +训练后怎么运行: +``` +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](AI-Writer.jpg) +言情模型效果【黄字是用户输入的开头,后面是模型续写】: + +![Screenshot](AI-writer-yq.png) + +``` + 当霏微萧瑟与车水马龙相遇,烟雨朦胧,如雾如尘,古巷的一切热闹都被包裹在这片忽然而至的雨色夜空中。淅淅沥沥的雨声没能完全掩盖烟火 燃放的砰响,一切显得真切而又隐约。烟雨如墨,月光铺在地上,将沙发、沙发、小沙发都点染成一片银色,触目惊心。 + 地面上铺着黑灰的地毯,门上挂着一幅中世纪的红旗,帘子里隐隐传来有节奏的电梯咔嗒声,一双乌黑的眼睛正无声地望着雨雾中的一切。 + “美丽的地毯啊!”霏轻轻地一声轻笑,用指头轻轻叩击着沙发的扶手,“小烟,一张漂亮的脸蛋啊!” + 霏慢条斯理地翻着手上的金色的绸缎,从一旁抽出一只金色的羽绒枕套,将金色的帷幔翻了起来,伸向了霏微雨:“真的好漂亮啊,这个东西,一定很漂亮。” + “这是你要的。”霏也拿过自己的金色缎带,把小毯子挂回到霏轻舒的肩上,用一种隐秘的方式,告诉霏一个真相:“我很喜欢这个地毯。” + “喜欢吗?”霏再度靠近霏的耳边,小声问道。霏睁大眼睛,只看见霏手中那对金色的缎带,她记得很清楚,这是雨幕天气下,霏会在烟雨里寻求 +一种温柔的慰藉,金色的缎带。 + 霏从霏的身边爬了下来,在霏的脸上亲了一下,然后就站了起来,迈着自信的步子,跟在霏的身后。 + 零落的鸟儿叫声在雨中久久回响,当雨声停止,雨声渐渐变小,霏终于抬起头来,却发现身后站着一个陌生的男人,不由得呆了呆,但瞬间,霏 +的泪水已经流了出来,她抬起头,这个男人一张脸,难道刚刚是眼泪? + 霏连忙把刚刚的那个东西拿过 +------------------------------------------------------------ + 当霏微萧瑟与车水马龙相遇,烟雨朦胧,如雾如尘,古巷的一切热闹都被包裹在这片忽然而至的雨色夜空中。淅淅沥沥的雨声没能完全掩盖烟火 燃放的砰响,一切显得真切而又隐约。 + 等到那火光消散在暗夜里,当那个方才被淋了一头水的昏暗夜色,却已然完完全全消失不见。雨势,只是轻轻的在四周飘过。 + 修长如柳的指尖,指尖的指节深深的陷入掌心,陆泽还是在心底感叹,自己竟然还有那么一丝丝的悸动。 + 单手搭在衣袖的烟灰色长袖上,衣袖轻轻晃动,卷起一点暗淡的雨丝,却已然是安然无恙。 + 吹了口气,烟灰已经在鼻尖处旋转,呼出一片极淡的清冷烟丝,伴随着烟雨湿漉的蒸汽,陆泽微微眯起的眼,让烟丝有些变幻的黑白色,此刻已 +经与刚刚的情况一般无二。 + 目光悄然落在烟丝身上,陆泽双手十指飞快的在腰间的破洞处轻轻一点,以一个最简单,不起眼的动作,朝烟丝的动作来回挪移。 + 长指,极其缓慢的落在烟丝的位置。 + 流水一般的流线,在烟丝之后,变为一种莫名的黏稠,连绵不绝,一眨眼的功夫,烟丝便已经彻底消失了一般。 + 长长的睫毛微微抖动着,烟丝的长长的睫毛下,眼眸看不出什么神采,此刻的烟丝只有几丝,但是看上去却十分的柔和,充满了少女般的光泽, +眼眸之间的神采,与她的眼眸一模一样。 + 微微一笑,烟丝轻声道:“你已经变成了一个成熟美丽的少女。” + 陆泽顿了顿,又是轻笑:“虽然这个身份不值得一提,但是不管怎么说,也比我在这里要好。” + “你之前在黑市遇到的那 +``` + 旧模型效果: ![Screenshot](AI-Writer.gif) -> 魔皇突然倒退了一步,伸手摸了一下身上的伤口,然后朝着四周的虚空一指,原本在地下的虚空魔法阵直接消失无踪,这里顿时恢复了活性。 - “来了……”魔皇喃喃的自语着,然后死死的盯着魔王的背影,不敢有丝毫的怠慢,在一个黑袍大汉的带领下,朝着人类的方向搜寻了过去。 - 几分钟之后,在前面的虚空魔法阵眼前一空,所有的人都露了出来,大家一个个的瞪大了眼睛。 - “原来是魔皇大人。”听到魔皇的声音后,所有的人都感到惊讶,因为在他们眼中,这就是魔皇大人的魔导师,终于踏上了辉煌的魔法师之路,按理来说,能够拥有神力的魔导师是当之无愧的人类。 - 但是此刻魔皇的身影却消失在这片大海之中,似乎早就看穿了这一切,这让众人的心都悬了起来。 - 片刻之后,众人感觉到了空气中的清爽,所有人都猛的抬起头来,那巨大的眼睛里充满了向往,这样的表现让他们觉得此行不枉。 - 他们不由的弯下了嘴唇,暗自在心里偷笑,“还真是可怜这个少女,哪怕是族中最优秀的天才魔导 - -> 魔皇原本还想留下来帮助魔族重新实现宇宙皇庭,进入宇宙国之中,但是他们无法理解罗云阳的想法,纷纷开始接受宇宙国的鲜血,红颜的血液,在魔皇的支持之下,将一具完整的尸体交给了大罗龙族。 - 无一例外。 - 加上不知道如何改造的龙族族人,整个魔族,都是法则大打折扣的,大罗龙族之中,大多数族人,都是凡蜕境界的修炼者,并不是修炼的全部。 - 不过即便如此,所有人族也都是神通境界的强者,他们的血液,也是魔族的真血。 - 末世到来,整个魔族族人,都被献祭到了宇宙之中。 - 罗云阳和魔皇,曾经做过一些调查,想要杀害无辜的生命,但是无论他怎么做,没有丝毫的效果。 - 而在无数年前,同样的一些动手,让魔族损兵折将,没有对人族的敌人动手,也都是因为自己没有能够在魔界还保留在人族,而且在这个时候,魔界遭受重创的事情,却是一直没有发生。 - 因为他们也看出来,整个魔族,已经死于非命。 - 这些魔族,将在人族的战争之中,归属人族。 - 毕竟,人类发展到如今的 - -> 魔皇冲向洛寒,为什么没有动手,是因为洛寒身上释放出一种焚空气机,没有半点可以防御的地方。 - 他身上涌出恐怖的火焰,这股火焰团似乎是一个小火球,赤红色的火球让整个天空都是冒着一股可怕的黑气。 - “明明是不受世界之力束缚的。” - 魔皇双掌猛地一抱,以他的法力,在和洛寒的玄火火团对抗时,即便是伤了他,这点法力也没有放在眼里。 - 可洛寒就是这么不被世界之力束缚的火焰,身上燃烧着,死亡的恐怖气息似乎和天地能量结合在一起,魔皇手中一掌拍出,元神和本命精血之间产生出无尽的震动。 - “死!” - 魔皇周身同样结出魔灵附体,魔灵本源的修炼从高灵魔法转变为魔灵本源,正好对洛寒有克制力。 - 此刻身为天地之力合身,洛寒的火焰本源燃烧出了七个魔灵本源。 - “阴阳生火术!” - 洛寒灵识爆发,低喝一声,顿时手中双剑蕴含天地之力化作一个黑白色的龙形刀影,向洛寒的玉手迎去,三位魔皇分身见此,也紧随而上,全都在洛寒强大无比的灵识中施展各种神通,攻敌 +# 模型原理(简化版) + +电脑的原理,是题海战术+笨鸟先飞。它把字变成很多数,然后,找这些数的数学(统计学)规律。 + +电脑的学习目标:输入一堆字,预测下一个字。 +* 只要学会这个,就可以一个个字写下去。 +* 训练的小说有几万本,每次随机挑一段 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 种字的【输出组】比较,计算和每个字的接近程度,就是输出这个字的概率。