當前位置:
首頁 > 最新 > 改進語音識別性能的數據增強技巧

改進語音識別性能的數據增強技巧

端對端語音識別改進的規則技巧

今天分享給大家是一篇來自Salesforce Research的文章。

參考文獻

Improved Regularization Techniques for End-to-End Speech Recognition, Yingbo Zhou, Caiming Xiong, Richard Socher.

對於端對端模型來說,通過數據增強和Dropout的方法可以提高模型的性能。在語音識別中也是如此,之前,我公眾號沒有寫過關於語音識別任務的數據增強的技巧,最近做了大規模的語音識別實踐發現,數據增強對於小數據集而言簡直就是雪中送炭,當然,如果你擁有大體量的數萬小時的語音資料庫,而且又能囊括全國各地不同口音風格,那麼數據增強理論上也能起到錦上添花的作用。今天基於Salesforce Research的這篇文章以及自己平時的實踐經驗,來分享一下語音識別任務中除了模型以外的可以提升性能的技巧。

這篇論文中提到,通過對音頻的速度、音調、音量、時間對齊進行微小的擾動,以及通過增加高斯白雜訊來對音頻進行改動,同時,文章也探討了在每一層神經網路上採用dropout所帶來的效果。實驗結果表明,通過將數據增強技術與dropout聯合使用,可以將語音識別模型的性能在WSJ資料庫上和LibriSpeech資料庫上相比baseline系統提高20%以上,從結果上看,這些規則化技巧對語音識別的性能改進有很大的幫助。我們先看一下作者基於什麼模型來實踐這些數據增強的技巧。

本文使用的端對端模型非常接近於百度提出的Deep Speech2 (DS2),如上圖所示,原始特徵數據首先經過一個較大卷積核的卷積層,卷積核較大的好處就是對原始特徵進行降維,降維以後通過5個殘差連接區,而每一個殘差區都是由批歸一化層、channel-wise卷積層和1×1的卷積層構成,並通過relu激活函數,緊接著連上4個雙向GRU網路,最終通過全連接層得到目標概率分布,並採取端對端的CTC損失函數作為目標函數,使用隨機梯度下降演算法來進行優化。這裡相比DS2所做的創新主要是channel-wise可分離的卷積層,其實就是depth-wise可分離卷積層,它相比常規的卷積具有性能好、參數減少的優勢,它們在參數數量上的區別可以通過下面的例子看得出來(具體關於可分離卷積的介紹,可以搜索xception這篇文章):

假設現在要做一個卷積,輸入深度是128,輸出深度是256;

常規的操作使用卷積核3×3進行卷積,那麼參數數目為128×3×3×256=294912;

depth-wise可分離卷積的操作是設置depth multiplier=2得到深度為2×128的中間層,再經過1×1的卷積層降維到深度為256,參數數目為128×3×3×2+128×2×1×1×256=67840,可以看到相比常規卷積,參數減少了77%;

除了使用了depth-wise可分離卷積層以外,殘差連接以及在每一層上都採取了批歸一化的技巧對訓練有促進作用,整個網路共有約500萬個參數。參數太大就容易出現過擬合的問題,為了避免過擬合,作者嘗試探索了數據增強和dropout兩種技巧來提升系統的性能。

1. 數據增強

在此之前,Hinton曾經提出使用Vocal Tract Length Perturbation (VTLP)的方法來提升語音識別的性能,具體的做法就是在訓練階段對每一個音頻的頻譜特徵施加一個隨機的扭曲因子,通過這種做法Hinton實現了在TIMIT小數據集上的測試集表現提升了0.65%,VTLP是基於特徵層面所做的數據增強技巧,不過後來也有人發現通過改變原始音頻的速度所帶來的性能提升要比VTLP好。但是音頻速度的快慢實際上會影響到音調(pitch),所以提高了音頻的速度必然也就增大了音頻的音調。反過來也是,降低了音頻的速度就會使得音頻的音調變小。所以,僅僅通過調節速度的方法就不能產生速度快同時音調低的音頻,這就使得音頻的多樣性有所降低,對語音識別系統的性能提升有限。作者在本文中希望能夠通過數據增強來豐富音頻的變化,提升數據的數量和多樣化,於是作者採取將音頻的速度通過兩個單獨的變數來控制,它們分別是tempo和pitch,也就是節奏和音高,對音頻的節奏和音高的調節可以通過語音的瑞士軍刀——SOX軟體來完成。

除了改變tempo和pitch以外,作者還添加了高斯白雜訊、改變音頻的音量以及隨機對部分原始音頻的採樣點進行扭曲操作。

2. dropout

dropout是Hinton提出來的一種防止深度神經網路出現過擬合的技巧,它的做法是在訓練神經網路的時候隨機地讓某些神經元的輸入變為0,公式如下所示,通過生成一個概率為1-p的伯努利分布再與神經元的輸入進行點乘,即可得到dropout以後的輸入;而在推理階段,我們只需要對輸入乘以伯努利分布的期望值1-p即可。dropout對於前向神經網路作用很明顯,但是應用到循環神經網路中的時候,很難取得較好的效果。

作者在本文中採取的dropout是不隨時間變化的,即對於一個序列的不同時刻,產生dropout的伯努利分布是共享的,而在推理階段,仍然是乘以伯努利分布的期望值1-p。作者在卷積層和循環層都是採取了這個變種的dropout,而在全連接層則是採取了標準的dropout。

3. 實驗細節

作者採取的數據集是LibriSpeech和WSJ,輸入到模型的特徵是語音的頻譜圖(spectrogram),以20ms為一幀,步長設為10ms。同時,作者對特徵做了兩個層次的歸一化,分別是把頻譜圖歸一化成均值為0標準差為1的分布,以及對每一個特徵維度進行同樣的歸一化,不過這個特徵維度的歸一化是基於整體訓練集的統計來做的。

數據增強部分,作者基於tempo的增強參數是取自(0.7, 1.3)的均勻分布,基於pitch的增強參數是取自(-500, 500)的均勻分布,添加高斯白雜訊的時候將信噪比控制在10-15分貝,同時在調整速度方面,作者分別使用了0.9,1.0和1.1作為調整的係數。綜合上面所有數據增強技巧,如下圖所示,模型的性能相比沒有這些技巧的baseline提高了20%。

dropout同樣提升了模型的性能,dropout概率作者對數據設置了0.1,對卷積層設置了0.2,對所有的循環層和全連接層設置了0.3,通過dropout,模型性能提高了22.43%,結合dropout和數據增強,模型整體性能提高了23.39%。

4. 總結

本文應該是對語音識別中的數據增強和規則化技巧做了總結,雖然實驗用的數據集是時長比較短的數據集,但是這些數據集對於我們部署一個實際的語音識別系統也很重要。對於中文普通話語音識別而言,不論是不同人說話的語速、語調,還是不同地方的人說普通話的口音,這些導致語音識別的難度非常大,如果想去採集各個地方不同人所說的普通話語料,對於小公司或者小團隊而言,是非常不現實的一件事情。所以,如何基於有限的普通話語料去使用數據增強演算法來人工構建一個可以模擬全國各個地方不同口音分布的強大語料是一個不得不面對的實際難題,而解決了這個難題實際上也就能極大程度地提升語音識別的魯棒性。

題圖:《Fork in the Road

深度學習每日摘要|堅持技術,追求原創

微信ID:deeplearningdigest


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 深度學習每日摘要 的精彩文章:

聊一聊TensorFlow的數據導入機制

TAG:深度學習每日摘要 |