噪聲問題一直是語音識別的一個老大難的問題,在理想的實驗室的環境下,識別效果已經很是好了,以前聽不少音頻算法工程師抱怨,在給識別作降噪時,常常發現WER不降反升,下降了識別率,有點莫名其妙,又無處下手。前端
恰好,前段時間調到了AIlab部門,有機會接觸這塊,改善語音識別的噪聲問題,雖然在此以前,詢問過同行業的朋友,單通道近場下,基本沒有太大做用,有時反而起到副作用,可是本身仍是想親身實踐一下,至少找到這些方法失效的緣由,看看是否在這些失敗的緣由裏面,改進下思路,可能有新的發現;同時去Ailab,順帶把深度學習降噪實踐一把,就算在ASR沒有效果,之後還能用在語音通訊這個領域。web
任務的要求是保證聲學模型不變更的狀況下,即不從新訓練聲學模型,即單純利用降噪來改善那些環境惡劣的樣本,同時保證不干擾純淨語音或者弱噪聲的語音場景,因此很是具備挑戰性。算法
爲了趕項目,用本身很是熟悉的各類傳統的降噪方法:包括最小值跟蹤噪聲估計,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.降噪對於純淨語音或者弱噪聲環境下,不可避免的對語音有所損傷,只有在惡劣的環境下,會起到很是明顯的做用。spa
傳統降噪是基於統計意義上面的一個處理,難以作到瞬時噪聲的精準估計,這個自己就是一個近似的,粗略模糊化的一個處理,即不可避免的對噪聲欠估計或者過估計,自己難把握,保真語音,只去噪,若是噪聲水平很弱,這個降噪也沒有什麼用或者說沒有明顯做用,去噪力度大了,又會破壞語音。能夠預見,根據測試集進行調參,就像是在繩子上面玩雜技。排序
咱們的測試樣本集,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的,惡劣的場景比較少,通常場景大不了擴增各類帶噪數據訓練,也是能夠的。
咱們的線上數據,影響識別的因素排序是口語化,方言,短詞,其次纔是噪聲,另外,少許混響,語速,音量,也是影響因素之一,以上是本身的一點片面之言,但願對你們有參考意義,少走彎路。