来源丨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这篇论文的主要内容进行总结之外,还会提供一些论文之外的改进之处供大家参考。


CaTT-KWS主要是将Transducer模型应用于自定义的唤醒系统中。唤醒任务,大致可以分为自定义唤醒和固定唤醒两个任务,这两个任务的应用场景是不一样的。像Siri,Alexa,小爱同学等这些产品等出现,让大家对固定唤醒这个任务不再陌生,几乎市面上所有的智能家居,想要和它进行交互,首先都会利用唤醒词将设备唤醒,然后再进行人机对话。但是无论如何,“先唤醒再交互”的这种方式,肯定不是最自然的交互方式,但是现有的技术做不到意图的识别,为了减少机器误响应,只能用这么一种方式。自定义唤醒呢,相比于固定唤醒来说,更宽泛,可以说是介于固定唤醒和大词汇量语音识别任务之间的一个任务。一般自定义唤醒词的数量从几十个到几百个不等,而唤醒词主要是一些高频使用的控制指令,比如“打开空调”,“播放歌曲”等等,也有可能是当前交互界面显示的各种控制指令,比如车载显示屏幕上当前界面所显示的所有的可触控的按钮,都可以作为自定义唤醒词,用户使用语音指令就可以控制。


系统概述

整个唤醒流程,包括了三个阶段:一个关键词检测阶段和两个确认阶段。为了完成这三个阶段,模型也对应的具有三个主要模块,分别是Transducer模块、音素分类模块和Transformer模块。Transducer模型模型主要进行关键词的发现;音素分类模块具有两个作用,一方面,它是通过帧级的音素对齐训练的,其输出可以用来进行强制对齐来获得关键词的准确开始位置;另一方面,对齐的过程中根据对齐的似然分数,也可以用来进行关键词的确认,从而达到抑制无唤醒的作用;Transformer模块则是进行最终的关键词确认,它接受上一阶段通过强制对齐获得的准确的关键词开端处之后的Encoder特征进行自回归的解码,采用Beam search进行解码,如果唤醒词对应的音素序列存在于Top K的候选内且似然分数大于某一个阈值,则认为唤醒有效,否则拒绝本次唤醒,判定为误唤醒。而三个模块共享一个声学Encoder,模型非常紧凑。模型的整个训练过程,其实是以Transducer loss为核心的一个多任务学习的过程。


检测阶段

检测关键词阶段,主要使用Transducer+WFST的方案,建模方式完全采用了我们之前的Tiny Transducer[1] 方案,仍采用phone建模,同时使用WFST来进行解码。相对于识别任务,自定义唤醒词任务的WFST要简单很多,只包含唤醒词路径和一个garbage路径。实验中我们发现Transducer模型非常适合作为第一阶段的关键词检出,因为它的召回非常高,带来的副作用就是无唤醒也会比较高,因此,我们会在后续采用两个关键词确认阶段来进行无唤醒的压制;同时,Transudcer模型通常具有比较明显的尖峰延迟的现象,我们如果进行二次验证,往往需要相对比较准确的唤醒词边界,这就引出了我们下一个阶段使用音素分类模块进行强制对齐。


确认阶段1: 强制对齐

Transducer Encoder的输出通过一个线性层和softmax分类,就组成了一个简单的帧级音素分类模块。这个模块起到了三个作用:

  1. 辅助模型训练

  2. 强制对齐来获得疑似关键词准确的开始位置

  3. 使用强制对齐的似然分数作为置信度来进行误唤醒压制


辅助模型训练这里不多做解释。使用强制对齐获得准确的关键词起点位置的做法如下:

  1. 首先根据第一阶段输出的唤醒词开始位置(WFST中)的时间点往前推一个经验延时时间得到一个粗略的唤醒词开始时间;

  2. 获得时间段对应的音素分类器的音素后验概率矩阵,其中表示第一阶段输出的关键词结束位置;

  3. 根据第一阶段输出的唤醒词,构建一个简单线性图,并在唤醒词前面插入一个G节点吸收非关键词部分,参考封面图片(d)图;

  4. 在线性图上进行维特比对齐,得到准确的开始时间.


在对齐的同时,我们还可以得到强制对齐的似然分数(公式3),如果似然分小于一个阈值,则直接拒绝本次唤醒。


确认阶段2: Transformer解码器解码

经过上一阶段,我们就获得了关键词的准确位置,同时过滤掉了一部分误唤醒。在本阶段,我们将进一步使用Transformer decoder来进行确认。在训练阶段,Transformer decoder已经和Transducer encoder一起联合训练,结合CTC-Attention框架,使用Transformer decoder同样可以辅助模型的收敛。


上一步获得了准确的关键词开始位置之后,我们就可以获得唤醒词部分的encoder的高维表征,我们用表示,Transformer decoder使用唤醒词部分的高维表征做beam search 解码,在解码的过程中,根据beam search的结果进行二次确认:

  1. 如果beam search中的top-k的候选中没有目标唤醒词,则直接拒绝本次唤醒;

  2. 如果beam search中的top-k的候选中存在目标唤醒词但是累计似然分数小于阈值,拒绝本次唤醒;

  3. 如果beam search中的top-k的候选中存在目标唤醒词而且累计似然分数大于阈值,接受本次唤醒。


在beam search的过程中,我们其实不用解码到EOS符号的出现,我们的目标是进行某一个唤醒词的确认,只要解码出的音素长度大于某个长度就可以停止beam search。具体的实验结果,可以参考论文中的实验部分,这里就不再多说。


总结和展望

本文使用Transducer进行自定义关键词的检出和确认,充分利用Transducer高检出率的性能,结合帧级音素预测和Transformer decoder,在保证唤醒率的情况下,大幅压制了误唤醒。论文中使用了Transformer decoder,其实在实际使用的时候,也可以通过训练额外的置信度模型来进行误唤醒的压制,也能取得不错的效果。

参考

[1]https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2101.06856
[2]https://zhuanlan.zhihu.com/p/531934889