而对于人机之间的交互,由于涉及到远场,环境比较复杂,而且无屏交互,如果要像人与人之间的交流一样自然、持续、双向、可打断, 整个交互过程需要解决的问题更多,AIUI为完成类人的语音交互,是一个需要软硬件一体、云+端相互配合的过程。
我们来看下交互的整个流程,从大的方面来说,还是以语音识别、语义理解、语音合成为主线,只不过每个过程需要解决更多的问题。
首先来看下 语音唤醒 ,唤醒是人机交互的主要触发方式,就像你要和一个人说话,就得首先喊一下这个人的名字,才能开始进行交流。而在交流的过程中,如果有其他人喊你呢,你也是需要响应的,需要支持持续唤醒。
机器被唤醒后,就需要知道说话人的方位,这样机器才可以做出更友好的响应,比如转身,移动等。只有明确说话人的方位后,才可以定向的拾音,做降噪处理,同时对说话人进行语音增强。这个 声源定位 和 语音增强 主要是用麦克风阵列的相关技术,下面会有详细解释。
在语音识别这个重要模块中,首先要解决的就是远场识别,通过上面提到的麦克风阵列和声源定位,可以较好的实现远距离拾音,解决噪声、混响、回声带来的影响。作为全双工交互,持续的音频流拾取,就要解决人声检测和断句问题,机器需要能够过滤无效语音,做出快速的反馈和响应。
人声和端点的检测不能只依赖于能量检测的技术方案,需要解决更为复杂的环境,具体怎么解决呢,下面再展开。
对于识别来说,首先要保障的是远场环境下的识别率,除了前面提到的麦克风阵列解决了前端声学的问题,还要有专门针对远场环境下,基于大量数据训练的声学模型,这样才能保证识别率满足交互需求。
除了云端的语音识别,端上的识别也是需要做的,需要云+端方式进行结合,这样才能满足复杂网络下的使用场景。不过端上主要是去做一些命令式交互,响应一些本地操作。比如关机、打电话、动作指令等。
本地不做成无限制的响应呢,因为对于很多的用户意图来说,是需要基于网络去获取内容的,所以本地只做辅助使用,是为了解决一些复杂网络环境所做的手段。这个地方的难点是需要做好云和端的PK策略,需要基于置信度、响应时间等信息来综合决策。作为持续的语音交互,不可避免要吸收很多无效的语音,拒识成为必须,否则会造成对话的混乱和无意义的响应。
对于支持多轮的交互理解,语义引擎不再是无状态的,系统更加复杂,需要有对话管理、历史信息存储等模块。语义理解不只包含用户说话意图,还要包括内容的获取,这样才能在接下来的端点检测、语音识别等交互过程中,共享信息,做到场景自适应,以提高准确率。
完成语音识别和语义的理解后,机器需要通过语音合成,把信息传递给用户。合成这一块没有太多需要展开的,讯飞提供了几十种不同的发音人,而且支持不同情感进行朗读,至于该以何种情境、情感进行播报,这是在语义理解中需要给出的信息。 相比传统的交互,现在的流程会看起来复杂很多。
功能:远场识别、全双工、多轮交互
远场识别
远场识别,需要前后端结合去完成,一方面在前端使用麦克风阵列硬件,通过声源定位及自适应波束形成做语音增强。在前端完成远场拾音,并解决噪声、混响、回声等带来的影响。
不过这还不够,因近场、远场的语音信号,在声学上有一定的规律差异,所以在后端的语音识别上,还需要结合基于大数据训练、针对远场环境的声学模型,这样才能较好解决识别率的问题。
全双工
全双工交互,是一个全链路的贯穿过程,不只是持续的拾音和网络传输,更需要包括持续的语音唤醒、智能有效人声检测、动态语音端点检测、无效语音拒识等各个模块相互配合,才能完成。