我们的命令词检索方法:
用HMM filler model的方法,先识别,识别出一段语音内的phone序列,如果有命令词对应的phone序列,则提取DNN对应命令词起止时间内的后验概率等特征,几十维,送入二级DNN判断,做二分类判断,二次确认是否是命令词。
对于相像的关键词,比如“清洗”、“清洗衣服”,到了“清洗”就唤醒,是不是唤醒了再进行后处理,看看“清洗衣服”是否唤醒,才决定是“请洗衣服”or“清洗”;也就是说,多了一层逻辑
现在的瓶颈在于,说话说着说着突然喊一声唤醒词/高噪声环境下喊唤醒词,因为此时VAD很早就工作了,就一直在录音,截一段判断一次,因此可能没截全唤醒词,这时候filler model的分数很高,keyword model的分数不高,因此就容易唤不醒。
雷博说,filler model要做的比较复杂,多个filler model
雷博说:一个企业做的TWS耳机上的命令词(12个命令词)结果:
大概是这个水平 -5到0db 67%,0-5db大约80+%,5-10db 85+%,10-15db 94%+,安静97%。
误识别大概是44小时新闻联播等说话语料,大概3~5次。
先用端到端(64K,就是个片段分类的模型)做1级,不用解码,全部在深度学习专有芯片上运行,功耗很低。然后二级用了一个TDNN的FST解码的方案,模型也是64K。建模单元是合并的音素,大概有六七十个。
由于需要解码必须需要在MCU或者DSP上进行解码。
一些经验;
1)端到端的模型虽说识别率比较高,到误识别很难控制。
2)使用空洞卷积TDNN,看到更多上下文信息,准备batch的时候,控制好帧级别正负样本比例。我们没有用序列模型,所以训练TDNN并不是给句子,而且按帧(扩展TDNN所需要的上下文帧数)给,控制正负样本比例大概4:1
我的目标:10db 唤醒率95%,误唤醒<1~2次/12h,内存300k ~ 500k