基於ASRT中文語音識別系統的優化

該項目是基於CNN+CTC網絡實現,中文標註是拼音,解碼使用HMM,項目地址:https://github.com/nl8590687/ASRT_SpeechRecognition

該項目很不錯,但是本人用原版項目代碼進行訓練測試無法達到較好的效果,然後對其做了一些改動,時間有限最終拼音ER在11%左右,詞錯誤率WER 在33%左右,數據集使用aishell,thchs30,ST-CMDS

原版項目解釋可以參考github上的說明,比較詳細,下面說下優化部分:

模型架構使用VGG(微調結構適配頻譜圖)+CTC

原始VGG網絡:

 

其中微調版VGG結構:

Conv3-32

BatchNormalization

Conv3-32

BatchNormalization

maxpool

Conv3-64

BatchNormalization

Conv3-64

BatchNormalization

maxpool

Conv3-128

BatchNormalization

Conv3-128

BatchNormalization

Conv3-128

BatchNormalization

maxpool

Conv3-256

BatchNormalization

Conv3-256

BatchNormalization

Conv3-256

BatchNormalization

maxpool

Conv3-256

BatchNormalization

Conv3-256

BatchNormalization

Conv3-256

BatchNormalization

maxpool

Conv3-256

BatchNormalization

Conv3-256

BatchNormalization

Conv3-256

BatchNormalization

maxpool

FC-512

BatchNormalization

FC-512

BatchNormalization

一.聲學模型構建實驗

1.對原始模型進行測試,作者表述模型識別拼音的錯誤率在18.26%,我進行測試改模型識別拼音的錯誤率在21%左右。注意拼音解碼至文字序列也會增加錯誤率,在之前並未進行測試。

2.首先使用原始版本純RNN+CTC進行實驗,數據使用aishell1,修改部分是在每層RNN後增加batch normalization,訓練最好拼音錯誤率在18%

3.使用微調VGG + CTC ,對於dev和test集訓練最好結果拼音錯誤率在11%左右,train集的拼音錯誤率在0.1%左右,存在過擬合現象。

4.也嘗試使用 Rest_Net50 +CTC ,對於dev集訓練最好結果拼音錯誤率在 15%左右,所以最終選擇微調VGG + CTC

二.語言模型解碼實驗

使用基於HMM的viterbi解碼拼音至文字,並在源代碼進行優化解碼算法,在增加原有識別文字序列爲空時促發恐慌算法進行補償的基礎上,增加二次補償算法,增加了識別準確率。最終文字解碼錯誤率CER在33%左右。存在的問題有:識別序列長度與原標註不一致,會造成計算錯誤率上升很多,比如在序列中間多一個字但後面是正確的,也會計算爲後面文字全部爲錯誤。

另外對於HMM的轉移概率也進行了優化,原公式轉移概率=二元詞頻/二元詞第一個字的詞頻,修改爲轉移概率=pow(二元詞頻,2)/(二元詞第一個字的詞頻*二元詞第二個字的詞頻),增加考慮到第二個詞反向轉移到第一個詞的概率,經過大量試驗該項優化可以小幅度提升準確度。

在效率上,LanguageModel2.py代碼中選擇最優路徑算法使用雙層for循環時間複雜度O(N2),修改爲歸併排序時間複雜度O(NlogN),大幅度加快了解碼速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章