論文:
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: