文章来源于音频语音与语言处理研究组,作者杨展恒
作为语音识别领域的一项典型任务,语音指令识别(Speech Command Recognition,SCR)是一种从连续的音频流中检测出预定义的命令的技术。SCR技术已经被广泛应用于计算资源受限的端侧设备上以实现用户对设备的语音操控,达到解放双手的目的。然而在实际应用中,由于端侧设备上部署的模型大小和算力受限,模型的能力和云端模型无法相比,发音相近的指令词之间容易发生混淆,这会严重影响用户体验。比如说在家居场景中,对于空调的温度调节,不同温度数字之间的差异可能只有一个字,再比如“制冷模式”“制热模式”两个指令的整体读音接近,这导致这些指令的识别性能相较一般指令会有所下降,主要是指令之间容易存在混淆。


图1 发表论文截图

图2 扫码直接看论文
1. 背景动机 语音指令识别(Speech Command Recognition,SCR)是一种从连续的音频流中检测出预定义命令的技术,该技术被广泛应用于智能家居控制、控制面板和各种物联网(IoT)等边缘设备上。与关键词识别技术(Keyword spotting,KWS)类似,SCR系统通常运行在资源有限的端侧设备上,因此要求模型小尺寸和低延时。但与KWS的语音唤醒只针对一两个唤醒词不同,SCR系统通常需要同时检测多种命令,数量根据应用场景与设备的需求从十几条到上百条不等。因此,除了提高检测精度和抑制虚警外,缓解不同命令间的混淆(尤其是发音相似的命令)对用户体验至关重要,比如说在家居控制场景中,对于空调的风速调节,指令"高风速"与"低风速"之间仅有一字之差,但却会执行截然相反的操作。
SCR任务中常用的框架主要有两种,一种是基于隐马尔可夫模型(HMM)的框架[1],这种框架通常使用混合高斯模型(GMM)或深度神经网络(DNN)进行声学建模,完成从输入语音信号到声学建模单元(如音素,phone)的映射,再通过维特比(Viterbi)解码在由预设的指令集编码得到的加权有限状态机(WFST)解码图上进行搜索,输出后验概率最大的指令;另一种框架是端到端建模的神经网络框架[2],这种框架摒弃了HMM方法中的解码部分,直接用神经网络完成语音信号到最终指令或词组的映射,该框架与HMM的框架相比,整体的流程得到了简化,但随着指令词数量的增长,指令的长度灵活多变,这对于通常使用的固定感受野的神经网络模型而言,建模目标长度的不一致会识别性能下降,而另一方面,固定的指令建模单元也无法灵活地扩充新指令。
本文关注SCR任务中由于指令集存在发音相似的指令而导致的指令间的混淆识别的问题。SCR常用的训练准则(如交叉熵,CTC准则[3])通常只对目标帧或目标序列的后验概率进行优化,因此无法保证不同的目标序列在最终分类空间上的区分性。在语音识别(ASR)中,序列区分性训练(SDT)能在优化目标序列精度的同时,抑制竞争的非目标序列,这对于减轻指令间的混淆是具有启发性的。常用的SDT准则主要可以分为最大互信息准则(MMI)和最小分类错误准则(MCE[4])两类,前者旨在最大化目标序列与总体搜索空间的区分性(即最大化互信息),衍生的准则包括LF-MMI[5]、最小词错误率(MWER)、最小音素错误率(MPE)等;后者常用在分类任务中,旨在直接优化分类的错误率而非后验分布。本文受MCE准则的启发,提出了适用于SCR任务的最小序列混淆错误(MSCE)准则,旨在提高指令识别的准确性,同时减少混淆错误。本文的贡献主要包括两点:一是引入了CTC准则作为MCE的度量函数,能更好地定义每种指令的似然,从而提高指令间的区分性;二是设计了三种基于先验知识的混淆集合构建策略,能更灵活的构建混淆集合并显著降低训练成本。
本文使用的模型框架如图3所示,主要包括声学模型与解码器两个模块。前者完成输入的Fbank声学特征到音素建模单元的映射,后者完成音素建模单元到最终输出指令的映射。

图3 本文采用的模型框架
为了平衡模型感受野与模型尺寸,我们对TDNN层设计了不同颗粒度的空洞大小(空洞率随层数变化递增,如1,2,4),以较少的层数与卷积核得到较大的感受野。
为了平衡延时与模型性能,我们使模型中的某些模块只关注历史信息,避免随着模型层数加深导致模型关注过多未来信息从而令延时增加。

由于在SCR任务中,我们可以事先得到候选触发指令的长度,因此可以使用一个固定长度的数组来记录解码产生的输出标签,避免为每个标记保留一个向后指针。这样可以在触发时直接从数组中获取触发指令,避免了生成格(lattice)并回溯解码路径的过程,有助于加速和节省内存。
由于不需要生成lattice并回溯,因此我们可以只动态维护当前和下一个时间步骤的两个令牌表而不需要维护一个展开的网状的lattice结构,可以在不牺牲性能的情况下减少内存和时间的消耗。
首先定义判别函数,需要对目标序列以及非目标序列进行定义,判别函数需要能够反映目标/非目标序列的统计特性。
定义误分类测度(misclassification measure),使我们能够将决策过程嵌入到总体MCE公式中。误分类测度旨在给定输入时能区分开目标序列与其他序列,常用的度量包括:

最后需要为误分类测度定义一个连续可微的损失函数来优化参数,常用比如sigmoid函数:

对于语音任务,自然的想法就是通过CTC来进行序列建模,我们同样可以使用CTC作为判别函数来对目标/非目标序列进行定义,因为CTC的计算过程中包含了对于给定指令的所有可能的对齐。
定义误分类测度的目的是在判别空间充分提高目标指令与混淆指令的区分性,具体如下:其中分子部分为目标序列的判别函数,分母部分为混淆序列的判别函数。

由于CTC函数本身平滑可导,不需要额外定义损失函数。
发音相似策略(Pronunciation similarity strategy, PSS):由于命令混淆错误通常发生在发音相近的指令之间,为此可以根据指令的音素序列的相似度来选择混淆命令。我们可以实现计算每一条指令与其他指令的音素序列的编辑距离,然后取top-N作为该指令的混淆集。 随机选择策略(Random selection strategy,RSS):训练中每一个batch动态地随机从指令集中选取N条自身以外的指令构建混淆集。 混合策略(Hybrid strategy ,HS):结合前两种策略,混淆集中既有事先定义的发音相近的指令,也包含动态随机选取的指令。


图4 不同方案的ROC曲线对比
表1 混淆错误的相对提升对比

相关链接
ASLPer,公众号:语音之家 论文分享丨NPU-ASLP实验室将携14篇论文参加语音旗舰会议INTERSPEECH2022
