仿生人会梦见西游记吗
![]() |
昨天读到一篇文章,用深度学习来训练AI写作。AI不偷懒,读完射雕,便笑道,「这九阴真经没有不易的」。读完白氵吉,也半懂不懂念起了「那些事情」,总之极得慧根。
于是顺藤摸瓜去读了卡帕西的RNN模型博客原文。细读,了不得,这个AI骨骼清奇,简直是句法(syntax)学习的奇才。
怎么讲?我们学习外语的时候,总是学些单词,再按照一定的语法(grammar),造出句子来。但是这位AI学语言的时候,并没有词的概念,甚至hello这么简单的词也不懂,它只是不断地统计,发现hell后面接o的概率较大,所以当它生成hell这个序列时,能够比较自信地接上o,续一笔。它自己写的时候,不是蹦词,就这么一个字母一个字母蹦来的。
当然hell后面接空格也是合理的(如果它得到的输入都是hell from the other side, 而不是hello from the other side)。空格,对它来说,也是一个字符,和abcd一视同仁,接呗,没什么大不了。英文中用空格分词它无差别地也会了。空格之外,还有标点,统统都用统计大法见一个学一个。卡帕西用Paul Graham的文章做训练集,AI写出来的习作给自己的话加了一个标注!(当然是跟PG学的不过)就是这么自信XD。
![]() |
好啦。句子里时不时插入方括号包围的数字,也是可以依样画葫芦的,只要身经百战得多了。它不是先学单词,再造句,本身就没有将标点看做文字之外额外困难的部分。毕竟读了千百万字,哪个标点没见过?
这下就有很重要的引申意义了。既然它并不依赖规范的文字,只读散文实在太小看它了。卡帕西接着祭出了英文界的经典语料、词汇量的王者——莎士比亚全集。且看AI如何接招。
![]() |
竟然被空手接白刃。
![]() |
近代英语不怕不怕,剧本的格式AI也分分钟get了。大写的人名,冒号,对白,分段,各个有板有眼。有个著名的无限猴子定理,说如果一只猴子随机地在键盘上敲击字母,只要给予无限的时间,它就能打出一部完整的莎士比亚全集。AI所作的事情也类似于逐个敲击字符,不同的是,它有学习的经验,对下一个字符的选择有更合理的预测。
这个问题难不住它,卡帕西再放一个大招——维基百科数据包。维基是用标记语言写成的,无数的链接、双层括号、标题、章节……格式内嵌在文本里,普通人要写非得经历一番训练,要读也颇费点力气。叫AI来学你敢答应吗?
![]() |
偏偏,这正是机器的强项。AI不仅掌握了维基写作的法则,还即兴发挥写上一大段完全合法的XML。如果你写过XML解析器就会知道,那玩意看着简单写来繁琐。(我面试遇到过我会乱说?)AI在并不懂XML的情况下,总结出了缩进、嵌套、开括号闭括号对应、id是数字、时间戳是时间戳等等全套规则。我刚才说,它是一个句法学习的奇才,正是这个意思。
如果单看它写的文字,文理并不通顺,语法也错漏频出。因为语言不是规则的产物,就像化学一样,所有的规律都有例外。语言与意义的映射,于它更是不存在的东西。它如何能凭空创造(熵减的)有意义的内容呢?只能从训练材料中总结用法罢了。而计算机语言,包括XML这样的标记语言,存在十分明确的规则,因而更容易被善于识别规则的这位AI所掌握。
所以当AI阅读了代数几何的LaTex代码,写出了几乎可以编译的论文;阅读了Linux的内核,写出了形式逼真C程序,也就不足为怪了。它的神经网络模型里,同时包含了长程和短程记忆,某些神经元,专门在一个括号打开、或者进入一个if语句时兴奋(excited!),因而能够有效地记得闭合。莎剧的大写人名、对白、段落,也是长程记忆的结果。所以小到词汇拼写,大到段落的样式,它都能一一把握。
然而,很重要的引申意义并没有到此为止。既然这位AI对字符都一视同仁。它的学习能力不会局限于英语。字母是字符,汉字也是字符,不过就是解码集大一些罢了。这是一个很重要的特点,因为中文的自然语言处理比英文困难得多。如果需要一个专门的技术扩展才能处理中文,你就看不到前文中的射雕和白氵吉了。
说了这么半天,不亲自试玩一下怎么行。我也把卡帕西的模型下来跑跑。选的以下几个训练集都在2M的量级,约百万字。为什么不选大的,因为计算很费GPU,租高GPU的机器很贵哒……
下面来看看仿生人怎么写四大名著吧。
红楼梦前八十回:➜
那人哈哈大笑。”只见宝钗搂取笑道:“又是如今拿我的去,你们只听家小太太呢?"宝钗笑道:“你好的时好都有了,他不要连了大夫,只见咱们吃了回来,今日叫他的是个大家来都对西,只是倒闹半天,那里的学人,银子就走一样,你探春的积子,不是我们是个大大.你故此相要了,就是些太太的,只是打了公日.几个难好不得人走的,如今秋杍,你还是大爷几十的父子,又不说一天话.只是听了的,还是心中可不是无园。”宝玉笑道:“你们这会子打点,我不敢好。”
红楼梦后四十回:➜
那人哈哈大笑。”只见宝钗笑道:“我是劝好好说,我拿了问他了,不是死呢,听见不没有?"贾政也在门时在揜正不装呢,要起一天去,只见园里又叫孝罂好了还听嚷,提出去少欲的小良,听见候闷到因已问那里瞧到,随了他,一面恢了,回说:“都叫你换了辢儿,又自己的样是,了和尚出去捹笑,这个才是了.我想我们钱是两个人喜欢,宝玉还是都得说
「那人哈哈大笑」是我选的引子,相当于话题作文。名著们并没有被带到沟里去,而是马上展开了自己的风格。红楼前八十回和后四十回分开训练,文风差异明显,前者欢快轻松,后者语渐沉重,与材料走向一致。然而不分前后,大笑下一句都是宝钗接着「笑道」。可见红楼中「笑」这个词周边,经常出现宝钗。你们说,这个相关性抓得对吗?
![]() |
水浒传:➜
那人哈哈大笑。次日,只见李逵早把盖着担棒,说道:“二郎也不提了来,只打在水县庄上,端的做个江州都是本县,不才开河,打到了一杯。朝廷不敢赸了,令也无得。”那妇人道:“小人在林子里探听忠义堂上,浢快下。”又有一个娘子将他,心中相捕。
次日,史进拿了自此一半八百两银子,叫智深叫道:“大官人请来!”
水浒主题也抓得精当,朝廷vs好汉,官人vs娘子,一百零五个男人与三个女人在水边对抗朝廷,一言以蔽之就是这么个故事对吧。再看西游怎么写。
西游记:➜
那人哈哈大笑。
國王又問:「悟空,你看那廝不得一個白鶴的和尚?」行者道:「老孫不知好歹!快拿來你師父,又不知是個有些怕,要我去。」八戒道:「哥哥,你去尋他去罷。」那呆子急轉身,將金箍棒就走,被行者變了一個巡查兒,就敲領力招命。行者道:「不瞞師父說,我們打上天河邊,只見那三個老兒倒不曾見,我們只是又來拜言。我也曾見師父去,與他交戰三合,先見各邊無事。」行者道:「他叫做好水避。」八戒道:「哥啊,你不知可怕,我不是女婿明名?」行者道:「既如此,不知好意,說我們有些醜陋,以後再不能死,專往哪裡去?」
西游里孙悟空黑化了,试了好几段,都代入的是妖精的口吻。开头调下,感觉不会再好了。
西游记2:➜
那人大笑。正是那:
當年千山插兵日,天上地神通明珠。
飲怪飛去二十大燈,即與真君到,把門的小妖來報:「師父!大王孫悟空小兒孫悟空又來拜問,叫做孫悟空行者。只因他是你的身上的徒弟,就是金聖宮娘娘來處。」
好大聖,把金箍棒揉一揉的絲帧,叫道:「師父叫我變作他的模樣,又沒了。」行者道:「我們只是師父收他一個,名喚廣寶,有何難事。正是孫行者,不要打殺他,他不會打息,所以叫做孩離大大王。自此時,見有一座洞內,又不曾各弟兄師父上菩薩。不多時,大開時與老孫見了一個去處,可曾在那裡面說。」
![]() |
金箍棒,三个字,真是无论何时出现都有「污」点。还是三国最凛然正气。还未落笔,我已听到丞相爽朗的笑声。
![]() |
三国演义:➜
那人哈哈大笑。大将军吕蒙各引军军出,又奏曰:”此处可速回。”云长曰:“吾弟公心军所请,先取江东,有失不来。”权曰:“可以为将军起兵。”操令关兴、张翼、孔明入城,只得引兵出城,收军到府前取大寨,忽即与张绣也。关公不得家,忽报曹操军中又起兵将来。
却说孔明欲杀曹操,望东南门外分付:“不可。”后主曰:“吾闻将军同守,则取旧军否?“孔明曰:”昔日吾可以来,故又心不可。”操曰:“吾受此此事,何以知天下在?如有不可计也?”
四大里三国是文言,但是效果最好。可能的解释是,三国的用词比较简单,套路较为固定。句子短,总字数多,每个短句内部不似前三部那般千百变化,用同样的变量去拟合,得到的fitting更好。如果用二十四史中某一部来训练,很值得期待。不妨再欣赏AI的另一佳作,换个引子,得到如下**精彩**片段,君请看
三国演义2:➜
却说孔明大惊,即时放出大寨,定军山中下寨。周瑜拜谢,引兵先出救道来。操大喜,即令夏侯渊、马岱、张苞、李典、马岱、张飞、马超、马岱、马岱引兵出城,只有夏侯渊、张嶷也。二将军拨马便走。诸将引军投此城下。正是:吾何不早来,吾心不敢多战,吾故共入城去。”乃与关公与张飞入宫见之,只得即安得张辽,先入长安。却说曹操自引军出后,营寨有费谓,正在危逢之处,占其后善大呼曰:“何其言!”言未毕,一人起兵去讫
一个大喜的曹操竟然同时放出了四个马岱,真是迷之♂马岱♂。
![]() |
有了水浒,也不妨拿金瓶梅练手。说练就练,AI的答卷。
金瓶梅(崇祯本):➜
那人大笑。李家那日,合家欢乐饮酒不题。却说春梅又问西门庆家家,不想朝满参汗巾儿转来半夜并妇人还未之秀。暗暗告送大姐在家,名唤落了一顿。慌了手脚,一一身道:“我的哥哥,你这老早寻常时没出来?”一回撇数了他来,一把妆无清晌午同减。春梅拜谢了几日,见一个个李瓶儿,交付与了五十两,换跟掟席是金莲若间。当下一头叫他后边取茶吃。又使玳安道:“没曾往那边叫他来,等我与你个丫头,因我出房去?”婆子道:“我的儿,我心头儿,我不出去。”说毕,一面走了出房来,与西门庆瞧:“他娘子儿子在那里唱着,直到后边吃酒来。”伯爵道:“哥,你在那里?”玳安道:“小的知道。”
如你所知,吃吃喝喝,银钱使唤,浓浓的生活气息扑面而来。金瓶梅嘛,就是一副明末生活的图景长卷。AI这续笔,也接得不错吧。
上述名著的数据量都比较小,为了更完整地体验模型的威力,它写出的中文到底能通顺到什么程度,我试图找一个更大数据集,它应当满足以下特点:
1. 字数多,千万字以上为佳。
2. 风格稳定,理想情况是出自同一作家之手。风格不稳定会凭空引入更多的变量,还会造成context混杂。比如有人用历年基金项目材料训练,得到的习作里各个学科术语杂糅,画面十分不美。
考虑了中外高产作家,琼瑶、张恨水、郑渊洁、村上春树、儒勒·凡尔纳等等,最后选择了古往今来汉字写得最多的人:倪匡。他的作品分为科幻、武侠、恐怖等系列,每一系列皆有数量众多的作品。其中卫斯理TXT竟高达37M,属于同一作家同一主人公系列,完美满足上述条件。经过一天一夜的训练,AI的习作如下。
卫斯理:➜
那人哈哈大笑。
我拍着我的肩头,道:"好,这是因为在那两个大地图之后,发生了什么事?"我一时之间,只是不由自主,轻微地发起抖来。
他又道:"你有什么用?"巴图道:"我们将他打开,要是听得到如今,有什么人知道?"我不禁呆了一呆,不知道他是不是可以听到我的话。
我又道:"我看到了我们的生活,他还未曾听到他是在外面,只要你说是在说出原来的国家!"我向他笑了一下,道:"是什么人?"我向我望了一眼,我又道:"是的,我还有一个说法,全是十分有用的古堡,你停止了吧!"他讲到这里,突然发出了一下惊呼声
![]() |
这是第二十二次迭代的结果,抓人的悬疑感已经呼之欲出了。这个model还正在持续训练之中(22/50)。最后的结果我会在这里更新。为什么等不及现在就发了?因为明天上班要去搬砖了啊,喂。
如前所述,写作只是此AI技能树的一枝,它能做的事情还多得多得多。我也会持续探索它别的有趣的技能。欢迎贡献脑洞,欢迎众筹云计算。请洒潘江,各倾陆海云尔。
射雕文:http://blog.sina.com.cn/s/blog_9b27a3eb0102wgeu.html
卡帕西原博:http://karpathy.github.io/2015/05/21/rnn-effectiveness/
代码:https://github.com/karpathy/char-rnn
滕子京的最新日记 · · · · · · ( 全部 )
- 读史记2: 垓下歌是谁所作? (10人喜欢)
- 一首关于家暴的诗 (12人喜欢)
- 从黄钟到大吕:创造宫商角徴羽 (18人喜欢)
- 东方王子历险记 (5人喜欢)
- 黍离与麦秀 (17人喜欢)
热门话题 · · · · · · ( 去话题广场 )
-
加载中...