CNCC 2018丨微软小冰首席科学家宋睿华:小冰是如何写诗的?
聚焦信息技术领域 为产业发声
导读
2018年10月26日,CNCC技术论坛之“自然语言生成:让机器掌握文字创作的本领”在杭州国际博览中心会议区二层新闻发布A厅成功举行。微软(亚洲)互联网工程院小冰首席科学家宋睿华进行了演讲。九州连线根据现场资料进行了如下整理:
今天,我主要想跟大家介绍的是关于诗歌的生成。很多时候,小冰写出来的诗往往会让很多人感觉到趣味性。因为小冰的定位在EQ+IQ,我们非常重视EQ的,希望在聊天中让用户得到更多开心、意外的结果。
▲ 上图右二为微软(亚洲)互联网工程院小冰首席科学家宋睿华
比如:
“一只小鸟,
看见我的时候,
美妙的梦便会变了。
在梦里的月光下,
丛间的白昼是这人暗藏的影子。”
这个是小冰观察图像之后写下的一个现代诗,可以看出小冰写诗并非是从关键字或者主题出发的,也不能够写藏头诗,但这是小冰自身视觉冲击下的灵感。当时在产品定位时,选择了现代诗,因为我们感觉大部分用户在读现代诗的时候,由于语言比较接近会更有感觉,所以选择了现代诗。
回头看小冰写诗这件事,我们觉得小冰创作就像人一样,人在创作之前有一个动机,即诱发源。而小冰就把图像作为它灵感的来源,图像有个好处就是它里面有大量的信息,就像大家都熟知的一句话——一图胜千言。
我们创作的本体可以被诱发,而且创作的过程是一个很大的黑盒子,我们需要用深度计算的技术去创作。
很多人经常问现在的深度计算有什么问题,或者AI有什么问题,也有些人觉得不可解释是一个很大的问题。但是对小冰写诗来说,我觉得“不可解释”是她一个很大的优点,因为当你将这首诗解释出来的时候,就会缺少了感觉。
我们在小冰写诗的时候添加了一些随机性,以及深度计算的技术,它的“不可解释性”会让人产生一种错觉,让人感觉这是小冰在自身意识驱使下写的诗,所以我们认为小冰写诗里存在的“不可解释性”是一个好处。
接下来,我比较细致的给大家介绍一下小冰写诗的原理。
▲ 时代广场
比如这里有一个非常普通的时代广场的照片,那么小冰怎么去写诗?写出什么样子的诗呢?她写到:
”像每一座城市愧对乡村,
我才有一个美好的完成,
每个失眠的夜晚我是一个花言巧语的人,
隐匿在灵魂最迷失的火,
绕出城市的边缘,
美好的,在风里,
最轻微的触动。”
这是小冰就这幅图写出来的一首诗,我们希望她的诗既与图片相关,但又不用拘泥于图片。它可以引申到人们共有的一些情感上,从而引发用户的共鸣。
接下来就要跟大家揭秘小冰到底是怎么写出这样的诗来的。
以这幅图为例,大家可以看到左边有一个类似于北京街头的一张照片,有车、有自行车、有楼宇。那么我们可以识别出其中的一些名词、形容词,比如“城市”、“忙碌”。
然后我们就这些名词、形容词找他们对应的使用频次比较高的词组,因为可能会识别错,它很多的输出也不一定是那么正确。比如我们选择“城市”、和“忙碌”作为第一句和第二句的关键字。
接着我们专门留了两个字的空位,如果生成四句,我们让他有两个关键字并不是由图像里来,而是我们去找以前的诗人,在提到城市的时候会有哪些非常高频的名词和形容词,而且我在里面随意挑了两个把它放在后面两句,作为它生成的关键字。
这样有一个好处是,也许你看到的是一个月亮,但是因为共有的文化,它可能会扩展出“思乡、家乡、故乡”这样的一些词,使得这首诗不仅仅停留在表面的物体上,而是能够深入到人的情感中。
就这幅图而言,我们最后生成的诗是
“城市在他身后缓缓地流,
我是个生活忙碌,
我们才在没人知道的地方寂静,
嘴边挂着虚假的笑容,”
大家可以看到每个句子刚好包含前面对应的前边的关键字,这样生成之后就会给大家一个既与图相关又会触动你情感的一种感觉,那么到底是怎么生成的?
简单的跟大家解释一下,相信很多同学老师都非常熟悉RNN模型,我们当时就用了1920年以来的数千位诗人的作品来训练模型。
首先我们从前向后学习,然后得到一个Forward RNN Model模型,紧接着从后向前,让他倒背如流学了1万遍,又得到了一个Backward RNN Model模型。这样一来,得到这两个模型之后,如果我们生成第一句知道了“城市”这个关键字,那么我们根据模型知道下一个字很可能是“在”。
而且我们在生成下个字的时候并不知道哪个是最好的,或者概率最大的,只是在一定的概率情况下,帮他们挑一个可以让它生成很多新鲜的词语。
接着,“城市在”这三个字连起来之后我们去想前一个字是什么?那么刚好这句话前一个字是换行符,这就意味着我们句子的“头”已经找到了,我们再不断的调用模型生成后面的字,直到遇到换行符为止,那么就得到了一句话“城市在他身后缓缓的流。”
可以看到这是一个非常简单的模型,但就是因为利用了这个模型,才使得我们的关键字并不只是出现在句首,还可以让它待在这个句子的任何一个地方。
有了单句的生成,我们又尝试了一些方法,如何生成多句,但是很多时候多句的生成,其语义会非常的不连贯,各说各的,只是拼凑在一起而已。以至于后来我们提出了另一个模型,目的也很简单,我们想把句子级别的语意也记录下来,对其序列规律做一个模型。以此预测他下一句可能是什么样子,然后再把它作为一个输入。那再生成下一句的时候,这个模型就需要重新训练了。最后,我们就发现了一些可喜的结果。比如前面出现了沉睡,后面又出现了鼾声,我们发现前后句终于可以有语义上的连贯性了。
因为我们想让小冰有一定的自主性,包括她对一幅图可以生出很多不一样的结果,所以我们很注重搭配的检测,还有语法的检测以及完整性的检测。
比如为什么要做完整性检测?因为刚开始没有加这一部分的时候,我们发现经常可以把一句完整的诗拆成两三句说。但是如果四句都讲完了还不结束,人们就会感觉到没有说完会有一种很难受的感觉,所以我们专门做了一个完整性的检测。
▲ 船的照片
再给大家展示几首小冰的诗,比如船的照片,小冰说:
“游子是一只船上的沙土,
如同美丽的灵魂,
我不能创造世界,
伴着古老之遗恨。”
▲ 很丑的鱼
又比如看到很丑的鱼,她会说:
”鱼的人,
甜蜜的风,
灵魂的呼吸,
那最高的天空。”
其实我也不知道她在说什么,但是感觉队形很好。
最神奇的是这张图,在我2016年做这个工作的时候,刚好那时北京也像这两天的杭州一样,连续十天的雾霾非常严重,我就看到了这首诗。
▲ 蓝天白云的CBD
小冰根据一个蓝天白云的CBD的图,写了一首诗:
“所有的城市愧对你强大的数字,
美好的希望,
最好的朋友心爱的老婆,
大风起来。”
当时就乐坏了,我在想她怎么知道我们北京人都在等风,而且它强大的数字又好像暗暗的在指GDP,所以我们觉得她还是蛮神奇的,她的诗有时候在情境中会让你有一种“她有意识”的错觉。
很多人会问我小冰写诗是不是要抢诗人的饭碗,我认为并不会,最后我想给大家看一首人类的诗,这有一首我的女儿在幼儿园阶段学到的一首小诗《灯塔》:
“天黑了,
浪睡了,
大海静悄悄,
只有灯塔妈妈睡不着,
睁着眼到处瞧,
看看有没有还没回家的船宝宝”
当她背给我的时候我是特别感动的。我觉得,为什么人类可以用如此简单的字眼去打动一个人,为什么可以把灯塔摇摆的灯想象成一个眼睛,而把灯塔和船的关系想成妈妈和宝宝的关系,把这种感情赋予在诗里做一个这样好的比喻,并且是在诗的最后一句,才让人产生这样的惊喜。我觉得人类在做诗的时候是非常奇妙的,是AI所不能企及的,因此我们的空间还很大。
声明:
本平台法律顾问为山西晋商律师事务所
九州连线原创文章,转载请注明出处