近年来,随着人工智能技术的逐步落地,很多智能化的产品进入了人们的日常生活。2011年苹果公司在iPhone4S手机上推出了一款里程碑式的智能产品“Siri”,用户只需要通过对手机说一些指令,手机就可以自动完成很多操作。我们最常用的场景莫过于对着Siri说“帮我设置明天早上六点的闹钟”,而Siri会理解我们的指令,把手机上的闹钟设置好,并且回答我们“好的,已经把闹钟设置到了明天早上六点”。我们是否想过这样一个智能产品是如何设计与开发出来的呢?本系列博客就将带你揭秘智能语音助手背后的技术。
从场景开始
智能语音助手看似智能,其实是很傻瓜的,因为它只能应对设计好的有限场景,所以要让它能够完成用户日常使用智能手机的常用操作就需要设计一个又一个的场景,我们来看一个比较简单的场景:
用户:设置闹钟
Siri:请问您需要设置几点的闹钟?
用户:明天早上六点的
Siri:好的,已经把闹钟设置到了明天早上六点
在这个场景下,Siri是如何听懂用户的指令的呢?又是如何识别出用户的指令就是设置闹钟这样一个意图呢?就算它知道了设置闹钟,又是怎么就知道向用户确定设置的时间的呢?用户提出的具体时间Siri又是怎样理解的呢?
背后的技术
语音助手背后的技术由三大块组成:语音识别(Auto Speech Recognition)、语义理解(Semantic Understanding)、语音合成(Text To Speech)。语音识别将用户所说的指令转换成文本文字,而语义理解则是基于文本文字去理解用户意图,做出相关响应和操作,并且输出反馈给用户的答复文本,最后语音合成再将答复文本转换成为语音输出。
其中,语义识别和语音合成都是成熟的通用技术,只要语言确定了(普通话或英语)就能使用通用的模型识别成文字或合成语音。而语义理解却需要定制,毕竟不同的应用场景需要进行的理解与交互操作是不同的。
语义理解是核心
目前,已经有百度、科大讯飞等公司开放了语音识别与合成的接口,所以我们可以把构建一个语音助手的核心聚焦在语义理解上,如上图所示,语义理解又可以再拆解为几个核心的子技术点:
- 自然语言理解(Natrual Language Understanding): 理解用户的意图并提取有用的信息,比如:识别设置闹钟的需求,提取出闹钟需要设置在“明天早上六点”的关键信息
- 对话管理(Dialogue Management): 管理和控制语音助手与用户进行交互的逻辑,语音助手听到一个指令后应该执行怎样的动作或回复怎样的响应
- 自然语言生成(Natrual Language Generation): 针对用户的指令,生成灵活自然的语音助手的回复
一步步实现
接下来,我们将一步一步地去实现一个简单的语音助手(不包含语音部分),我们将在本系列博客的后续部分逐步展开每一步的设计与实现。在语音助手中NLG是非常固定的,通常都是预定义的表达模式,所以我们在实现过程中将弱化这部分的内容,只在最后一节介绍一些前沿的NLG技术。对话管理我们将使用开源的工具OpenDial来实现,而NLU我们将采用产业界普遍使用的模板匹配方法。所以,后续文章将组织为:
- 使用OpenDial实现对话设计:我们将介绍一款开源工具,并使用它作为对话管理的控制器
- 模板匹配方式的NLU:介绍一种常用的基于模板匹配的自然语言理解方法,通过对模板中的槽位进行填充实现意图的识别与信息的提取
- 更高级的方法与技术:简单介绍一些对话与聊天机器人中的前沿技术