来源丨https://zhuanlan.zhihu.com/p/534840415

本文主要是基于我们即将发表于Interspeech2022的文章 “CaTT-KWS: A Multi-stage Customized Keyword Spotting Framework based on Cascaded Transducer-Transformer“(Tiny Transducer: A Highly-efficient Speech Recognition Model on Edge Devices)[1],在本工作中,我们将之前用于ASR的Tiny-Transducer模型(Tiny-Transducer(1) 设备端轻量级ASR模型)应用于自定义唤醒任务中。整个工作在声学模型的主体上,仍然沿用了Tiny Transducer模型的配置,如果对Tiny Transducer还不是太熟悉,可以参考我之前的文章。在本文章中,除了对CaTT-KWS这篇论文的主要内容进行总结之外,还会提供一些论文之外的改进之处供大家参考。
整个唤醒流程,包括了三个阶段:一个关键词检测阶段和两个确认阶段。为了完成这三个阶段,模型也对应的具有三个主要模块,分别是Transducer模块、音素分类模块和Transformer模块。Transducer模型模型主要进行关键词的发现;音素分类模块具有两个作用,一方面,它是通过帧级的音素对齐训练的,其输出可以用来进行强制对齐来获得关键词的准确开始位置;另一方面,对齐的过程中根据对齐的似然分数,也可以用来进行关键词的确认,从而达到抑制无唤醒的作用;Transformer模块则是进行最终的关键词确认,它接受上一阶段通过强制对齐获得的准确的关键词开端处之后的Encoder特征进行自回归的解码,采用Beam search进行解码,如果唤醒词对应的音素序列存在于Top K的候选内且似然分数大于某一个阈值,则认为唤醒有效,否则拒绝本次唤醒,判定为误唤醒。而三个模块共享一个声学Encoder,模型非常紧凑。模型的整个训练过程,其实是以Transducer loss为核心的一个多任务学习的过程。
检测关键词阶段,主要使用Transducer+WFST的方案,建模方式完全采用了我们之前的Tiny Transducer[1] 方案,仍采用phone建模,同时使用WFST来进行解码。相对于识别任务,自定义唤醒词任务的WFST要简单很多,只包含唤醒词路径和一个garbage路径。实验中我们发现Transducer模型非常适合作为第一阶段的关键词检出,因为它的召回非常高,带来的副作用就是无唤醒也会比较高,因此,我们会在后续采用两个关键词确认阶段来进行无唤醒的压制;同时,Transudcer模型通常具有比较明显的尖峰延迟的现象,我们如果进行二次验证,往往需要相对比较准确的唤醒词边界,这就引出了我们下一个阶段使用音素分类模块进行强制对齐。
Transducer Encoder的输出通过一个线性层和softmax分类,就组成了一个简单的帧级音素分类模块。这个模块起到了三个作用:
辅助模型训练
强制对齐来获得疑似关键词准确的开始位置
使用强制对齐的似然分数作为置信度来进行误唤醒压制
辅助模型训练这里不多做解释。使用强制对齐获得准确的关键词起点位置的做法如下:
首先根据第一阶段输出的唤醒词开始位置(WFST中)的时间点
往前推一个经验延时时间
得到一个粗略的唤醒词开始时间
;获得
时间段对应的音素分类器的音素后验概率矩阵,其中
表示第一阶段输出的关键词结束位置;根据第一阶段输出的唤醒词,构建一个简单线性图,并在唤醒词前面插入一个G节点吸收非关键词部分,参考封面图片(d)图;
在线性图上进行维特比对齐,得到准确的开始时间
.
在对齐的同时,我们还可以得到强制对齐的似然分数
(公式3),如果似然分小于一个阈值,则直接拒绝本次唤醒。
经过上一阶段,我们就获得了关键词的准确位置,同时过滤掉了一部分误唤醒。在本阶段,我们将进一步使用Transformer decoder来进行确认。在训练阶段,Transformer decoder已经和Transducer encoder一起联合训练,结合CTC-Attention框架,使用Transformer decoder同样可以辅助模型的收敛。
上一步获得了准确的关键词开始位置
之后,我们就可以获得唤醒词部分的encoder的高维表征,我们用
表示,Transformer decoder使用唤醒词部分的高维表征做beam search 解码,在解码的过程中,根据beam search的结果进行二次确认:
如果beam search中的top-k的候选中没有目标唤醒词,则直接拒绝本次唤醒;
如果beam search中的top-k的候选中存在目标唤醒词但是累计似然分数小于阈值
,拒绝本次唤醒;如果beam search中的top-k的候选中存在目标唤醒词而且累计似然分数大于阈值
,接受本次唤醒。
在beam search的过程中,我们其实不用解码到EOS符号的出现,我们的目标是进行某一个唤醒词的确认,只要解码出的音素长度大于某个长度就可以停止beam search。具体的实验结果,可以参考论文中的实验部分,这里就不再多说。
本文使用Transducer进行自定义关键词的检出和确认,充分利用Transducer高检出率的性能,结合帧级音素预测和Transformer decoder,在保证唤醒率的情况下,大幅压制了误唤醒。论文中使用了Transformer decoder,其实在实际使用的时候,也可以通过训练额外的置信度模型来进行误唤醒的压制,也能取得不错的效果。
