图片来源:PCM
编者按:谷歌在今年的I/O大会推出了一个大惊喜:由机器学习支持的Allo智能聊天应用。为何Allo能够如此讨用户的欢心?谷歌研究的Pranav Khaitan在谷歌博客上为我们解读了Allo背后的人工智能算法。Khaitan具有斯坦福大学计算机科学硕士学位,曾在斯坦福大学担任研究助理工作,并在微软、Facebook等公司实习。他2011年加入谷歌,目前带领团队进行机器学习、神经网络和个人化科技的工作,并帮助打造谷歌搜索等产品所需的知识图表,在谷歌搜索的几乎每个领域——排名、指数和基础建设——都能看到由他打造、发布的功能。
谷歌一直在打造由机器学习支持的产品,让用户的生活更加简单、美好。今天,本文将介绍一个全新智能聊天应用Allo背后的技术,该应用使用神经网络和谷歌搜索,让文字聊天更加简单、高效。
正如Inbox的智能回复一样,Allo能够理解对话记录,提供用户会想采用的回复建议。除了理解对话的语境之外,Allo还能理解你的个人聊天风格,因此可以实现个人定制的聊天回复。
图片来源:Google Research Blog
一年多以前,团队开始研究如何让对话可以更加简便、更加好玩。Allo智能回复的想法来源于团队中的Sushant Prakash和Ori Gershony,他们带领团队打造了这项技术。我们最初使用了一个神经网络进行试验,其模型架构之前已经成功应用在序列预测中,包括Inbox智能回复中使用的编码-解码模型。
我们面临的挑战之一,是在线聊天在回复时间上有很严格的要求。为了解决这个问题,Pavel Sountsov和Sushant想出了一个非常创新的两阶段模型。首先,一个递归神经网络一个字一个字地查看聊天语境,然后用长短时记忆(LSTM)的隐藏状态将其编码。下图展示的就是一个例子,语境是“你在哪?”语境有三个标记,每一个标记都嵌入到一个连续空间中,然后输入到LSTM里。然后,LSTM状态将语境编码为一个连续矢量。这个矢量用来生成作为离散语义类别的回复。
上图的例子中,最下方是输入的语境(“你在哪?“),黄色层为”文字嵌入“,蓝色层为”LSTM“,绿色层为”softmax函数“,最后输出”地点短语“,作为预测的回复语义。图片来源:Google Research Blog。
每一个语义类别都与它可能的回复库关联起来。我们使用了第二个递归神经网络来从这个回复库中,生成一个具体的回复信息。这个神经网络还将语境转换为一个隐藏的LSTM状态,但是这一次,这个隐藏状态是用来生成回复的完整信息,一次生成一个标记。我们回到上面的例子,LSTM看到了“你在哪?”的语境后,生成了回复:“我在上班。”
上图中,最下方是语境输入("你在哪?"),最上层softmax函数生成"我在上班。"来源:Google Research Blog。
从LSTM生成的大量可能回复库中,beam搜索能有效选择出顶层得分最高的回复。下图展示的是一个搜索空间的小片段,我们可以从中一窥beam搜索技术。
图片来源:Google Research Blog
正如任何大规模产品一样,我们面临了多个工程方面的挑战,高效生成高质量的回复库并非易事。举一个例子,虽然我们使用了这个两阶段的架构,我们最初的几个神经网络运行都非常慢,生成一个回复需要大约半秒钟。半秒钟听起来很短,但是针对实时聊天应用来说,这完全是没法接受的。因此,我们必须让我们的神经网络架构进一步进化,将回复时间再减少至少200毫秒。我们改变了softmax层,转而使用一个层级性的softmax层,可以遍历一个词汇树,比之前遍历一个词汇列表更加高效。
在生成预测时我们遇到的另一个挑战比较有趣,那就是控制信息的长度。有时候,所有可能的回复长度都不合适——如果模型预测的信息太短,可能对于读者来说就没有用;而如果我们预测的信息太长,可能就不适合手机屏幕的显示大小。我们的办法是,让beam搜索更偏向于跟进能够通向更高反应用途的路径,而不是倾向于选择最有可能的回复。这样,我们可以高效生成长度适合的回复预测,对用户来说会非常有用。
这项智能聊天建议最棒的地方在于,随着时间,软件会为用户进行个人定制,这样你的个人风格会在聊天对话中体现出来。例如,假设当别人和你说“你好吗?”(“How are you?”)的时候,你通常的回复方式是“蛮好。”而不是“不错。”(英文中某个用户可能更习惯回复“Fine.”而不是“I am good.”),软件就会了解到你的偏好,在未来的回复建议中就会考虑到这一点。要实现这一点,就要在神经网络中加入用户的个人”风格“,将这个神经网络用于预测回复中下一个词语是什么,这样回复建议就会根据你的个性和偏好进行定制化。用户的风格是在一系列数字中获取的,我们称之为用户嵌入。这些嵌入可以作为常规模型训练的一部分,但是这种方法需要等上很多天训练才能结束,而且如果用户超过了几百万人,这种方法就有可能搞不定。为了解决这个问题,Alon Shafrir打造了一项基于L-BFGS的技术,让Allo能够快速、大量地生成用户嵌入。现在,Allo的用户只需要很短的一段时间,就能获得个人定制化的回复建议。
我们之前说到的这个神经网络模型是不针对某种语言的,因此我们可以对每一种语言分别建立预测模型。Sujith Ravi为了确保每一种语言的回复可以从我们对其他语言的语音理解中获益,他提出了一种基于图表的机器学习技术,可以将不同语言的可能回复联系起来。Dana Movshovits-Attias和Peter Young将这项技术应用在一个图表中,对收到信息的回复,可以与其他有相似词汇嵌入和语法关系的回复联系起来。基于谷歌翻译团队开发的机器翻译模型,这个图表还能将不同语言中具有相似语义的回复联系起来。
利用这个图表,我们使用了半监督学习(点击链接,可以通过这篇Sujith Ravi发表在第19届人工智能与数据国际大会(AISTATS)的论文中了解更多关于半监督学习的信息)来了解回复的语义含义,判断哪一个可能的回复组群是最有用的。每一个可能的回复语义中都有多个可能的变种,现在我们可以让LSTM对每个变种进行打分,让个人化常规来为用户在聊天情景中选择最好的回复。这还能帮助实现多元化,因为我们现在可以从不同的语义组群中选择最终的回复库。
一个打招呼的信息图表可能会是这个样子的。左:法语,中:英语,右:中文。图片来源:Google Research Blog。
我非常期待Allo中的谷歌个人助理,你可以与它聊天,获得谷歌搜索上可以了解到的任何信息。它可以直接通过对话理解你的句子,帮助你完成日常任务。举个例子,你和朋友聊天的时候,谷歌助理可以在Allow应用内帮你发现有什么好吃的餐厅并预定座位。正是因为我们在谷歌进行了最尖端的自然语言理解研究,我们才能实现这项功能。更多细节信息将在未来发布。这些智能功能将于今年夏天晚些时候出现在Allo的安卓和IOS应用中。