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