开发必读!语音交互能力构建的关键与难点

10月11日,在2019全球1024开发者节临近之际,智东西公开课联合科大讯飞推出超级公开课科大讯飞专场,主题为《如何为不同硬件产品快速构建语音交互能力》,由讯飞开放平台技术支持经理汪舰主讲。

汪舰老师从语音交互流程展开讲解,并对语音识别、语义理解、语音合成、麦克风阵列等语音交互关键技术进行了深度解析;最后汪舰老师从智能家居场景出发,为我们分析了不同硬件产品构建语音交互能力的关键所在及解决办法。

本文根据公开课直播讲解整理而来,共计6400余字,预计读完需要10分钟,提纲如下:

1、语音交互流程解析
2、语音交互关键技术的应用现状与难点
3、不同硬件产品语音交互能力设计思路与解决方案

主讲实录

汪舰:各位智东西公开课的小伙伴,大家好,我是科大讯飞开放平台技术支持经理汪舰,今天很高兴有机会和大家一起分享我对人机语音交互的理解和心得。

从《星球大战》、《钢铁侠》这样的科幻大片,到苹果的siri、微软小娜这些语音助手,再到各种语音输入法、语音遥控器等,人机交互已经从遥不可及的梦想变成了现实,甚至我们已经在日常生活和工作中进行使用。

语音交互流程解析

开发必读!语音交互能力构建的关键与难点

首先给大家简单介绍一下人机语音交互的基本流程。

从这张图片大家可以看到传统的人机语音交互链路是非常短的,也非常简单,主要包括语音识别、语义理解和语音合成三个单点技术。语音识别就是把语音变成对应的文字;语义理解就是对识别出来的文字进行语义的理解,提取出说话人想要表达的意思和意图;语音合成就是对说话人的意图的执行和回应。这就是最简单的人机交互链路。

但是在实践过程中我们也越来越发现,有很多用户场景的需求基于传统的人机交互链路的解决方案是无法满足的,带来的体验感非常差,甚至会导致用户对语音交互失去信心。

下面是当下比较主流的,也是相对体验感较好的一类人机交互链路。

开发必读!语音交互能力构建的关键与难点

从这张图片可以看出,目前整体的交互流程已经比较复杂了,除了有之前的语音识别、语义理解和语音合成外,还增加了语音唤醒这个统一的交互入口。

同时在语音识别过程中也添加了更多的后端支持,包括端点检测、回音消除、声源定位、降噪等,也会从云端的知识库中拉取个性化词库来帮助我们在识别阶段准确识别一些专有名词;

语义理解部分也比之前要复杂得多,它要处理一下无效指令,因为麦克风会无差别的录入环境噪音,或者是用户的非交互状态下表达的内容,语义识别系统需要把无效指令提取出来并忽略掉,我们称为无效拒识;对于正常的语音识别,能够支持上下文信息的关联,包括内容管理、对话管理等;

在语音合成部分,我们也发现用户对机器的声音要求越来越高,用户希望机器发出来的声音是带有情感的,能够迎合用户的需求,而这些情感信息是通过语义理解系统输出来的。比如我们能够分析出用户的这句话其实是表达生气和责备,语义理解把情感音素提取出来后,会把信息传到语音合成模块,语音合成模块拿到这个信息之后,会拿一个相匹配的音色和语气进行合成。

开发必读!语音交互能力构建的关键与难点

现在我们看一下全双工交互。现实生活中,人和人之间的交流和交互就是一个典型的全双工交互场景,而这里的全双工最主要的特征有三点:持续、双向、可打断。

持续其实很好理解,在传统的交互模式中,一次唤醒对应一次识别,也就是说每次的交互都需要喊一下对方的名字,比如:“张三张三帮我查一下天气”、“张三张三帮我订一张机票”,但是人和人之间的说话不是这样的,我如果想找某个人说话,最多只会喊一次他的名字,接下来的交互就是持续的。因此这里持续交互的意思是:我的交互在最开始的入口就只有一次唤醒,在接下来一段时间内,我可以进行多次交互,即在这段时间里整个识别进程是在持续循环进行的。

这里涉及到一个底层技术点叫模型VAD (Voice Activity Detection),又称语音端点检测或语音边界检测,大家可以理解为智能断句。算法需要能够准确的判断从哪里到哪里是一句完整的话,从哪里到哪里又是另外一句话。

但是传统的断点检测其实是基于声音的能量维度去判断的,主要有两个缺点:无法解决噪声和无效语音、对说话人的要求比较高;在说话的中间不能有停顿,长时间停顿时一句完整的话可能就会被切开,一句完整的话就会变成两句,造成到后面整个识别过程都是乱的。VAD的端点检测可以过滤掉环境声音的干扰,只关注人的声音,这个人的声音就是一种人的声音模型,所以这里我们叫做模型VAD,用来区分以前的能量VAD。

双向,即我说话的过程和机器回答我的过程是同时进行的。根据前面对整个交互流程的介绍,可以发现从说话录音到断句识别、到语义理解再到结果的回传和播报,整个过程其实是像流水一样持续循环进行,因此整个的交互过程是双向的。

可打断,就是在任何时候说话不用等上一轮的交互完全结束,随时想说就可以说。最典型的应用场景就是智能音箱,比如我说:“播放周杰伦的《晴天》”,然后音箱就开始持续地播放这首歌,在播放的过程中,我随时可以说 “下一首”来进行切歌,而不用等它把一整首歌播放完。

这里涉及到一个底层的技术点叫回声消除,这里的回声其实不是指物体反回来的人的声音,而是指机器自身发出来的声音。在识别这样的场景里,识别系统是不需要关注机器自身发出来的声音的,需要通过一些硬件层面的技术把机器自身发出来的声音过滤掉,让识别系统只能听到人说话的声音,比如上面这种音箱场景,如果没有回声消除你就算喊破喉咙,音箱也不会理你,因为音箱里面的喇叭和麦克风的实际距离可能只有几厘米,在这种情况下它是听不见你说话的。

语音交互关键技术的应用现状与难点

开发必读!语音交互能力构建的关键与难点

我们在使用语音交互产品的的过程中一定会或多或少遇到一些问题,比如感觉语音交互不够智能、体验不够流畅、响应比较慢、周边的环境稍微嘈杂一点识别率会明显下降、跟机器人说话必须离的很近等,而这些交互痛点正是我们需要去解决的。

下面我将分别从语音识别、语音合成和语义理解等方面详细介绍下我们在语音交互方面都做了哪些工作。

开发必读!语音交互能力构建的关键与难点

这张图片展示的就是语音识别的流程,首先是声音的输入,这个声音需要经过一些预处理,比如端点检测、降噪、回声消除等,让处理过后的声音信号能够更加真实地反映语音的状态;然后进行声音的特征提取,因为在整个语音中有很多的特征是语音识别并不关注的,所以我们只会把关注的语音特征提取出来,提取到关键特征后,就会进入真正的语音识别(或者称为模式匹配的)过程。

首先进行的是声学模型的匹配,它输入的是前面得到的语音特征,输出的是一个发声的信号,即声学模型能够把这些特征转化为发声信息,如图中声学模型部分所示,可以看到它有点类似于拼音的音标。拿到这样的发声信息后,再到语言模型,比如到中文的语言模型中去查有哪个词或者字是最匹配这样的发声特征的。最后得到的识别结果就是“科大讯飞”。

开发必读!语音交互能力构建的关键与难点

上一张图片我们讲到的特征提取其实可以把它简单地理解为这张图片中的语谱图。我们认为每一种发声对应的语谱图形状都是不一样的,是有自己独特的特征的,可以根据特征匹配出它的发音,然后再匹配出对应的文字。

所以语音识别的核心就是声学模型和语言模型模式匹配的过程,为了便于大家理解,接下来我会通过上个世纪比较流行的HMM(Hidden Markov Model,隐马尔可夫模型)模型,来简单说一下模式匹配的原理。

开发必读!语音交互能力构建的关键与难点

假设小明是一个在深圳工作的算法工程师,他有个习惯就是每天都会通过女朋友圈观察她的活动,还有一个假设就是他从来不会去看天气预报。他的女朋友是在北京上学,每天都会根据北京当天的天气状况来规划她当天的活动。为了简化这个模型,我们规定她只有购物、散步和宅在宿舍三种活动,我们再假设他女朋友每天都会通过朋友圈去晒自己的活动。

开发必读!语音交互能力构建的关键与难点

根据前面的故事背景介绍,我们可以抽象出这样一个HMM模型,红线上半部分就是小明可观察到的状态,通过朋友圈能够看到他女朋友到底是购物、散步还是宅在宿舍。红线以下是隐藏状态,是小明无法直接观测到的,但是根据我们的经验可以知道北京当天的天气状况是能够影响到他女朋友的活动的。

这里我们又做了一系列的假设,如果当天是多云的天气情况,他女朋友去购物的概率是0.3、散步的概率是0.1、宅在宿舍的概率是0.6。我们又认为第一天的天气和第二天的天气之间有一定的关联关系,也就是有概率转化的关系,最终就可以得到这张图片中的整个的假设条件,也就是最终的HMM模型。

开发必读!语音交互能力构建的关键与难点

那么问题来了,已知这样的一个故事背景,也就是整个的HMM模型还有连续三天的天气,连续三天,我们能够观察到他女朋友所做的活动,依次是散步、购物和宅,那么他女朋友让他猜这三天北京的天气分别是什么样的?换句话说就是这三天北京什么样的天气可以最大可能的导致他女朋友去做这三样活动。

这个看起来比较复杂的问题在计算机眼里其实是非常简单的,这张图片右侧的维特比算法其实已经非常老了,在很久之前我们就已经得到了一个效率非常不错的解决办法。下面我给大家讲一下前面讲的这个故事跟语音识别有什么关系。

我们完全可以把可观察状态和隐藏状态映射成语音识别的输入的语音信号以及语音识别系统输出的文字信号,它们是完全对应的关系。一个文字的发音其实是有一定概率呈现出上面这三种不同的声音波形,这种概率的转换关系和天气对于小明女朋友安排活动的影响,其实是完全一样的。

开发必读!语音交互能力构建的关键与难点

如上图所示,再举一个例子,假设要计算出连续三个声音信号背后到底是什么样的文字内容很简单,我们只需要把“是十四”和“四十四“两个候选结果的概率算出来,概率最大的那一个就会被作为波形的识别结果。

开发必读!语音交互能力构建的关键与难点

为了让语音识别能够匹配到更多的用户场景,我们对语音识别进行了一些特色功能的拓展,来增强它的适应性。比如我们做了一个中英混合识别模型,在这样的模型下,你中英文混杂着说,它也能够准确识别;我们还做了一个动态修正的效果,即在说话过程中,实时展示识别结果,同时结合上下文语义,对结果进行二次修正;还支持用户自定义热词,来提高识别引擎对专有词汇的识别率,比如你的联系人、某些领域的专有词汇等;另外我们也拓展了越来越多的方言和语种,目前讯飞系的识别系统最多可以支持24种方言、7个语种。

开发必读!语音交互能力构建的关键与难点

语音合成的过程相对于语音识别刚好是相反的,它的输入是文字,输出是对应内容的音频。我们主要从表现力、音质、系统的复杂度、合成音频听起来的自然度四个维度去评判一个语音合成系统性能的好坏。

语音合成的历史相对于语音识别要长很多,已经有超过200多年的历史。最开始人们考虑怎么让机器发出像人一样的声音,主要有两个不同的学派,一种认为可以造一台和人的声学结构完全类似的机器去发出与人类似的声音;另一种认为完全没必要做的这么复杂,把说话人的声音录下来,对录音按字、按音素裁剪成一个个单元,然后根据需要合成的文本进行排列和拼接。

从目前的发展情况来看,历史已经证明第二种方式是通用性最好的,也是现在主流的合成技术采用的方式。

现在的语音合成主要包含两部分,首先制作一个音库,需要有说话人进行录音,然后对质量较好的录音进行裁剪,裁剪完之后将对应的音素音节存储到对应的单元中。

这个技术之所以到现在才流行起来,一定程度上是因为不管任何一种语言他的音素、音节实在是太多了,在计算机出现之前我们很难找到一个系统来存储和计算这样的排列和音素的拼接。

下面我们来看一下完整的语音合成的过程:

开发必读!语音交互能力构建的关键与难点

首先,它的输入肯定是文本,文本输入进来后不会立马拿去合成,会先按照字典规则进行语言处理,主要就是进行断句。这里举了一个比较典型的例子,就是“武汉市长江大桥”,我们都知道如果在第一步断句有问题的话,后面的合成肯定是错的,它的停顿、韵律肯定是不符合我们预期的;之后是韵律的处理,需要要规划整个合成语音的音阶、音高、音长、音强等因素,使合成的语音能够正确的表达说话人所要表达的意图,听起来更加自然;最后根据前两部分处理的结果,找到对应的音素单元,提取出来进行拼接,拼接完后进行一个简单的处理就可以输出合成的语音了。

语音合成应用场景也很多,比如如读书APP、导航播报、进行人机交互的语音机器人等,另外也可以帮助视障人士进行特殊的阅读。

接下来一起来看下整个语音识别的最前端,也就是声学处理部分。

开发必读!语音交互能力构建的关键与难点

在远场交互中需要麦克风阵列来提高录音质量,从上图可以看到一个四麦的线型麦克风阵列,首先需要提取出说话人的方向,也就是声源定位,然后对对应方向的声音进行波束加强,对其他方向的声音波束进行抑制,从而提高说话人的说话信号的信噪比,保证语音识别的准确率。

开发必读!语音交互能力构建的关键与难点

这张图片展示的是一个六麦的环形麦克风阵列,它相比于线性阵列能够做到360度的声源定位,能够达到最大拾音距离比线性的要更长一些,另外它的声源定位角度的精度也比线型麦克风阵列高很多。

不同硬件产品语音交互能力设计思路与解决方案

下面进入今天的第三个部分,我将从两个硬件场景出发,来思考这两个场景对于硬件设计、语音交互设计提出的一些问题和解决办法。

开发必读!语音交互能力构建的关键与难点

首先是比较简单的手持终端,包括语音遥控器,另外一个相对复杂的智能家居场景。

手持终端的语音交互是相对简单的,它最大的特点就是近场交互,同时一般情况下这类手持设备的控制是仅限于该设备本身,不需要通过云端的物联网来控制其他的关联设备。

开发必读!语音交互能力构建的关键与难点

需要说明一下,这里讲到的电视语音遥控器对于电视的控制,我认为它是不属于物联网范畴的,因为对于智能电视来说,语音遥控器扮演的角色仅仅是一个录音的终端,所有的识别和计算的工作全部是电视本身来配合云端服务进行处理的。

除了以上的特点之外,我们发现不管是智能手机还是智能电视,都有很成熟的硬件和操作系统支持,针对这些操作系统,包括讯飞在内的许多云服务厂商都有提供一整套的SDK接口,利用这些SDK的接口,大家可以非常快速的完成语音交互系统的集成和开发工作。

另外从我个人的知识经验来看,对于这类手持的应用场景,有很多用户是可以接受手动的按钮唤醒的。虽然现在语音唤醒整体的唤醒率已经达到95%左右,但是按键唤醒具有近乎百分之百的可靠性。所以在这种情况下,如果去除了语音唤醒之后,整个语音交互流程的复杂度会进一步降低。

开发必读!语音交互能力构建的关键与难点

从这张图我们能够看到个人终端场景下整个语义交互的大体流程,首先用户使用一个集成了语音SDK接口的个人终端,通过SDK进行语音唤醒,然后进行语音识别、语音合成等操作,这些能力也可能来自于第三方。识别完之后,会以文本形式输入到技能平台,技能平台会得出对应的文本所包含的说话人的意图,并输入到交互平台,进行能力的调度和对话内容的处理,最后会进入到内容平台。

为了便于大家理解,这里举一个比较简单的例子,假设说话人利用语音终端去查询天气,比如“明天北京的天气”,这样一段语音经过能力平台的语音识别之后会变成对应的文字,文字进入到技能平台后,我们会理解出来用户需要的是天气服务,然后会再到交互平台去查询天气服务的一个指令的命中,再到内容平台去查询北京当天的天气情况,并将天气情况会逐层的返回到用户终端,最后以声音的形式播报给用户。

第二个是智能家居应用场景,我们直接来看智能家居场景下语音交互的流程。

开发必读!语音交互能力构建的关键与难点

用户利用家居的中控进行说话,说话的声音进入到语音识别系统之后,变成对应的文字,文字送入到技能平台,分析出说话人的意图,紧接着说话人的意图会进入到物联网平台,物联网平台能够接受技能平台所输出的控制指令,比如要控制的是家里的灯,那么物联网平台会把控制灯的指令再传给家里的灯的模块进行执行,然后执行完之后物联网平台会把执行的结果回传给技能平台,并逐层的返回给用户,最终用户感受的效果就是灯已打开、灯已关闭。

以上就是我今天分享的内容,谢谢大家!

完整回放

超级公开课科大讯飞专场全程回放包括主讲环节与问答环节两部分,扫描下方图片二维码,即可收听完整回放。

开发必读!语音交互能力构建的关键与难点