让机器人懂感情:表情符与深度学习

最近,神经网络逐渐成为许多计算机科学难题的解决工具:Facebook用神经网络做照片人脸识别,Google用它对照片内容做 各种 识别。苹果公司通过它来识别Siri听到的内容,IBM用它做业务部门协同实施。

这些工作都让人印象深刻。但神经网络能否应对现实中的问题?它能过在需要的时候帮你找到 �� 表情符吗?

为什么不能?当然可以。��

这篇文章会概述Dango背后的设计。从真实世界中上亿次的表情符使用中自动学习,提取成为一个小巧快速的工具,预测你在手机上可能使用的表情符。�� �� �� �� ��

Dango是什么?

Dango是一个运行在手机上的浮动助手,可以在任何APP编辑时根据你输入的内容推测你可能用到的表情符、贴纸和GIF动画。它让你在所有地方都可以使用同样丰富的表情,无论是Messenger、Kik、Whatsapp或是Snapchat。(要在所有APP中都能使用对Dango本身是一个巨大的挑战,但这不是本文要关注的内容)

提示表情符非常难:也就是说,Dango需要理解你正在编辑的内容,然后才能建议你可能需要用到的表情符。Dango依赖的其核心功能,就是基于神经网络进行预测。神经网络受到人类大脑中神经元的启发,对上百万个可设置参数的计算结构的一种松散连接。

神经网络通过随机的初始化参数开始训练,然后为Web上实际使用表情符的地方给出建议,比如“嘿,最近怎么样��”,“晚上想来点��吗?”,“啊呸��”诸如此类。一开始,神经网络给出的建议只是随机猜测,但是随着实际训练的进行会逐渐调整那上百万个参数,在实际场景下表现得越来越好。在顶级GPU上运行了一段时间后,这个网络开始能够给出一些看起来更有意义的提示:

晚上想喝点什么?�� �� �� �� ��

从表情符学到的

这种数据驱动的表情符预测方法让Dango的表现超出了我们的预料。Dango会教我们新的俚语,让我们知道世界各地的人们如何使用表情符交流。

例如:如果你输入”Kanye is the“,Dango会提示��。这只山羊表示史上最伟大的(Greatest of All Time G.O.A.T),Kanye在今年早些时候被授予的头衔:

意识到他是在世的最伟大的艺术家,以及最伟大的艺术家之一。
— KANYE WEST(@kanyewest)2016年2月14日

Dango能够表示所有单个表情符无法表达的内容。例如,如果你来自B.C.或者科罗拉多并且喜欢“放松”,那么Dango会用你的方式表达。

今晚420?�� �� �� ��

如果你觉得某人很扯淡,想要让他们滚蛋。Dango会这么说:

你走开 ������。

Dango还掌握了很多互联网文化,能够理解文化和潮流。例如,如果你看过喝茶的青蛙Kermit,“但这不关我的事”这幅图:

但这不关我的事 �� ☕

当然,还有很多Dango能够理解的笑话,但你得保持与时俱进

Beyonce �� �� (she’s the Queen Bee).
Pizza rat �� ��
ayy lmao ��

当然,还有很多用法我们还不了解。

不仅是表情符

考虑到Dango是通过表情符进行训练,一开始会感觉它能够理解的概念范围很小——在Unicode编码中表情符是有标准的1624 emoji。这个数量对前端设计者来说显得相对较小,是一个令人头痛的问题。

然而,者并不意味着只有1624种含义。当你使用表情符时,他们的含义会由使用的上下文环境决定,含义会变得千差万别。��可能表示“击掌”、“感谢”或者“求求你”。 ��……当然只能表示茄子。表情符组合能够表示一些新的含义。��表示亲亲,但是���� 就表示吹口哨,而 ���� 表示抽烟。这些表情组合会变得非常复杂:

看牙医 �� �� ��
堵在路上了 �� �� �� ��

这些用法表明,Dango能够表示的概念远比单个的表情符丰富。这就厉害了,因为这样Dango就能够超越Unicode标准的定义理解更多的概念。

Dango因此还能够提示贴纸和GIF。Dango能够知道滚出去�� �� ��,当然也就可以给出GIF:

滚出去

更进一步

让我们更进一步了解背后的机制。

最原始的提示方法(也是Dango一开始使用的方法),直接把一些单词与表情符对应:披萨��,狗狗��,等等。但是这种方法非常有限,并且不能够表达表情符(语言)实际的用法。有很多实际的例子可以说明,单词的组合根本无法通过简单的对应来表示:

我的女朋友离开了我 ��
你懂了 ��✊
你知道的 ��
他就是我的另一半 ❤ ��
她答应了! �� �� ��

要处理这些用法,Dango采用了递归神经网络(RNN)。与自然语言处理、语音处理和金融时间序列分析不同,RNN是一个特殊的神经网络架构,能够很好地处理顺序输入。下面我们会快速地了解一下RNN是什么,要深入了解请阅读Andrej Karpathy对RNN很棒的介绍

RNN通过内部状态记录处理顺序输入。所谓内部状态是一块内存,可以跟踪之前输入的内容。这样就可以很好地知道“我很高兴 �� �� �� ”与“我不是很高兴 �� �� ��”之间的区别。

多个RNN能够彼此堆叠:每个RNN层接收顺序输入并转换成一个新的、更加抽象的表达形式,作为下一层的输入。如此循环。递归神经网络的层次越深,他们能够处理的功能就越复杂。顺便说一句,现在最流行的“深度学习”就是来自这里。像机器视觉这种难题的重大突破,一部分功劳就是由于使用了更深层次的神经网络。

Dango的神经网络最终演变成了数以百计的数字列表。这些列表可以理解为一个高维空间,就像可以用x-、y-、z-的3歌数字表示一个三维空间的点。

在所谓的高维语义空间里,各种语义都对应到空间中不同的点。在这种空间里,意思越相近点的距离也离得越近。深度学习先驱Geoff Hinton把这些点形象地成为“思维向量(thought vector)”。Dango在训练的过程中所作的,就是在这个语义空间里把自然语言和表情符转换为单独的向量。

当Dango处理文本时,就可以将它们在语义空间里进行映射。当要确定提示哪个表情符时,会把每个表情符向量投射(Project)到对应的句子向量。投射(Projection) 是一种对连个向量相似性的简单度量。Dango会选择投射结果最长的表情符——这些就是与输入文本含义最接近的结果。

语义空间的可视化 ������

对于我们这样的视觉动物,空间隐喻(spatial metaphor)是一种非常强大的工具。它能够帮助我们根据直觉谈论神经网络。(在Whirlscape,我们都沉迷于空间隐喻;可以参见之前的帖子Minuum键盘算法)。

为了对Dango的语义空间可视化,我们使用了一种流行的高维空间可视化技术,所谓的 t-distributed stochastic neighbour embedding 简称t-SNE。这项技术试图将高维空间的店映射到二维空间,并确保在原来的空间中接近的两个点在二维空间中也接近。尽管这种映射不够完美,但还是提供了很多信息。让我们使用t-SNE来把语义空间中的表情符可视化:

可以注意到,在这个空间里相似的表情符会自动聚集在一起。例如,大多数面部表情都聚集在“脸部半岛(Face peninsula)”。与高兴相关的面部表情������聚集在一个区域,与愤怒相关的表情 ������ 聚集在另一个区域。所有心形的表情都聚集在“爱情点(Point Love)”的顶峰。

在图形的尾部你可以看到其它有趣的分组:����⚾⚽ 彼此非常接近,带头发的面部表情 �������� 与没有头发的表情相距很远(这就是为什么他们想要出去约会吗?)。图形尾部附近可以看到旗帜和一些很少用到的表情符,比如文件柜和快进指示。

当然,Dango不会区分具体的含义,比如心形、啤酒或农场的动物。Dango是根据Web上数以亿记的真实例子训练结果生成的这个语义地图。那么,这里的训练指的是什么?

在训练前,神经网络处于 初始化 状态,一组随机值。也就是说,基本上可以看做从零开始。输入的句子会随机映射到语义空间,在这个空间里表情符也是随机分布的。

为了训练神经网络,我们定义了一个目标函数。这是一种为给定示例进行网络性能的分级方法,分数越低性能越好。接下来,我们使用了一种非常简单的所谓梯度算法。随着每一次的训练,梯度算法都会修改神经网络数百万个的参数,朝着能够减小目标函数结果的方向调整。

在GPU对这个过程进行若干天的运算后,目标函数已经没有改进的空间——这时Dango已经训练完毕,整装出发!

语言的未来

语言正朝着可视化迈进。尽管Dango是通过密集的劳动让它们朝着高级的方式发展,但表情符、贴纸和GIF正在爆发性增长已成为不争的事实。一些表情符的死忠为每个场景都创建了自己的表情集合,并且熟记每个表情符在键盘上的位置。其余的大多数还是在“常用表情”里选择,有时也会转发一些GIF。

随着科技的发展,可视化语言也在日益成熟。这种共生关系会一直持续,新技术催生新的语言,反过来语言也会促使技术进步。未来的交流会提供最适合你的人工智能工具,帮助你无缝编制图片和文本。Dango自豪地站在潮流的前沿。

希望你不仅仅喜欢我们的产品,更能够受到底层机制的启发。你可以想象,你的每一个句子都漂浮在语义空间的某个地方,周边围绕着数以百计的表情符。也许你会开始自己使用神经网络。请让我们知道!

当然,也请一定尝试一下Dango,期待您的反馈。当你脑中出现这样的问题:我要使用哪个表情符? Dango会给你答案。

求下载! �� �� ��

原文:Teaching Robots to Feel: Emoji & Deep Learning
作者: getdango.com
译者:赖信涛
责编:钱曙光