噪声问题一直是基于语音识别的嘚一个老大难的问题在理想的实验室的环境下,识别效果已经非常好了之前听很多音频算法工程师抱怨,在给识别做降噪时经常发現WER不降反升,降低了识别率有点莫名其妙,又无处下手
刚好,前段时间调到了AIlab部门有机会接触这块,改善基于语音识别的的噪聲问题虽然在此之前,询问过同行业的朋友单通道近场下,基本没有太大作用有时反而起到反作用,但是自己还是想亲身实践一下至少找到这些方法失效的原因,看看是否在这些失败的原因里面改进下思路,可能有新的发现;同时去Ailab顺带把深度学习降噪实践一紦,就算在ASR没有效果以后还能用在语音通信这个领域。
任务的要求是保证声学模型不变动的情况下即不重新训练声学模型,即单純利用降噪来改善那些环境恶劣的样本同时保证不干扰纯净语音或者弱噪声的语音场景,所以非常具有挑战性
filtering),剩下的任务就是调参经过很多次努力,基本没有什么效果相反WER还会有1%点左右的增加。
分析对比了降噪和没有降噪的识别文本对比和频谱分析总结了以下這些原因,希望对后面的人有些参考意义:
1.DNN本身就有很强的抗噪性在弱噪声和纯净语音下,基本都不是问题
通常场景下,这点噪聲用线上数据或者刻意加噪训练,是完全可以吸收掉的只有在20db以下,含噪样本的频谱特征和纯净样本的频谱特征差异太大用模型学習收敛就不太好,这时需要降噪前端
2.降噪对于纯净语音或者弱噪声环境下,不可避免的对语音有所损伤只有在恶劣的环境下,会起到非常明显的作用
传统降噪是基于统计意义上面的一个处理,难以做到瞬时噪声的精准估计这个本身就是一个近似的,粗略模糊化嘚一个处理即不可避免的对噪声欠估计或者过估计,本身难把握保真语音,只去噪如果噪声水平很弱,这个降噪也没有什么用或者說没有明显作用去噪力度大了,又会破坏语音可以预见,根据测试集进行调参就像是在绳子上面玩杂技。
我们的测试样本集90%的样夲都在在20db以上,只有200来条的样子环境比较恶劣。所以通常起来反作用
3.降噪里面的很多平滑处理,是有利于改善听感的但是频谱吔变得模糊,这些特征是否能落到正确的类别空间里面也是存在疑问的。所以在前端降噪的基础上再过一遍声学模型重新训练,应该昰有所作用的但是训练一个声学模型都要10来天,损失太大也不满足任务要求。
4. 传统降噪通常噪声初始化会利用初始的前几帧,洏如果开头是语音那就会失真很明显。
5.估计出噪声水平在SNR低的情况下降噪,SNR高时不处理或者进行弱处理,在中间水平进行软處理,这个思路似乎可以行的通
6.用基于声学特征的传统降噪方法,尝试过在测试集里面,有不到1%的WER降低
7.到底用什么量来指導降噪过程?既然降噪没法做好很好的跟踪处理的很理想。即不可能处理的很干净同时不能保证语音分量不会被损伤,即降噪和保证語音分量是个相互矛盾同时也是一个权衡问题。那其实换个角度降噪主要是改善了声学特征,让原来受噪声影响错分类的音素落到正確的音素类别即降低CE。那么应该直接将降噪和CE做个关联用CE指导降噪过程参数的自适应变化,在一个有代表性的数据集里面有统计意義上的效果,可能不一定能改善听感处理的很干净,但是在整体意义上有能改善识别的。所以说语音去噪模块必须要和声学前端联合起来优化目标是将去噪后的数据投影到声学模块接受的数据空间,而不是改善听感即优化的目标是降低声学模型的CE,或者说是降低整条鏈路的wer,所以用降噪网络的LOSS除了本身的损失量还应绑定CE的LOSS自适应去训练学习是比较合理的方案。也可以将降噪网络看成和声学模型是一個大网络为CE服务,当然这不一定是降噪网络,也可以是传统的自适应降噪方法但是如果是基于kaldi开发,里面涉及到的工程量是很大的
8.在整个基于语音识别的体系中,由于声学模型的强抗噪性所以单通道下的前端降噪似乎没有什么意义,1%左右的wer的改变基本不影響整个大局,所以想要搞识别这块的朋友应该先把重要的声学模型,语言模型解码器,搞完之后再来撸撸这块,因为即便没有单独嘚前端整个识别大多数场景都是OK的,恶劣的场景比较少一般场景大不了扩增各种带噪数据训练,大不了扩增各种带噪数据也是可以嘚。
我们的线上数据影响识别的因素排序是口语化,方言短词,其次才是噪声另外,少量混响语速,音量也是影响因素之一,鉯上是自己的一点片面之言希望对大家有参考意义,少走弯路