多唤醒词识别模型

多唤醒词识别模型

和单一唤醒词识别的思路一致,只不过训练的是多个唤醒词模型

建模单元之间一直说“音素”,其实应该说汉字声韵母

语言模型words可以是声韵母,或音节(声母+韵母组合)

减少误触发

  • 方法1.雷博教

    词典中唤醒词的音素映射 前后加sil(原来的音素映射不要了)

  • 方法2:我做的,但是一开始没做好,雷博教

    小源小源的音素映射 x iao vv van x iao vv van 改成 x x iao iao vv vv van van x x iao iao vv vv van van,我这样直接改变效果不好

    雷博教,这样改了之后,训练数据也要改,重新训,效果才会好

  • 方法3:不要prefix_drop,让唤醒率上去,误唤醒就能调低一点了,这样雷博说前面1s也要进行解码,会造成cpu使用快速上升

  • 方法4:加二级DNN

  • 方法5:雷博其他唤醒词作为一级,我的模型作为二级,级联

小结

  1. 实测:1w条测试集估计和训练集有重合,当实测0927_lei下,我的模型唤醒率低(和0927_lei测试集在kaldi结果一致,因此排除自研解码器原因;和adb打的log差别几条,因此排除log抓不全的原因),因此不是语言模型的原因,就是模型的问题导致测试效果不好;
  2. 速度扰动的数据增广有一定提升;
  3. 基于ce的声学模型,手调语言模型对自定义唤醒词不友好(唤醒语言模型权重没有一定规律,而雷博的chain model模型规律 两字、三字、四字唤醒词之间权重相近);
  4. 基于ce的声学模型对于少分类可行(≤36分类),多分类不稳定(67分类),67分类ce model效果不及641分类chain model;
  5. 语言模型对唤醒结果有一定影响和作用,调到最好情况下,大语言模型权重大比小语言模型权重效果好(recall更高、far更低),2gram比1gram稳定,但是2gram手调数量太多,需要自动调参的手段。
  6. 语言模型的words,垃圾音可选全音素或者全音节,音素可减少解码路径,但是音素效果比音节差;因此对于超低功耗的唤醒词识别,垃圾音选择音素;对于ftv项目,选择音节;
  7. 语言模型的垃圾音为音素时,是唤醒词里有的每个音素 + 唤醒词里没有的音素用一个音表示(比如gbg);需要与建模单元相同,假如全部垃圾音都用gbg表示,由于训练时这些音用的是自有音素表示,因此gbg无法表示这些音,造成far上升;

模型汇总