小资源下语音识别算法设计与优化
张鹏远 1 , 计哲 2 , 侯炜 2 , 金鑫 2 , 韩卫生 1     
1. 中国科学院 声学研究所, 语言声学与内容理解重点实验室, 北京 100190;
2. 国家计算机网络应急技术处理协调中心, 北京 100029
摘要:可穿戴设备和智能家居系统需要语音识别引擎占用极小的资源并具有较强的拒识能力。传统的语音识别算法无法满足小资源系统的这种需求。该文针对小资源下语音识别系统,在解码策略和拒识算法设计上均提出了改进方法。在解码策略上,通过修改垃圾音素的重入,使得集外语音的拒识率提高到64.8%,而内存占用只增加了8.5 kB。在拒识算法上,提出了离线计算背景概率和在线查表的方法,与基线系统相比,在集内识别率略有损失的情况下,集外拒识率达到93.8%,而内存占用和计算速度也得到了优化。
关键词语音识别     小资源     置信度    
Design and optimization of a low resource speech recognition system
ZHANG Pengyuan1, JI Zhe2, HOU Wei2, JIN Xin2, HAN Weisheng1     
1. Key Laboratory of Speech Acoustics and Content Understanding, Institute of Acoustics, Chinese Academy of Sciences, Beijing 100190, China;
2. National Computer Network Emergency Response Technical Team/Coordination Center of China, Beijing 100029, China
Abstract:Wearable devices and smart home systems need speech recognition engines with few resources and high rejection rates. Traditional methods cannot provide such systems. This paper presents algorithms for decoding and rejection for a low source speech recognition system. The decoding improves the rejection rate up to 64.8% by changing the filler reentry while the memory is only increased 8.5 kB compared with the baseline system. The rejection algorithm computes a background probability which is compared to similar probabilities calculated in advance online decoding. The system gives a rejection rate of 93.8% with little loss in the recognition rate. The memory and computational speed are also optimized.
Key words: speech recognition     low resource     confidence measure    

随着人类社会的进步和科学的迅猛发展,可穿戴式设备和智能家居已经逐步引起了公众的兴趣与关注。可穿戴式设备在包括健康与保健、导航、社交网络、商务和媒体等许多领域都有着巨大潜力,它将从很多细微的方面给人们的生活带来实质上的改变。智能家居系统是以家庭住宅作为系统的基本应用平台,利用计算机通信、模式识别、自动控制等技术将家居生活中有关的设备进行有机结合,构建出一套高效、智能的家居自动控制和管理系统[1-2]。随着用户体验要求的不断提高,语音识别控制技术在可穿戴式设备和智能家居中的运用变得尤其重要。可穿戴式设备和智能家居一个共同的特点是对计算复杂度和内存消耗有着更为苛刻的限制,这客观上要求语音识别算法在保证识别效果的前提下对计算复杂度和内存占用进行尽可能的优化。因此,设计一个小资源的语音识别引擎成为迫切需求。

近年来,随着嵌入式技术的快速发展,一些研究人员开展了基于嵌入式语音识别的应用研究[3-4]。由于小资源平台计算能力和存储资源配置的限制,语音识别的应用还有许多问题有待解决。首先,出于成本的控制,一些芯片的片上随机存储器(random access memory, RAM) 资源很小,因此要求语音识别引擎占用内存很少,一般在几十kB甚至更少。内存压缩的方法有很多种,包括矢量量化、模型状态选择、位域控制、自适应束剪枝等。本文在已有研究的基础上[5],构建了一个占用内存很少的基线系统。

拒识是小资源语音识别引擎能够实用必须要解决的问题,尤其是对于命令词表很小的应用,拒识的要求会更高。目前,语音识别中有很多置信度计算方法[6],基于声学模型的置信度计算就是常用的一种[7]。然而,在小资源系统上的突出问题是,如何在不增加太多资源的情况下,尽可能提高引擎的拒识性能,这就需要进行专门的设计和优化。本文提出一种二次判决方法,通过垃圾音素(filler) 吸收部分集外语音,再结合置信度的判决进一步降低虚警。

1 搜索空间的构建

基于隐Markov模型(hidden Markov model, HMM) 的语音识别系统通常由以下几个模块组成:声学模型、发音词典、搜索空间、搜索算法。其中搜索空间的构造不仅影响着内存的占用,而且也影响着搜索的效率。在小资源平台上,除了HMM和发音词典,搜索空间的动态内存占用是比较显著的。

搜索空间采用了对命令词表和垃圾音素(filler) 分别构建子空间的方法[8]。子空间构建完成后,将垃圾音素搜索网络并联到命令词解码网络中,形成完整的解码网络空间。命令词的解码网络如图 1所示。该网络采用图结构,以状态作为图节点,构造解码网络空间。由于不同的三音子可共享某一相同状态,系统采用一种前向、后向归并算法,在以三音子为单元的音素上下文描述中提取这种共享模式,并利用图结构有效表示这种共享结构,从而生成了紧致的可精细描述声学上下文的解码网络空间。

图 1 命令词网络

垃圾音素的搜索空间如图 2所示。基于垃圾音素列表,构建垃圾音素解码网络,从而获得与命令词网络竞争的路径。为了让垃圾音素可以描述非命令词外的任何语音现象,尽量挑选包含各种声韵现象的音素。本文挑选了19个垃圾音素构建垃圾解码网络,将垃圾音素解码网络并联到命令词解码网络中,形成完整的解码网路空间。这里并联是指将两个解码网络的开始节点和结束节点合并到一起,形成一个解码网络。

图 2 垃圾音素网络

2 拒识算法设计和优化

在可穿戴设备或者智能家居的应用中,一般情况下命令词个数比较少,语音识别引擎对于命令词的识别率都能达到一个比较高的水平。然而,实际环境下经常出现集外词、噪声等非正确语音,因此对识别结果的拒识非常重要。置信度技术就是这个问题的有效解决办法。可靠的置信度计算在很多应用场合十分有效。例如,在噪声或背景音乐环境下,识别结果会出现一些错误,对于这些错误的识别结果,应该分配较低的置信度加以拒识,从而有效地降低虚警。然而,传统的置信度计算方法对计算速度和存储空间都有比较高的要求,致使其在小资源应用上遇到了一定的障碍,很难达到实时识别的要求[9-12]。另外,置信度技术本身还不成熟,单靠置信度不能达到理想的拒识效果。

本文采用了二次判决拒识方法。首先,利用搜索空间中的垃圾音素吸收非语音。在此基础上,再对第一次识别结果中的命令词计算置信度得分,根据阈值进行二次判决,得到最终识别结果。

2.1 基于垃圾音素的拒识

使用垃圾音素进行拒识,具体步骤如图 3所示,包括:

图 3 垃圾音素的拒识算法流程图

1) 对待识别语音进行预处理,包括检测待识别语音的起始位置,并对待识别语音进行特征提取以及码本量化处理。

2) 获取当前解码网络中的活跃节点,所谓活跃节点是指累计似然概率得分超过一定阈值的节点,在活跃节点上可以往下继续拓展网络路径。

3) 判断是否到达词尾节点,如果判断结果是肯定的,转入4);否则,计算当前节点概率得分,读取下一帧语音特征。

4) 获取该词尾节点持有的有效令牌数tknum个。

5) 创建新令牌newP,并将tknum个令牌持有路径连接到newP上。

6) 判断新令牌newP的持有路径中的最高似然概率得分是否大于门限;如果判断结果是肯定的,转入7);否则,转入删除令牌。

7) 判断新令牌newP对应的单词是否为垃圾音素,如果判断结果是肯定的,转入8);否则,输出结果。

8) 获取重入次数,这里重入次数为新令牌newP持有路径的长度。

9) 判断重入次数是否超过门限,如果判断结果是肯定的,则输出结果;否则,转入10)。

10) 构建重入令牌,包括:计算重入节点的似然概率得分,以似然概率得分作为重入令牌的得分,路径为新令牌newP持有的路径,生成重入令牌。

11) 在重入节点上进行重入令牌替换,保留得分最高的令牌;转入1)。

当第一次识别结束后,根据解码路径判断识别结果是否为命令词,如果判断结果是肯定的,转入后面的置信度判决模块;否则,直接输出最终结果。

图 3基于垃圾音素的拒识流程中,为了满足小资源下内存的限制要求,作了如下改进:

在步骤11) 中,采用了重入令牌替换策略。这样可以限制初始节点的个数,用重入令牌去替换原来的令牌,而不是插入新的重入令牌,这样可减少垃圾网络的路径规模,降低内存占用。

另外,在命令词应用中,用户的发音不会太长,通过限制重入次数,可以进一步降低内存占用。图 4描述了一个限制垃圾音素重入次数的例子。这是一个包含17个节点的树,其中节点11-16是词尾节点(虚节点),所有路径的词尾节点都位于第5层(Level=5);从虚节点至节点2的路径(1→2) 即为重入,在本次更改中允许垃圾音素由路径widx1、widx2、widx3重入,而常规路径widx4、widx5、widx6不允许重入。

图 4 垃圾音素的重入示例

2.2 基于在线声学置信度的拒识

命令词由若干上下文有关音素构成,在基于HMM的语音识别系统中,音素是用一个HMM表示的,音素P的HMM包含若干HMM状态。一个基于HMM的识别系统的正确候选不仅在模型匹配完成后具有最佳匹配,而且各状态应该吻合得很好。假定一个HMM共有N个状态。令O为一个特定的输入观测矢量序列。经帧同步Veterbi解码,可得到O所对应的最佳状态序列。

根据式(1) 可以得到其声学置信度得分,

${\rm{CM}}\left( P \right) = \frac{1}{N}\sum\limits_{i = 1}^N {\left[ {\frac{1}{{e\left[ i \right] - b\left[ i \right] + 1}}\sum\limits_{t = b\left[ i \right]}^{e\left[ i \right]} {\ln \mathit{P}\left( {{s_i}|{\mathit{O}_t}} \right)} } \right]} .$ (1)

其中,

$\mathit{P}\left( {{s_i}|{\mathit{O}_t}} \right) = \frac{{\mathit{P}\left( {{\mathit{O}_t}|{s_i}} \right)P\left( {{s_i}} \right)}}{{\sum\limits_{j = 1}^N {\mathit{P}\left( {{\mathit{O}_t}|{s_j}} \right)P\left( {{s_j}} \right)} }} \approx \frac{{\mathit{P}\left( {{\mathit{O}_t}|{s_i}} \right)}}{{\sum\limits_{j = 1}^N {\mathit{P}\left( {{\mathit{O}_t}|{s_j}} \right)} }}.$ (2)

这里:b[i]和e[i]分别为状态si对应的起始和终止帧号。计算出音素P的置信度得分后,通过计算词内所有音素在对数域上置信度得分的几何均值为整个词打分,从而得到了这个词的置信度,

${\rm{CM}}\left( W \right) = \frac{1}{M}\sum\limits_{i = 1}^M {{\rm{CM}}\left( {{P_i}} \right)} .$ (3)

为了满足小资源下语音识别引擎实时性的要求,本文采用了在线计算置信度的方式,具体步骤如图 5所示。

图 5 在线置信度计算流程图

1) 计算命令词中每一语音特征帧的似然概率得分。

2) 计算当前语音特征帧的背景概率得分。

3) 计算命令词的置信度得分,命令词的置信度得分等于该命令词包含的所有音素的置信度得分的平均值;对于命令词中每一个音素,其得分等于该音素包含的所有语音特征帧的后验概率得分的平均值;后验概率得分等于该语音特征帧的似然概率得分除以该语音特征帧的背景概率得分;

4) 将命令词置信度得分与预先设定的门限进行比较,如果得分大于该门限,则接受该命令词,否则就拒识。

5) 输出识别结果。如果识别结果为命令词,则输出命令词;否则,输出拒识信息。

这里背景概率得分的计算通常采用图 5中方案1所描述的方法,即根据式(2),背景概率的计算是在声学模型的所有状态上得到的,将式(2) 中的分母展开可得

$\sum\limits_{j = 1}^N {\mathit{P}\left( {{\mathit{O}_t}|{s_j}} \right)} = \sum\limits_{j = 1}^N {\left[ {\sum\limits_{k = 1}^M {\left( {\sum\limits_{r = 1}^D {{p_{jkr}} + {G_{jk}}} } \right)} } \right]} .$ (4)

其中:N为背景状态个数,M为混合Gauss数,D为特征的维数,pjkr为Gauss值,Gjk为Gauss权重系数。这种方法的缺点是计算量大,不满足小资源下计算的要求。为此,本文尝试采用一种改进的方案2,即背景概率只在当前语音帧对应的活跃状态下计算,将式(4) 中的N减少为当前活跃的状态数。

在此基础上,本文进一步提出基于离线计算的方案3。将式(4) 修改为

$\sum\limits_{j = 1}^N {\mathit{P}\left( {{\mathit{O}_t}|{s_j}} \right)} \approx \sum\limits_{r = 1}^D {\left[ {\sum\limits_{j = 1}^N {\left( {\sum\limits_{k = 1}^M {{p_{jkr}} + \frac{{{G_{jk}}}}{D}} } \right)} } \right]} .$ (5)

在本文中,语音特征是经过矢量量化的,因此对于每一维特征,都有固定的码本。这样可以针对码本中的每一个码字,离线计算出其背景概率,并存储为一个表格。在解码时,根据语音帧对各维度求和即可。当然,这种方法的计算是近似的,并不严格等同于式(4),但是这种方法的优点是将置信度计算最耗时的部分离线计算出来,减少了解码时的计算量。因此,该方法非常适用于小资源应用场合。

3 实验结果

针对小资源的应用,本文从搜索空间构建、拒识算法设计、置信度计算等方面对识别引擎进行了优化。为了验证本文所提算法的性能,测试集分为2个:集内测试集和集外测试集。集内测试集包含13个命令词,测试样本为299个。集外测试集为不包含13个命令词的实网数据,共2 117个语音样本。测试语音为采样率8 000 Hz、单声道、16位的语音数据。

在实验中,首先尝试基于垃圾音素的拒识策略,实验结果如表 1所示。通过压缩缓存、矢量量化、模型状态选择、位域控制、自适应束剪枝等多种方法构建了占用极小资源的基线系统,内存占用只有24.5 kB,要指出的是本文所指的内存只是引擎在RAM上占用的资源。由于搜索空间较小(13个命令词),基线系统的集内识别率还是比较高的,达到了97.0%,但由于没有任何的拒识策略,该系统对集外词的拒识率只有1.6%,远远达不到实际应用的需求。为了达到较好的拒识效果,本文增加了垃圾音素来构建搜索空间,集外词拒识率从1.6%提高到77.8%,但集内识别率也有明显损失,下降到65.2%,更为严重的是,内存出现了大幅增长,占用率达到732.9 kB。这个结果无论从集内识别率还是内存占用率,都是令人无法接受的。为此,本文提出了两种改进策略,首先限制重入节点的令牌数,使重入节点始终保留最大的那个令牌,这种做法抑制了垃圾音素路径的扩张,从而降低了内存占用。从表 1看出,使用这种方法后,集内识别率为96.0%,内存占用迅速下降为30.2 kB。但是显然,抑制了垃圾音素路径的扩张也就降低了拒识性能,拒识率也有了10%的下降,为67.7%。进一步,通过限制重入次数,这里为7,可以再次降低内存占用,并提高集内识别率。相应地,集外拒识率下降为64.8%。这样一来,内存得到了很大压缩,集内识别率相比于基线系统也只损失了0.7%。

表 1 不同垃圾音素处理策略的性能对比
方法 集内识别率/% 集外拒识率/% 内存占用/kB
基线系统 97.0 1.6 24.5
增加垃圾音素 65.2 77.8 732.9
增加垃圾音素+限制重入令牌数 96.0 67.7 40.2
增加垃圾音素+限制重入令牌数+限制重入次数 96.3 64.8 33.0

然而,采用基于垃圾音素的策略,拒识率仍然不能达到实际应用的要求,因此必须将置信度作为辅助判决手段,进一步拒识那些虚警。采用“增加垃圾音素+限制重入令牌数+限制重入次数”的系统,表 2给出了不同置信度策略下的性能对比。

表 2 不同置信度策略的性能对比
方案 背景概率计算方法 集内识别率/% 集外拒识率/% 内存占用/kB 速度/ MIPS
1 所有状态 94.0 95.7 38.8 86.6
2 活跃状态 93.6 91.4 38.5 59.0
3 在线查表 94.0 93.8 38.3 50.4
注:MIPS为million instructions per second, 即每s百万条指令数。

2.2节中介绍了置信度计算的3种方案。3种方案都采用了实时计算的方法,在解码过程中,把后验概率存储到令牌上,因此在内存占用方面非常接近。显然,方案1取得了最好的性能,这也是置信度计算的传统做法。但是,针对小资源的应用,还要同时考虑其速度。表 2中给出了在芯片STM32F103RD上的仿真结果。相对于传统做法,尝试计算了方案2(仅计算活跃状态) 和方案3(在线查表) 的速度。与方案1比较,方案3在集内识别率保持不变,集外拒识率略有下降的情况下,计算速度提高了41.8%。

4 总结

小资源下语音识别引擎要求必须兼顾内存占用、实时性、集内识别率、集外拒识率等性能。本文设计了一个可在可穿戴设备或智能家居上应用的语音识别引擎。该文在解码策略和拒识算法设计上均提出了改进方法。在解码策略上,通过修改垃圾音素的重入令牌数和重入次数,使得集外语音的拒识率提高到64.8%,而内存占用只增加了8.5 kB。在拒识算法上,提出了离线计算背景概率和在线查表的方法,与基线系统相比,在集内识别率略有损失的情况下,集外拒识率达到93.8%,而内存占用和计算速度也得到了优化。实验结果表明,该引擎的集内识别率和集外拒识率均能达到90%以上,而内存可以控制在40 kB以下。

参考文献
[1] 韩娜, 钟卓成, 吴振权, 等. 基于体感控制的智能家居系统设计与实现[J]. 信息技术, 2015(12): 91–93. HAN Na, ZHONG Zhuocheng, WU Zhenquan, et al. Design and implementation of smart home system based on somatosensory control[J]. Information Technology, 2015(12): 91–93. (in Chinese)
[2] 叶高扬, 毕冉. 基于物联网的智能家居系统设计与实现[J]. 计算机应用, 2014(S1): 318–319. YE Gaoyang, BI Ran. Design and implementation of smart home system based on Internet of things[J]. Journal of Computer Applications, 2014(S1): 318–319. (in Chinese)
[3] Joshi V, Bilgi R, Umesh S, et al. Sub-band based histogram equalization in cepstral domain for speech recognition[J]. Speech Communication, 2015, 69: 46–65. DOI:10.1016/j.specom.2015.02.005
[4] 王智国.嵌入式人机语音交互系统关键技术研究[D].合肥:中国科学技术大学, 2014. WANG Zhiguo. Research on Key Technologies of Embedded Human-Machine Speech Interaction System[D]. Hefei:University of Science and Technology of China, 2014. (in Chinese)
[5] 邵健, 韩疆, 颜永红.嵌入式语音识别中一种高效的搜索树构造方法[C]//第8届全国人机语音通讯学术会议.北京, 2005. SHAO Jian, HAN Jiang, YAN Yonghong. An efficient search algorithm in embed speech recognition[C]//The Eighth National Conference on Man-Machine Speech Communication. Beijing, China, 2005. (in Chinese)
[6] Jiang H. Confidence measures for speech recognition:A survey[J]. Speech Communication, 2005, 45(4): 455–470. DOI:10.1016/j.specom.2004.12.004
[7] Sanchez-Cortina I, Andrés-Ferrer J, Sanchis A, et al. Speaker-adapted confidence measures for speech recognition of video lectures[J]. Computer Speech & Language, 2016, 37: 11–23.
[8] Young S R. Detecting misrecognitions and out-of-vocabulary words[C]//Acoustics, Speech, and Signal Processing. Adelaide, SA, Australia, 1994, 2:21-24.
[9] Wessel F, Schluter R, Macherey K, et al. Confidence measures for large vocabulary continuous speech recognition[J]. IEEE Transactions on Speech and Audio Processing, 2001, 9(3): 288–298. DOI:10.1109/89.906002
[10] Yoma N B, Carrasco J, Molina C. Bayes-based confidence measure in speech recognition[J]. IEEE Signal Processing Letters, 2005, 12(11): 745–748. DOI:10.1109/LSP.2005.856888
[11] Sherif A, Scordilis M S. Beam search pruning in speech recognition using a posterior probability-based confidence measure[J]. Speech Communication, 2003, 42: 409–428.
[12] Sanchis A, Juan A, Vidal E. A word-based naïve Bayes classifier for confidence estimation in speech recognition[J]. IEEE Transactions on Audio, Speech, and Language Processing, 2012, 20(2): 565–574.