噪聲問題一直是語音識別的一個老大難的問題,在理想的實驗室的環境下,識別效果已經非常好了,之前聽很多音頻算法工程師抱怨,在給識別做降噪時,經常發現WER不降反升,降低了識別率,有點莫名其妙,又無處下手。
剛好,前段時間調到了AIlab部門,有機會接觸這塊,改善語音識別的噪聲問題,雖然在此之前,詢問過同行業的朋友,單通道近場下,基本沒有太大作用,有時反而起到反作用,但是自己還是想親身實踐一下,至少找到這些方法失效的原因,看看是否在這些失敗的原因里面,改進下思路,可能有新的發現;同時去Ailab,順帶把深度學習降噪實踐一把,就算在ASR沒有效果,以后還能用在語音通信這個領域。
任務的要求是保證聲學模型不變動的情況下,即不重新訓練聲學模型,即單純利用降噪來改善那些環境惡劣的樣本,同時保證不干擾純凈語音或者弱噪聲的語音場景,所以非常具有挑戰性。
為了趕項目,用自己非常熟悉的各種傳統的降噪方法:包括最小值跟蹤噪聲估計,MCRA, IMCRA,等各種噪聲估計方法,以及開源項目 webrtc NS, AFE(ETSI ES 202 050 Advanced DSR Front-end Codec, two stages of Wiener 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的,惡劣的場景比較少,一般場景大不了擴增各種帶噪數據訓練,也是可以的。
責任編輯:lq6
-
語音識別
+關注
關注
38文章
1721瀏覽量
112541 -
dnn
+關注
關注
0文章
59瀏覽量
9041
發布評論請先 登錄
相關推薦
評論