语音唤醒技术:small-footprint keyword spotting

简介: 目前市场上推出了各式各样的音箱、机器人、车载等语音交互产品,语音识别是交互的入口,而语音唤醒成为了踏进这一入口的第一步,如何高效、准确地对用户指令给出反应成为这一技术的最重要目标。iDST资深语音算法工程师陈梦喆将介绍语音唤醒技术的基础知识,基本技术架构以及国内外最新研究成果。

本文将介绍Interspeech 2017上关于语音唤醒技术的几篇文章。

相应分享视频链接:https://yq.aliyun.com/webinar/play/336

首先,什么是语音唤醒?
a6c4cada1c6adc1b84008d39b45b6644350d2057
上面的四幅图表现设备从休眠到唤醒的过程:首先,设备需要被开启,自动加载好资源,这时它处于休眠状态。当用户说出特定的唤醒词时,设备就会被唤醒,切换到工作状态等待用户接下来的指令。这一过程中用户不需要用手接触,直接可以用语音进行操作,同时利用语音唤醒的机制,设备不用实时地处于工作的状态,从而节省能耗。
语音唤醒的应用领域比较广泛,例如机器人、手机、可穿戴设备、智能家居、车载等。几乎很多带有语音功能的设备都会需要语音唤醒技术作为人和机器互动的一个开始或入口。不同的产品会有不同的唤醒词,当用户需要唤醒设备时需要说出特定的唤醒词。大部分的唤醒词都是三到四个音节,音节覆盖多,音节差异大,相对唤醒效果会比较稳定。
对于一个唤醒效果好坏的判定,主要有召回率、虚警率、实时率和功耗四个指标。召回率表示正确被唤醒的次数占总的应该被唤醒次数的比例。虚警率表示不该被唤醒却被唤醒的概率。召回率越高虚警率越低就表示唤醒的性能越好,这两个指标的关系经常是一个相对关系,即一个指标的上升对应另一个指标的下降。从用户体验的角度来讲,实时率可以表现为设备反应的速度,唤醒技术对设备的反应速度要求很高。另一个指标是功耗,由于很多设备依靠电池或者是充电式的,具有低能耗才能保证设备较长时间的工作不需要充电,实际上,不同方向的产品使用场景不同,相对它的技术难点是有很大区别的,例如,车载环境下唤醒的难点在于它周围环境的噪声比较大,因此噪声环境下的召回率和虚警率就变得很重要;智能家居中的智能音箱、智能电视等也会受到环境噪声的影响,这时的噪声主要是人的声音,即其他人说话声音对本人说话声音的影响。而且多数的智能家居是充电后使用的,低功耗也成为一个非常重要的指标。唤醒其实是与实际结合非常紧密、非常重视用户体验的一种任务。
唤醒可以看成是一种小资源的关键词检索任务,其中小资源是指计算资源比较小和空间存储资源比较小,因此它的系统框架跟关键词检索的系统会有一定的区别,目前常用的系统框架主要有Keyword/Filler Hidden Markov Model System和Deep KWS System两种。
48be104a050ea67bfe65b459cb48418c6c4db6fe
第一种被称为基于隐马尔科夫模型的Keyword and Filler系统,这类系统的关键是上图中左侧的解码模块,它与语音识别器中的解码器类似,也是通过维特比算法来获取到最优的路径,但是与语音识别中LVCSR(大规模词表语音识别)系统的区别在于解码网络具体的构建,语音识别中的解码网络包含所有词典中的词汇,而唤醒的解码网络如上图右侧包含了Keyword和Filler的途径,除了关键词以外的词汇都包含在Filler路径当中,不是每一个词都会有相应的路径,这样的网络会比语音识别的网络小很多,有针对性地对关键词进行解码,可选的路径就少了很多,解码的速度也会得到大幅度的提升。对于解码出来的候选再作一个判断,就完成这样一套技术方案的整体构架。
f46313c2adaede15fd75db5cc657c95f9ebc5f7f
第二种系统不再采用解码这样一个步骤,直接是由端到端的模式,即输入是语音,输出直接是关键词。这样的系统包括三个部分:如上图,第一步是特征的提取,第二步通常是一个神经网络,它的输入是语音特征,输出是各个关键词和非关键词即Filler这样一个后验概率。由于第二步的网络是以帧为单位输出后验值的,就需要第三步对后验值以一定的窗长进行平滑,平滑后的后验值如果超过一定的阈值会被认为是唤醒了。
下面介绍Interspeech 2017上关于语音唤醒技术的文章,其中挑选了三篇跟大家分享。
1acd78e05d17aeee1ae1167bd9e72975486b3586
第一篇如上是来自于Amazon的一篇文章,它的系统架构采用了上文介绍的第一类系统,也就是需要有解码的系统。这篇文章的关键点在于对解码模块尝试使用了TDNN(Time Delay Neural Network)的声学模型,同时为了提升TDNN的性能以及减少TDNN的计算量,使其能够满足实际使用的实时率要求也做了一系列的优化。
  b0a333b4074da6d9f648abf2215b203fbde83bab   
在这一架构当中解码模块是比较重要的,如上图左侧画出了系统的解码网络,分为ALEXA关键词路径和Filler路径,其中NSP表示Non-speech(非语音)Filler路径,SP表示Speech(语音)Filler路径。图当中的每一个圆圈都是一个隐马可夫模型,在建模单元上,下面的关键词是采用了三状态的隐马可夫模型对音素进行建模,而Filler部分采用了单状态的隐马可夫模型进行建模。解码过程中,当有token走到了关键词的词尾节点时需要进行一个判断,此时采用关键词与filler的声学模型得分之比作为一个衡量标准,当它大于一定阈值的时候才会进入到下一个模块当中。
文中采用TDNN指的就是对于图左侧的隐马可夫模型的一部分即发射概率采用TDNN来进行建模。TDNN的学习需要用到前后帧所保留下来的信息,同时还需要照顾到一些时间轴的信息,所以它的结构图跟我们平时看到的DNN结构图画法上有比较大的区别。下图中的小黑框指的是网络的隐层,这个图表示的就是时间为t的那一帧在时间维度上的一个网络结构。从图中的橙色框可以看出,越深的层它能够学习到的上下文信息是越宽的,从左往右逐个加深,对应的输入特征也是变得越来越宽的过程,对于时间为t这一帧的建模实际上用到的是t-20到t+10这30帧的一个输入特征,这个长度可以通过调节变得更加长,这种长时的信息学习是DNN不能够做到的,所以说TDNN主要的优势在于能够学习和处理更长的上下文信息。
6756827fb823e1ce718e5adefe1ef8545f7f791f
为了能够得到一个更好的TDNN的效果,文中采用了Transfer Learning和Multi-task Learning两个方法。
7667f7dfaacd65c509ef1bd44350412250a1de95
Transfer Learning是一种在机器学习中广泛使用的方法,核心的意思是将从一个相关任务学习到的知识迁移到当前的任务当中来,对于文章中的任务来说采用的方法就是先训练一个LVCSR的网络,之后对于唤醒任务的网络,它的隐层参数就用LVCSR这样的网络参数作为初始值,再进行唤醒网络的训练,这样做的好处就是使得唤醒任务的网络能获得一个更优的初始化,从而有助于它最终收敛到一个更优的局部最优点上。
eb940b1b98ec14926d062644932b62398a5c6aa7
另一个提升TDNN性能的方法是采用共享隐层的结构进行多任务的学习,也就是Multi-task Learning。在这篇文章当中,从上面的结构图中可以看到,网络学习的一个任务是关键词任务,另一个是LVCSR任务,两个任务共享了输入层和大部分的隐层,训练中的目标函数如公式中展示的,是两个任务的加权平均,其中任务的权重可以自行调节。这个网络的优点在于最终使用的时候会将只跟LVCSR相关的这些节点从网络中剥离,因此网络的使用跟之前的常用的网络一样,比较简单。
由于TDNN比DNN的计算量大很多,为了能够满足实际使用的需求,文章中采用了一些方法来降低TDNN的计算量。一种方法叫做Sub-sampling,下图中所有的线是原始TDNN的一个形态,是一个全连接的网络,但事实上相邻时间点所包含的上下文的信息是有很大部分重叠的,因此可以采用采样的方法只保留图中部分的连接,比如像图中保留了红色线的部分,实验中显示出这样的采样可以获得与原始模型近似的效果,同时能够大大减少模型的计算量。
f4fd218276b663697e35dd91d2e8e3a4684449e6
另外一个降低计算量的方法是采用奇异值分解。如下图,将一个参数矩阵转换成两个参数矩阵相乘,进行完奇异值分解后,奇异值会从大到小进行排列,其中o表示保留下来的奇异值个数。在很多情况下,前10%甚至1%奇异值的和就占据了全部奇异值总和的99%以上,因此在这样的分解中去合理选择o不会给模型带来性能的损失,甚至这样的结构调整会使得模型的结构更加合理,从而获得一个更好的收敛点,更最重要的是,它大大减少了模型的计算量。下图中列出了矩阵奇异值分解前和后计算量的计算公式,等号前面是一个矩阵的计算量,后面相当于两个矩阵的计算量,大部分情况后者的计算量都会远小于前者,o越小时,差距会越大。文章使用的是将隐层的参数矩阵去做这样的一个分解,使得TDNN的计算量得到缩减。
703a693ba2d44651e64624bd17c6f8af31987953
下图为它的一些实验结果,文章中的实验使用的关键词是”Alexa”,训练以及测试的数据是在不同条件下采集到的房间内的远场数据,文中提到他们采用了充足的训练开发以及测试数据。其中左图的横坐标表示虚警率,纵坐标表示没有召回的概率(1-召回率),显示的三条曲线叫作ROC曲线,ROC曲线的位置越低表示性能越好。用于对比的BaseLine是一个做了SVD的DNN模型,即图中的黑线所示,相比较的是TDNN的结果,即图中的绿线和红线,绿色表示没有做SVD的,红色是做了SVD的。从图中可以看出TDNN会比DNN性能好,而后进一步做SVD会给TDNN带来进一步的性能提升。右边的表格列出的是AUC(Area under Curve)的结果,即ROC曲线下面的面积,面积越小表示性能越好,而从表格中可以看出TDNN相对于DNN有了一个很大的提升。
cf91c58a32dc396bb3abc94296d1351acaa2bfd0
0f07fe78ad838ff9a248177fc1a12e7c60bb9f82
第二篇文章如上,来自于百度,采用的框架是本文之前介绍的第二种系统框架Deep KWS System。此系统采用端到端模式,其中最重要的一部分是神经网络,本篇文章采用了CRNN的网络结构,同时为了减小模型的计算量,文章中探索了不同模型结构和参数来获得一个相对更优的效果。CRNN是将CNN和RNN融合在一个网络当中,CNN的优势在于挖掘局部的信息,而RNN的优势在于学习长时的上下文信息,两者的结合可以起到互补的作用。之前百度有在LVCSR任务上采用了这样的模型,在采用CRNN的同时使用CTC目标函数进行训练,在语音识别的任务上获得了很好的效果,他们希望把这样的模型引入到唤醒任务当中,但是CTC目前都是在模型规模比较大、数据量比较大的情况下得到较好的效果,这一点并不适用于唤醒的任务,而且文章中在唤醒的实验上也表明了目标值采用CTC没有获得预期的效果,因此在本文中实际依然采用交叉熵作为目标函数。
fc02bae73e44cb82713ccc4a9b8dfaf5dd6a7302
上图是他们最终使用的结构,图中上下两端分别表示输入和输出,输入的直接是语音,图中采用PCEN的语音特征直接加在了网络结构当中,此特征在他们的其它论文当中有相应的详细阐述,它具有比较好的抗噪的能力,后面的隐层依次包含了CNN、双向的RNN和DNN,输出层有两个节点,表示是否是关键词。这样的一个结构包含了很多可以手工进行调整的参数,以及RNN节点结构的选择。文章中给出了很多组参数的对比结果,以及像RNN节点是用LSTM还是GRU等的对比。
文章中的实验采用了单一的关键词”TalkType”,训练和测试数据来源于5000多个说话人,文中做出了非常详尽的实验。其中之一如下图是分析数据量对于性能的影响,图中横坐标表示正样本的条目数,纵坐标表示每小时应该被唤醒却没有被唤醒的次数。图中的蓝线表明正样本数据的增加对数据的影响,随着正样本数目的增加对于模型是有好处的,但是当到达一定程度时就会达到饱和,红色的×表示加入了各种负样本,可以看到相对于正样本的增加,负样本的增加能给模型带来更大程度的提升。
    7ed9a0ed43e81c2f4eeb6d63fd4249359a51929d       
数据对于性能的影响在另外一个实验当中也得到了体现。下图表示是对于远场鲁棒性的实验。实验中原有的测试数据加上了混响来模拟不同远度的测试数据,横坐标表示的是模拟发生源与设备的距离,纵坐标表示每小时漏唤醒的次数。此图中漏唤醒的范围明显比上一个图的漏唤醒范围大,特别是在距离比较远的情况下恶化是比较明显的。图中实线表示训练数据不做特殊处理的一个结果,可以看出在距离大于1m后,它的性能恶化得比较快,很大的原因是由于训练和测试数据的不匹配,而虚线表示训练数据卷积上各种空间的冲激响应之后扩展了原有的训练数据,这里的冲激响应与测试数据当中用到的不同,虽然不同但是虚线明显平缓了很多,特别是在距离比较远的情况下,性能的提升是非常明显的,文中给出的结论就是,训练数据应该谨慎地选择,要能够反映实际的应用场景。
1ad73a6bfc4aaa0f40615f5a709562f34d9aaa57
另外,文章中做了一个CRNN和CNN对比的实验。当性噪比比较小的时候CRNN优于CNN,随着性噪比的增大,两者之间的差距变得越来越小。CRNN和CNN的差别就在于RNN,因此得出结论,RNN对于性噪比小,即噪声比较大的情况是非常有帮助的。同时在文章的最后给出了综合的结果如下图,在每小时误唤醒为0.5个的条件下,不同性噪比上得到的性能。
a3637b75b5b6e20146be34a54f7345105408e803
e67ef2f1788657736e9e0a93fd94a1ea04f0dce9
第三篇文章如上,来自于佐治亚理工的,主要针对关键词的检索,本文之前提到唤醒可以看成小资源的简化版的关键字检索,而这篇文章对于唤醒任务同样具有借鉴意义。由于不受资源的限制,文章中关键词检索采用的解码网络就是一完整的LVCSR解码网络,这篇文章的主要工作在于对用于解码的模型的改进,它采用BLSTM的模型结构,同时使用Non-Uniform MCE这样鉴别性的训练准则进行模型训练,他们早期在DNN上尝试使用这样的准则。图中下侧列出了他们之前发表的一些文章。
首先,他们之所以使用BLSTM的原因是BLSTM模型能够学习长时的上下文信息。MCE(最小分类错误)是一种鉴别性训练准则,有助于提升模型对于相似词的鉴别能力。Non-Uniform MCE的提出是因为作者发现系统当中的一个问题,事实上这一问题也存在于第一类唤醒系统当中。在第一类需要解码的唤醒系统当中,解码模块用到的声学模型训练是针对所有词的,这一目标与唤醒系统的目标存在不一致,唤醒系统更在意的是关键词的参数指标,因此作者提出了Non-Uniform MCE的准则,更偏重于模型对于关键词的训练。
d8437223c58ba4e8212b061657ef1d36ec8441cf
如上图,我们可以看到第一个公式是一个帧级别的鉴别性的函数,其中Xrt表示第r句话第t帧的特征,SWt    表示Xrt的标注,前一个p是声学概率,后一个p是语言模型概率。第二个公式是对误分类度量的公式,第三个公式是训练神经网络所需要的目标函数。作者的优化在于对目标函数增加了一部分,称为错误代价函数,加入这样一个代价函数的优点在于它使得目标函数可以对不同类型的错误给予不同程度的惩罚值。在本文的任务当中,对于关键词分类的错误就会受到更加严厉的惩罚。在实际使用当中,随着迭代的进行,误差函数是会产生变化,会以类似AdaBoost的方法不断地乘以一个小于一的系数来减小它对于整个系统的训练作用。有了目标函数,剩下的工作就是bp算法的推导,只要推导参数更新的公式就可以进行神经网络的训练了,具体的推导在文章中也有详细的展现。
7c0b1efce248bae18f87e8265c51fd30568b6449
此外,在训练过程中作者对于因素错误率高的词会人为地去提升它的自然值,这也会为系统带来进一步的提升,同时作者也提到了这样的方法实际上相当于采用了更多容易产生混淆的一个数据,相当于一个数据复制的过程。
最后一个实验是在Switchboard 300小时上进行的关键词任务,其中使用的关键词比较多,主题都是关于信用卡的使用。如下表格表示,相当于在DNN上做的实验结果,不同模型的性能采用FOM指标进行表示,FOM越高表示性能越好,表中列了许多不同准则训练得到的DNN性能结果,第一个CE表示交叉熵的准则,它是一个产生式的训练准则,后面的MMI、sMBR、MCE、BMCE都是鉴别性的准则。从表中可以看出,几种鉴别性的准则都会比CE的方式好一些,最后一种是作者文章中提到叫作Non-Uniform BMCE的准则,通过调整后面K1、K2的参数可以得到良好的性能。
4749857cbdb7fd0b114a0c5cbb23b4a6d2dde125
下面这张表格是在BLSTM上做的实验,通过上下两张表格对比,使用BLSTM整体会比用DNN的性能更好一些,但也需要付出代价,因为BLSTM相应的实时率计算量比DNN大很多。下面的表格同样采用了不同的训练准则,在BLSTM下采用作者新提出的方法,经过参数调整后最好的结果相对它的CE的BaseLine会有相对5.55%性能的提升。
  140cbf1679ffca42caeda888df1b1b8a05851c95        
以上即为本人对Interspeech 2017上其中关于语音唤醒技术的三篇文章的理解与经验分享。

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
3天前
|
API 语音技术
基于Asterisk和TTS/ASR语音识别的配置示例
基于Asterisk和TTS/ASR语音识别的配置示例如下:1. 安装Asterisk:首先,确保你已在服务器上成功安装Asterisk。可以选择从Asterisk官方网站下载最新版本的安装包并按照指南进行安装。2. 安装TTS引擎:选择适合你需求的TTS(Text-to-Speech)引擎,如Google Text-to-Speech、Microsoft Azure Cognitive Services等。按照所选TTS引擎的文档和指示进行安装和配置。3. 配置Asterisk:编辑Asterisk的配置文件,通常是`/etc/asterisk/extensions.conf
17 5
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)
【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)
49 1
【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)
paraformer-large-vad-punc
用的是 paraformer-large-vad-punc 音频版本,识别结果经常出现多句话粘成一句话的问题 比如我说了一句话,安静了四五秒,再说另一句话,识别出来算是一句话,没有办法能很好地分开成两句话 现在出来了大量的这种问题,很多话被连成一句话,很影响效果 vad 模型是不是效果不太好啊? 有什么参数可以设置吗? 求教
74 0
|
机器学习/深度学习 自然语言处理 算法
Gato之后,谷歌也推出「通才型」智能体Multi-Game Decision Transformers
Gato之后,谷歌也推出「通才型」智能体Multi-Game Decision Transformers
195 0
|
语音技术 开发工具 Android开发
Android 离线文字转语音功能-TTS(Text To Speech)
Android 离线文字转语音功能-TTS(Text To Speech)
2187 0
Android 离线文字转语音功能-TTS(Text To Speech)
|
计算机视觉
百度人脸识别文档冲突,facetype应是face_type
百度人脸识别文档冲突,facetype应是face_type
110 0
百度人脸识别文档冲突,facetype应是face_type
|
自然语言处理 安全 API
如何打造车载语音交互:Android Voice Interaction 给你答案
如何打造车载语音交互:Android Voice Interaction 给你答案
如何打造车载语音交互:Android Voice Interaction 给你答案
|
安全 Android开发 数据安全/隐私保护
Android支持Smart Lock 人脸解锁
Android支持Smart Lock 人脸解锁
303 0
|
存储 自然语言处理 索引
es keyword和text的区别以及联想词实现方案
es keyword和text的区别以及联想词实现方案
374 0
|
XML 语音技术 数据格式
status: 41020001, status_text: TTS:TtsClientError:Illegal ssml text阿里云语音合成报错处理分享
使用阿里云语音合成ssml标签报错,不知该如何查找错误地方,可以参考下以下的内容
745 0
status: 41020001, status_text: TTS:TtsClientError:Illegal ssml text阿里云语音合成报错处理分享