Wangd-wiki-article-vvpoem
关于薇薇的故事
回顾起来应该是2015年暑期,我偶尔读到一篇用神经网络生成古诗的文章,名叫“Chinese Poetry Generation with Recurrent Neural Networks”,作者是爱丁堡大学的XingXing Zhang和Mirella Lapata两位学者。我一向对古诗词有浓厚兴趣,这篇文章又来自我毕业的母校,因此特地仔细读了一遍,很受启发。传统诗词生成方法是拼凑的,即把诗词库里的句子打碎,再将片段按诗词规则组合起来。这种拼凑法显然过于机械,事实上没什么道理可言。爱丁堡的这篇文章用递归神经网络(RNN)作为生成模型对诗词进行建模,同时为了保证生成句子的主题连惯性,将已经生成的句子压缩成一个表征向量作为模型的辅助输入。我立刻意识到用RNN生成诗词是一个有趣的思路,因为这种模型可以学习很复杂的动态性,足以描述诗人在遣词造句上的规则。然而,当前这篇文章所给出的方法具有很大局限性,因为诗词本质上是一个字符流,RNN应该学习整首诗/词的字符规则,而不是一句话内部的规律。换句话说,诗歌的规律更多是整体的,而非局部的。另外,逐句生成的方法也不适合生成更灵活体例,如八句律诗,不定句的古风,长短句的宋词。我们需要一种新方法,能对诗/词进行整体生成,同时保持前后句子在语意和语境上的连惯性。
用RNN来学习整体语流是个好思路,但可能会出现语义漂移。一个解决方法是利用一种称为“注意力”机制的改进型RNN,将用户输入的主题作为指导序列进行编码,在生成过程中始终对这一指导序列进行“回顾”,保证生成的句子不会偏离主题。2015年8月初,我和实验室文本组的成员,包括邢超、骆天一、张东旭等讨论了这一思路,大家都很兴奋,觉得可行。这其间和汇联的游总谈到这件事,他立刻表示出极大兴趣,说愿意资助我们把这个事干下去。我把这件事交给了当时一个北邮实习生,但他做了一个月就离开了,这事情也就此搁浅。
突破发生在两个月后,天一带来一个很不合群的实习生,剃着板寸,穿着马甲,精明壮实,一副铁掌水上飘状,蔑视天下。天一说:“老师,这个学生叫王祺鑫,刺头,不过很聪明”,我问:“你能搞定吗?”,天一说:“老师放心!”。 现在我能查到祺鑫最早的工作记录是在2015年11月16号,他当时已经能让机器生成这样的藏头诗了:
新著黄昏雨帽客/春香返绿遍吹帘/快送东风千里便/乐燕枝伤娉前鉴
到下一周时,他报告的诗是这样的:
新春五谷喜丰年/春色香云马不欢/快柳迎如光意美/乐书今为事时安
自此以后,这个剃着板寸、穿着马甲的年轻人迅速进入这个领域,并完成了若干重要实验。到2015年12月21日时,他已经可以生成若干词牌名的宋词,一例如下:
菩萨蛮
塞下秋来风景异 /一点愁边 /又是天年几
归去无穷千里意/何时不自然红紫/莫教小桥横月日
花满城头/夜上青山碧
云外有情多处事/休言酒醒初长记
诗的质量也有了很大提高:
诗人已化罗浮鹤/独有春风细雨得/行到处将无半作/东君未许几分隔
2016年2月,祺鑫和天一作为第一、二作者提交了一篇论文到IJCAI 2016,“Chinese Song Iambics Generation with Neural Attention-based Model”。这是第一个基于Attention 机制的诗词生成模型,也是第一个可以做宋词的机器。
其后,祺鑫和天一专注提高格律诗的质量。和宋词比起来,格律诗更注重个性化,因此神经网络建模更困难。我们现在知道,如果数据量足够大(比如上百万首诗),学习这些个性化规律是没有问题的,但当时我们的数据规模只有1.3万首五言诗,6.6万首七言诗,远远达不到训练一个完美模型的要求。祺鑫做了大量探索,基于这一小数据集取得了非常好的效果。2014年3月21号,我们发布了人机图灵测试结果,在这次发布中,我们首次将我们的做诗机器人称为“薇薇”,取名自我们团队中一位叫张雪薇的漂亮女孩(当时她正忙着给参评的专家们发红包)。在这一测试中,我们邀请了诗词圈的诗人们和薇薇一起就30个主题进行创作。人类诗人可以选择他们最擅长的主题,最终我们收到144份诗稿。我们让薇薇用同样的比例生成了144份诗稿。为减轻评价工作量,这288份诗作由社科院的张一南老师进行初筛,去掉那些明显质量低下的作品,最终83篇人类作品和124篇薇薇作品入选。24位来自北大、社科院等权威机构的专家对这些作品进行了匿名评价,结果发现人类诗人以3.27比3.17的微弱优势胜出。同时,在薇薇写的诗中,有31.02%的作品被认为是人类作品,这事实上刚好超过了图灵测试中30%的通过比例。由此,薇薇成为第一个通过图灵测试的做诗机器人。下面这首诗是被专家评价最高的薇薇诗作:
春信香深雪 / 冰肌瘦骨绝 / 梅花不可知 / 何处东风约
薇薇的表现让我们感到鼓舞,她的成功事实上证明了一件事:很多时候我们认为的“智能”也许不过是经验的累积外加一些随机性,因此诸如艺术这种看似亟需创造力的事情或许本质上并不复杂。可惜过了不久祺鑫和天一都离开实验室去了美国,我们刚刚半岁的薇薇又一次陷入停滞。
2016年6月27日的工作报告里,另一个来自北大的实习生张记袁开始着手继续培养薇薇。记袁和祺鑫是完全不同的两类人,憨实厚朴,肯下苦功,经常工作到午夜以后。如此勤奋终于换来成果。2016年10月31日,记袁得以用Tensorflow重现了薇薇的生成质量,并很快实现了对薇薇的改进。当时我们着眼一个现象,即当模型训练不足时,生成的诗比较平庸,但当训练较深入时,生成的诗又变得非常“诡谲”,不合常理。换句话说,让薇薇生成较平顺的句子是没问题的,但让她创新则很困难,一旦强迫她创新,她就开始胡写。这显然是统计模型的固有缺陷:但凡创新的事都是缺少统计显著性的,因此很难被RNN这样的统计模型有效学习。当时从百度离职的冯洋老师在我们实验室做短期访问,她提出一种方法,用记忆机制去平衡统计学习和联想学习,即用模型方法学习常见规律,用记忆机制去保存那些不合常规的个例。这是个很有趣的想法,后来我们证实在若干任务上这种方法是有价值的—事实上这一方法的价值已经远超过我们当前的任务。不论如何,记袁很快给薇薇加入了记忆功能,让她学习写诗的同时,也把奇趣妙句记下来,随时应用。这种方法使得她生成的诗句更加流畅可靠,同时还可以变换不同风格。这些工作后来发表在ACL 2017上。下面是加入了记忆能力后薇薇的诗作,前者是通常风格,后者是香艳风格:
一山自有无人语/不是青云入水边/莫把春风吹落叶/花开绿树满江船
花香粉脸胭脂染/帘影鸳鸯绿嫩妆/翠袖红蕖春色冷/柳梢褪叶暗烟芳
我们对薇薇还在继续改进中,让她学习不同朝代、不同诗人的各异风格,让她学习如何起承转合,如何对主题进行议论升华,等等。我们相信这些是人类的智慧,但同样可能被机器模拟。我们相信一些规律隐藏在作品样例之中,人们可以熟读后掌握这些规律并进行创作,薇薇也是一样。