谷歌昨晚在加州召开了 2018 年度的开发者大会(Google I/O 2018)。在大会介绍的 Android P、Gmail、Gboard、TPUv3 等众多新产品和功能中,尤为亮眼的无疑是个人助理 Google Assistant 中新增加的 Duplex,它可以自己给饭馆、发廊等商业店面打电话,帮用户预约时间。
在这两则真实电话录音中,Duplex 不仅用自然流畅的语音和电话另一头的人类完成了交流,对方根本没有意识到打电话来的居然是个「AI」。而且第二则录音中它还成功地处理了意料之外的发展状况,不仅理解了「无需预定」,还主动询问了等位的时间。
根据谷歌 CEO Sundar Pichai 介绍:他们未来还计划进一步拓展 Duplex 的询问营业时间的能力,有一个用户的 Google Assistant 打电话询问了某家店面的营业时间,就可以把这个询问结果同步给更多别的用户。不仅节省了用户/消费者自己查询的时间,也为店家节省了时间。
实际上,这也是谷歌对 Google Assistant 的设计宗旨:为用户节省时间,为用户把事情搞定(get things done)。谷歌也同步在 Google AI 博客上更新了 Duplex 的技术细节。
Google Duplex:能打电话完成真实世界任务的 AI 系统
长期以来,人类和计算机之间交互的目标都是希望两者之间可以进行自然的对话,就像两个人之间讲话那样。
近几年来,计算机理解和生成自然语音的能力出现了革命性的提高,谷歌语音搜索、WaveNet 之类基于深度神经网络的技术功不可没。
即便如此,当前最先进的人机对话系统仍然只有生硬的电子声音,而且也不理解人类的自然语言。具体来说,自动呼叫系统即便只是识别简单的单词和控制指令都不令人满意,更不用说跟人进行自然的对话了。打电话的人需要调整自己的说法方式来适应系统,系统却没办法适应打电话的人。
而今天发布的 Google Duplex 就包含了新的技术,它可以打电话给人类,通过自然的对话完成一系列真实世界的任务。这项技术目前针对的是执行一些特定的任务,比如:为某几类活动约定时间。
在这些任务中,Duplex 能让对话过程尽可能地自然,电话另一头的人类可以像和另一个人说话一样自然地交流,无需做任何调整(实际上对方可能根本就没有发现这通电话不是人类打来的)。
在这项技术的研究中,一个重要的研究要点是把 Duplex 的功能限制在封闭的场景中,这些场景涵盖的内容足够少,以至于 AI 系统可以充分地探索学习。
相对应地,Duplex 经过这些场景的深入训练后,也就只能执行这些场景内的自然对话任务,还不能和人进行一般的对话。
不过,根据开头的视频我们已经感受到了,在这些任务中 Duplex 带来了令人惊喜的表现,对话过程对人类来说非常舒适。
如何展开自然对话
展开一段自然的对话有这么几个难点:自然语言难以理解,人类的自然行为很难建模,人类对延迟的耐受性很低所以需要高处理速度,以及生成听起来自然的语音,其中还要适当地夹杂一些语气词。
当人类和人类之间对话的时候,相比于与计算机对话,他们会使用更多的复杂句子。他们经常一个句子说到一半然后更正一部分表述,会啰啰嗦嗦的,会依赖上下文然后省略一些单词,还有时候会在一个句子里表达好多个意思。
比如:「星期二到星期四我们从上午 11 点开门到下午 2 点,然后下午 4 点到 9 点重新开门,然后星期五六日我们,哦不对,星期五星期六我们 11 点开门到 9 点,星期天 1 点到 9 点。」
在天然的、自发的对话中,相比与计算机讲话,人类会讲得更快、讲得更不清晰一些,这时候的语音识别也更难,单词错误率更高。在打电话的时候这个问题会更明显,经常会遇到背景噪音,通话质量也不好。
在较长的对话中,根据上下文的不同,同样的句子也可以有不同的含义。比如:「ok for 4」在预订座位的时候就有可能指人的数目,也有可能指时间。相关的上下文句子可能会在好几个句子之前,而受到电话中单词错误率的影响,这个问题又会变得愈发难解。
识别了对方的语义之后,AI 系统要说的内容,就是由当前要执行的任务和对话进行的状况共同决定的。除此之外,自然语言的对话中还有一些常见的语言习惯。
这些约定俗成的句法模式包括:重复时说得更详细一些(-「时间是下周五。」-「什么时候?」-「下周五,18 号。」),同步语句(「你听得清吗」),打断(-「数字是 212…」-「对不起你能重新说一遍吗」),以及停顿(「你可以稍等一下吗 [停顿] 谢谢!」,1 秒的停顿和 2 分钟的停顿又有不同的含义)。
认识 Duplex
借助语言理解、交互、时间控制、语音生成方面的最近技术发展,Google Duplex 的对话听起来相当真实自然。
为了处理上面提到的挑战,Duplex 的核心是一个 RNN 网络,它是由 TensorFlow Extended(RFX)构建的。为了达到高精度,谷歌用匿名的电话对话数据训练了 Duplex 的 RNN 网络。
这个网络会使用谷歌自动语音识别(ASR)的识别结果文本,同时也会使用音频中的特征、对话历史、对话参数(比如要预订的服务,当前时间)等等。
谷歌为每一种不同的任务分别训练了不同的理解模型,不过不同任务间也有一些训练语料是共享的。最后,谷歌还利用 TFX 的超参数优化进一步改进了模型。
输入语音先经过自动语音识别系统(ASR)处理,生成的文本会与上下文数据以及其它输入一起输入 RNN 网络,生成的应答文本再通过文本转语音(TTS)系统读出来。
生成自然的语音
谷歌联合使用了一个级联 TTS 引擎和一个生成式 TTS 引擎(其中使用了 Tacotron 和 WaveNet),根据不同的情境控制语音的语调。
这个系统还可以生成一些语气词(比如:“hmmm”、“uh”),这也让语音变得更自然。当级联 TTS 需要组合变化很大的语音单元,或者需要增加生成的停顿时,语气词就会被添加到生成的语音中。
这就让这个系统可以以一种自然的方式向对方示意“是的我听着呢”或者“我还在考虑”(人类说话的时候就经常在思考的同时发出一些语气词)。谷歌的用户调查也确认了人类觉得带有语气词的对话更熟悉、更自然。
另一方面,系统的延迟也要能够符合人类的期待。比如:当一个人在电话里讲了“你好”这样的简单句子之后,他们会希望很快听到一个简短的回复,这种时候会对延迟更加敏感一些。
当 AI 系统检测到了需要短延迟的情境时,就会使用更快但精度也更低的模型来处理。在某些极端情况下,系统甚至都不会等待 RNN 运行,而是直接使用快速逼近模型(通常也会和更慢的正式回应搭配起来使用,就像人类不完全理解另一方的时候会犹豫一样)。
这样的做法就可以让系统达到 100ms 之内的极短延迟。有趣的是,谷歌发现在某些情况下要增加一些延迟来让对话听起来更自然,比如回复一个很复杂的句子的时候。
系统运行
Google Duplex 系统可以进行复杂的对话,它可以完全自动地完成大多数任务,不需要任何人类参与。系统也有一个自动监控机制,不仅成功完成一个任务后可以给用户弹出提醒,也可以识别出没能成功完成的任务(比如:处理某个异常复杂的预订)。
在这种情况下,它会给一个人类操作员发出指令,转交给人类完成任务。
为了在训练系统处理新的情境,谷歌也使用了实时监督训练。这种训练方式和许多事情的教学方法类似,都有一个教学者指导一个学生,边做边提供必要的指导,确保任务的执行效果达到了教学者的质量要求水平。
在 Duplex 系统中,有经验的人类操作员就可以作为这样的教学者,当系统打电话处理新的、不熟悉的情境时,人类操作员就可以实时影响系统的行为。这样的边做边学的过程可以一直持续到系统达到了理想的表现为止,然后系统就可以全自动地打电话了。
有益于用户,也有益于商家
许多商户并没有自己的在线预定系统,仍然使用的是在线预定。Duplex 就可以帮助他们,无需改变每日的行为惯例或者培训员工,就可以让用户通过 Google Assistant 轻松完成预定。
Duplex 也可以减少用户放鸽子的情况,可以在手机上自动提醒用户预订事项,以及帮助用户轻松地取消或者重新安排时间。
也有一些情况下,用户会打电话向商户询问营业时间,比如:节假日期间的营业时间,一般在店铺的在线信息页面是看不到的。
Duplex 打电话询问之后可以通过谷歌服务把这个信息公开出去,省去了其它用户打同一个电话、问同样的问题的精力,也帮商户节省了人力。
同时,商户自己就像往常一样正常营业就行,这项新技术并不需要他们学习任何技能或者做任何改变就可以享受到便利。
对用户来说,Google Duplex 当然可以帮助用户轻松地完成它支持的各种任务。用户只需要和 Google Assistant 做简单的互动,Duplex 就会自动在后台打电话,并且自动补全所需的用户信息。
用户让 Google Assistant 做个预约,Google Assistant 接下来就会通过 Duplex 打电话与商户完成预约
Duplex 还能给用户增加一项便利,那就是可以非同步地作为服务提供商的代理,比如:在非营业时间给商户打电话,或者手机信号不好的时候,Duplex 在这种情况下就成为了一条额外的信息获取途径。
它也可以帮助残障人士或者语言不通的用户,替听力受损的用户打电话完成预约,或者替用户用另一种语言完成任务。
今年夏天,谷歌就会开始基于 Google Assistant 测试 Duplex,就从预订餐馆、预订发廊、询问节假日的营业时间这样的事项开始。
Google Duplex 团队负责人 Yaniv Leviathan 和 项目工程主管 Matan Kalma 在餐厅吃饭,这顿饭就是 Duplex 打电话为他们预订的。
一直以来,让人们可以「像人与人互动一样自然地与科技互动」都是谷歌的目标。Google Duplex 就是迈向这个方向的一步,在特定场景下以自然的对话让人和科技互动。
谷歌希望这些具体技术的发展,也可以为人类和计算机的日常互动带来更有有意义的改进。