图片来源: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层,可以遍历一个词汇树,比之前遍历一个词汇列表更加高效。