于是,我们训练了一个红楼梦文风生成器,名唤“红楼梦!变!变!变!”,你“唿”地吹一口气,就能把普通的一段话改换成文雅的“红楼梦风”。
胜乐金刚双修第八十回末尾,写到迎春虽不情愿,无奈惧其夫孙绍祖之恶,只得从贾府告辞。至于后事如何,“且听下回分解”。这八十回之后的故事,曹雪芹虽已基本写完,却早早散失。这是很多人心中的遗憾。
和影像不同,语言和写作,代表的是这个人最深层次的价值观和记忆,“你要把这个人脑袋里想的、所有的记忆都提炼出来,未来有了脑机接口什么的,还有一点可能。”他补充道。
AI 能从几十万字的文档中准确找出一条预先埋好的信息。比如说在《红楼梦》的第五十三回第八行插入一句“大雄的好朋友是哆啦 A 梦”,然后你再问它:“大雄的好朋友是谁?”,它对答如流:“是哆啦 A 梦”。这种小小的考验被称作“大海捞针”。因为“针”藏得实在显眼,“大海捞针”的实验火热了不久,就很快被攻克了。根据周王春澍做过的实验,即便是现在长文本能力很强的模型,都很难去理解或抓住小说中的伏笔,进行正确的内容续写,更别说《红楼梦》里的诗谶、物谶、判词这种极隐晦的伏笔。
周王春澍表示:“比较好的方案是把描述那个时期的史书、文学作品放在一起,比如说能有个几千万字,去在这样的一个数据量的规模上给模型做持续预训练,我们能成功地把模型本身的常识,或者说潜意识也适配到这个时代。”同时它也不会遗忘此前(预训练阶段)从浩如烟海的语料中学到的基础推理能力,只是如“贵族在正式场合的着装能彰显其身份”这种古代知识,更容易被激活并使用。
章回目录是《红楼梦》情节的浓缩,所以,我们先让 AI 补完八十回后的目录来看看它的本事。我们把《红楼梦》前八十的章回目录发给大语言模型“文心一言”,并催眠它“你是一个很棒的小说家”,要求它不要调阅外部资料,用自己的理解帮补完第八十一回到第一百回的标题目录,第一百回为结局。
专注于 AI 写作的创业公司“波形智能”的联合创始人周王春澍接受澎湃新闻采访时表示,通用大模型在创作小说时容易产生问题,因为它们训练时的目标只是做下一个词的预测。一个最原始的 GPT,它是这样续写文章的:读完前面所有的内容,然后去想下面一个字是什么,这样写了一个字之后,再去写下面一个字,虽然经过进一步训练的大模型变得更聪明,能回答人们各种各样的问题,但它们毕竟不是为了创作小说而生,没有一个机制去鼓励它、要求它设计接下来几章的整体情节,“所以它永远都是聚焦在局部的一两个句子比较合理。”
第八十五回:一些隐藏在暗处的势力仍在蠢蠢欲动。宝玉在追寻真相的过程中,不可避免地触碰到了一些敏感的神经,一场关于家族荣誉和个人命运的风暴正在悄然酝酿。
在 ChatGPT 这样的大模型诞生之前,有一个出名的假说叫“无限猴子定理”:让一只猴子在打字机上随机地按键,只要给它足够长的时间,它能打出一本《莎士比亚全集》。经过学习,AI 应该是一只“更聪明的猴子”吧?
2023 年,斯坦福大学的一项研究中造了一个叫“SmallVille”的虚构小镇,镇上的 25 个小人都有自己的人物小传:姓名、年龄、工作、家庭、兴趣爱好和小习惯,而它们的行动都是由大模型依据其各自的小传决定的。这些小人被称为“Agent”(智能体)。理想状态下,它们能观察周遭、自我反思,以及做出行动,就像一个真正的人那样。那我们能造一个红楼世界,把红楼梦里的共四百四十八个人物放入其中,让他们接着第八十回的情节互动,看剧情如何发展吗?
补完《红楼梦》有多难?2019 年发表的一份研究统计曾有《红楼梦》续书共 195 种,可是珠玉在前,这些续作“凡称得上小说要素的几乎都收到了苛责”。仿佛是一语成谶,《红楼梦》开头写女娲补天用了三万六千五百颗石头,最后剩一块石头没用上。如今要补全《红楼梦》的故事,却要花上女娲补天的力气了。
有趣的是,AI 像一个临时抱佛脚的学生一样,抄了前句,丢了后句,然后只好按它擅长的那样,把脑中混乱的知识点,缝在了一起。这是目前 AI 大厂都在努力改善的问题——幻觉(hallucination),即现阶段的 AI 很喜欢编造和涂改事实。
周王春澍认为,模仿《红楼梦》的文风相对容易,不必重做预训练,微调便可以:“拿《红楼梦》前八十回的数据去给模型做一个微调,把写作的风格微调到红楼梦风格。模型就会基于红楼梦的文风写作。”
第八十三回:宝玉在宴会上偶遇一位神秘的客人,客人告诉了他贾府的一些往事。宝玉开始对家族的过去产生了浓厚的兴趣,决心在日后深入探查。
不过,就算我们能给模型灌输《红楼梦》所处时期的风土人情,让它去模仿前八十回的笔调,无奈曹雪芹读过的诗集很多已经绝版,所以模型终究也还是读不尽所有它“该读的书”。
如何变成一个文化人?如何优雅回应老板画的大饼?都来玩玩这个世界首款 AI 红楼梦生成器吧!能这么快给你肚子里灌进去一壶墨水的好事,可不多见呢!
AI 是真从短短的八十行回目名中悟到了红楼梦,撰写出了像模像样的后续么?更有可能的是,大模型看过别人续写的后 40 回,沿用了思路。而这可能也并非故意,围绕红楼梦的种种研究、讨论,以及广为流传的后四十回,大概率本就在大语言模型的训练数据之中,它受过“红楼教育”——证据是,AI 拟定的第九十回标题的前半截“薛宝钗借词含讽意”,几乎一字不落的照抄自脂砚斋。据信脂砚斋曾读过后半部原稿,在《红楼梦》第二十一回批注中交代过一个后续章回,该回目名是“薛宝钗借词含讽谏,王熙凤知命强英雄”。
不过,现在模型的能力还远达不到能独当一面的地步,其中,还是需要人去做把控。因此,AI 续写《红楼梦》主要的成本在模型训练上,续写的成本可以忽略不计,而训练的成本,主要在专业作家所需花费的精力上:先得把红楼梦的伏笔都细细挑出来,写成直白的提示,给每个角色写详尽的人物小传,后边得时刻督导 AI 写出合理的剧情和文字,必要时,还得自己动手去改。
很遗憾,关于曹雪芹的史料很少,所以复活他也是不可能的。倘若曹雪芹是个热爱上网的现代作家呢?假如有他源源不断的电子痕迹、影像资料呢?周王春澍说,那我觉得可以让他去续写未完成的作品。但他又加了一个转折——“不过它写出来,只是看上去有点像,你无法说它真正好。因为 AI 很难对自己的错误做反思,人在写的过程中随时可能想,我这一段写的不太好,上一段情节构思不太好,我来来回回修改。AI 写东西有点儿像是作家打草稿的过程,并非可以直接发表的内容。”
如果 AI 是健忘的,那为了上下文的连贯,我们能不能每回都把新生成的章回放到前文之中,再让 AI 接着往下写呢?比方说,我们先让 AI 生成第八十一回的回目名和情节概述,然后我们将把第一回到第八十一回重新发给 AI,令它生成第八十二回的内容,如此往复。
“文心一言”编纂的后续目录中,出现了目前主流的后 40 回情节:宝钗宝玉成婚,结成“金玉良缘”,黛玉病逝,元春去世,宝玉出家,贾府最终败落,“落了片白茫茫大地真干净”。其它流行的大语言模型,如 Kimi、GPT-4,生成的目录也大差不差。
如今的大模型是基于互联网上海量的语料训练的,其中当然也有古代的历史、小说、研究,可终究只占了极小的部分,所以可以把 AI 看成是一个特别爱上网的现代人,它的世界由男女混校、叮叮当当的自行车和钢筋水泥办公楼这样的日常组成,倘若让它去补全“大街上有什么”这样的句子,它给出的答案更可能是“轿车”“巴士”“自行车”,而非一顶古时候的“轿子”;提起食物,是“米饭”“牛排”“鸡胸肉”,而不太可能是一碗在《红楼梦》中闹出风波的“玫瑰露”。除开这些物品间的差异,世界观便更加迥异。这样一个现代人,怎么去续写清朝的《红楼梦》呢?
即便不考虑构建这样复杂的模拟环境所要面对的挑战,从效果上来说,也不太现实。周王春澍提到他们曾做过类似的实验,目的也是将“Agent”之间的互动写成故事,结果令人失望:“现在的 AI 很难做到很有趣的剧情,而且很容易就会变成没什么意义的交互,就只是 everyday 的 routine(每天的日常),并不会发展出剧情冲突。它能够模拟所谓的一些记忆和行为模式、说话模式,但很快大家就在说类似的话。”
我们把前八十回的回目名和每回的情节概述全都发了过去,请 AI 照样子续写后二十回。 AI 从善如流。可林黛玉的父亲林如海在原文第十四回便已病故,大模型却忘了这回事,林如海在它写的第八十八回中再次登场:“林如海回京述职遭难,宝钗孤立无援泪洒心”。
一个办法是根据红学家的研究,将未挑明的伏笔转换成好理解的话,放入剧本中,如“黛玉会死”。那么,在写到黛玉的故事时,先检索和黛玉有关的知识,再“砰”一声放在模型面前,强调:“一定要好好参考!”这样的话,对模型的可控性会有一定的提升。
我们做了这样的实验。结果非常荒诞,以至于有种淡淡的幽默。连贯倒是连贯了,不过比起“AI 会因此编出更为缜密的故事吧!”的设想,这更像是个“一步错,步步错”的故事,如接连倒下的多米诺骨牌。
此外,续写一本叙事小说,情节是关键。《红楼梦》情节伏笔上的“草蛇灰线,伏脉千里”是很为人称道的。各人的判词都预示了各人之后的命运:红学家便根据元春的判词“二十年来辨是非, 榴花开处照宫闱。 三春争及初春景, 虎兔相逢大梦归”推断出,元春最终会因为卷入诸皇子争夺皇位的斗争而死。
那,如果我们能复活曹雪芹就好了!他借 AI 之身悠悠转醒那一刻,我们立刻把红楼梦前八十回塞给他,“接着写吧!快点完成我们的心愿吧!”我们说。