語音識別算法閱讀之SpeechTransformer(large mandarin)


論文:
  THE SPEECHTRANSFORMER FOR LARGE-SCALE MANDARIN CHINESE SPEECH RECOGNITION
思想:
  在speechTransformer基礎上進行三點改進,
  1)降低幀率,縮短聲學特征的時序長度,在大規模語音數據訓練時提升計算效率;
  2)decoder輸入采樣策略,如果訓練時,decoder部分輸入全部采用label,而預測時decoder部分為前一時刻預測輸出,這樣訓練和預測之間會存在一定的偏差,為緩解該問題,在訓練decoder時,以一定的采樣概率決定該時刻decoder輸入是否采用前一時刻的預測輸出;
  3)Focal Loss,因為模型是以字符為建模單元的,在訓練語料中很難保證每個字符的出現頻率基本相近,相反字符之間可能存在較大的頻次差異,這就會導致類別之間的不均衡問題,為緩解該問題,在計算loss時,對於分類概率大的樣本進行降權,對分類概率小的樣本進行升權,這樣會使得模型更加關注被誤分類的hard樣本;
模型:
  模型整體框架采用的即是transformer的encoder-decoder形式,主要包含幾個模塊
  • multi-head attention模塊,該模塊是一種非循環的attention機制,思想有些類似於模型融合,即先將輸入聲學特征轉換到多個不同的attention子空間分別學習特征表達,然后再將各個子空間的輸出進行拼接,得到具有較高特征表達能力的encoder
  • feed-forward network,前饋網絡由一到兩層全連接組成,全連接激活函數ReLU
  • resnet connection,在每個multi-head attention模塊和feed-forward network的輸出位置條件添加resnet connection,保證淺層信息傳播和訓練穩定性
  • Layer norm,在每個multi-head attention模塊和feed-forward network的輸入之間添加Layer norm,歸一化輸入的分布,保證訓練穩定性
  • 位置編碼,對encoder和decoder的輸入進行位置編碼add操作,引入絕對位置和相對位置信息,緩解attention對於時間順序和位置信息的不敏感性
tricks:
  • 低幀率,對特征提取后的frames進行降采樣,原始幀率為100hz,每幀10ms,降采用后的幀率為16.7hz,每幀60ms,在大規模語音識別,尤其對於長時語音輸入,降低幀率到合適的大小,在幾乎不影響精度的同時,可加快計算效率
 上圖,對應采樣因子為4,那么采樣后的幀率為100/n=25hz,每幀1000/25=40ms
  • deocder輸入采樣,如果decoder在訓練時輸入完全采用label對應編碼作為輸入,而預測時deocder輸入為上一時刻預測輸出,這樣造成訓練和預測之間會存在一定的偏差,為緩解該問題,可以以一定的概率決定在該時刻是否采用上一時刻的預測輸出作為deocder輸入;此外,因為模型在訓練初始階段,預測能力較差,所以預測不夠准確,以此做為decoder輸入可能影響模型訓練穩定性,所以,在訓練初始階段采用較小的采樣概率,而在訓練中后期時采用較大的采樣概率;概率的變化趨勢有如下三種選擇:
  其中, 0 < εmax ≤ 1,Nst為采樣開始的step,Ned為采樣概率達到max的εstep,i為當前step,ε(i)為當前的采樣概率
  • Focal Loss,模型是以字符為建模單元時,訓練語料中很難保證每個字符的出現頻率可能相差很大,導致類別之間的不均衡問題,為緩解該問題,在計算loss時,對於分類概率大的樣本進行降權,對分類概率小的樣本進行升權,這樣會使得模型更加關注被誤分類的hard樣本;
   上式中,γ 屬於 [0, 5],對於pt較大的類別,其在損失中的權重項越小,比如當p t=0.9時,γ=2,那么其權重縮小了(1-0.9)^2=1/100,反之,預測概率越小,其權重越大;該策略使得模型訓練更關注被誤分類的樣本

訓練:

  • 訓練數據集:8000小時中文普通話數據
  • 驗證集:aishell-1 dev 14326utts
  • 測試集:aishell-1 test 7176utts;LiveShow:5766utts;voiceComment:5998utts
  • baseline:TDNN-LSTM,7*TDNN(1024)+3*LSTMP(1024-512)+4-gram LM
  • 輸入特征:40 MFCCs,global CMVN,batch_size=512
  • 輸出單元:5998中文字符+<UNK>+<PAD>+<S>+<\S>=6002
  • speechTransformer模型參數:6*encoder+4*decoder,dmodel=512,head=16
  • 優化方法:Adam,β1 = 0.9, β2 = 0.98, ε = 10−9
  • 學習率:n是迭代次數,k為可學習縮放因子,學習率在前warmup_n迭代步數線性上升,在n-0.5迭代次數時停止下降
  • 標簽平滑策略[1]:降低正確分類樣本的置信度,提升模型的自適應能力,ε=0.2

 

其中,H為cross-entropy, ε為平滑參數,K為輸出類別數,δk,y=1 for k=y and 0 otherwise
  • 模型訓練后,以最后15個保存的模型的平均參數,做為最終模型
  • 驗證時,beam search的beam width=3,字符長度懲罰α = 0.6
實驗結果:
  • speechTransformer與TDNN-LTSTM混合系統在幾個測試集上性能相近;具體地,在aishell-1 test/dev和voiceCom上略差於混合系統;在liveshow上略優於混合系統;
  • 降低幀率時,識別效果呈現先上升后下降的趨勢,當幀率=17.6hz,即60ms每幀時,在提升計算效率的同時,得到最佳的識別效果
  • 三種decoder輸入采用中,線性采樣的效果最好,並且采樣概率在訓練初始階段稍小,而在訓練后期階段稍大
  • Focal Loss的應用可以對識別效果帶來進一步的提升
結論:
  在speechTransformer基礎上進行一系列的改進,1)低幀率,提升計算效率;2)decoder輸入采樣減少訓練和預測偏差,以一定概率決定是否采樣前一時刻預測輸出作為輸入;3)Focal Loss,緩解字符類別之間的數據不均衡問題;實驗結果表明,三者均可以對模型效果帶來提升,相比於speechTransformer提升幅度在10.8%~26.1%;相比於TDNN-LSTM混合系統提升12.2%~19.1%
  環境:python3/pytorch>=0.4.1/kaldi
  模型參數:
  • 特征維度80,幀率100/3=33.3hz
  • 6*encoder+6*decoder;
  • dmodel=512;
  • head nums=8;
  • feed-forward network hidden size=2048;
  • decoder embedding=512;
   訓練參數:
  • 數據集:aishell train/dev/test
  • epoch=30
  • batch size=32
  • 學習率:可調縮放因子k=1,學習率線性上升迭代次數warmup_steps=4000
  • 優化方法:adam,β1 = 0.9, β2 = 0.98, ε = 10−9
  • beam search解碼:beam width=1
  實驗效果:aishell1 test cer: 12.8%
Reference:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM