继《WeNet 更新:支持热词增强》两年后,WeNet 近期更新了热词增强 2.0。本次更新内容是使用 AC 自动机 (Aho-Corasick automaton) 对热词进行构图,解决热词之间存在的重叠问题[1]。
早在 2022 年 5 月份,@victor45664 就在 Github 上 Pull Request 了相关的代码实现[2](非 OpenFST 版本)。
巧的是,当时 WeNet 也正在开发 OpenFST 版本的 AC 自动机热词增强。更巧的是,K2 近期也开源了相关的实现,感兴趣的同学可以参考《新一代 Kaldi 热词识别功能》[2]。
热词增强原理
我们来回顾一下语音识别解码和热词增强的原理:
我们可以简单地认为 WeNet 训练出来的声学模型是一个多分类器,例如对于常用的 5000 个汉字,每输入一帧音频,模型输出一个 5000 维的向量。解码就是要在多帧音频对应的多个 5000 维向量中,剪枝掉概率较小的文字序列,保留概率较大的文字序列。
热词增强则是在剪枝的过程中,不仅考虑声学模型输出的概率,也考虑匹配热词得到的奖励,最终提高包含热词的文字序列