THE SPEECHTRANSFORMER FOR LARGE-
论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8682586
代码链接:https://github.com/kaituoxu/Speech-Transformer
思想:
在speech transformer 的基础上进行三点改进:
1.降低帧率
2.计划采样
3.焦点损失
模型整体框架采用的即是transformer的encoder-decoder形式, m-attention —— ffn —— r-connection —— LN —— pos
tricks:
1. 低帧率
对特征提取后的frames进行降采样,原始帧率为100hz,每帧10ms,降采用后的帧率为16.7hz,每帧60ms,在大规模语音识别,尤其对于长时语音输入,降低帧率到合适的大小,在几乎不影响精度的同时,可加快计算效率,代码中用的时100/3=33.3hz

优点:
1).减少输入序列长度,提高计算效率
2).使得 encoder decoder 的注意力更容易,通过mLFR处理、特征叠加和下采样,可以产生更稀疏但信息更丰富的特征
2.计划采样
针对sequence-to-sequence框架下的decoder阶段,在训练时,生成时,输入的
是训练集中标注序列中的true value, 然后在预测是,输入的
是在t-1时刻生成的label, 该标签可能是正确的,也可能是预测错误的标签,如果是错误的标签就会导致一个问题,就是错误爆炸,说白了就是
是错误标签,那么以它为输入生成的
也是不可信的。针对这种问题,提出了scheduled sampling的解决方法。
Scheduled Sampling是指训练时时会随机使用模型真实label来作为下一个时刻的输入,而不像原先那样只会使用预测输出。
训练时网络将不再完全采用真实序列标记做为下一步的输入,而是以一个概率p选择真实标记,以1-p选择模型自身的输出。“计划采样”即p的大小在训练过程中是变化的,就像学习率一样。作者的思想是:一开始网络训练不充分,那么p尽量选大值,即尽量使用真实标记。然后随着训练的进行,模型训练越来越充分,这时p也要减小,即尽量选择模型自己的输出。这样就尽量使模型训练和预测保持一致。

3.焦点损失
模型是以字符为建模单元时,训练语料中每个字符的出现频率可能相差很大,导致类别之间的不均衡问题,为缓解该问题,在计算loss时,对于分类概率大的样本进行降权,对分类概率小的样本进行升权,这样会使得模型更加关注被误分类的hard样本

上式中,γ 属于 [0, 5],对于pt较大的类别,其在损失中的权重项越小,比如当pt=0.9时,γ=2,那么其权重缩小了(1-0.9)^2=1/100,反之,预测概率越小,其权重越大;该策略使得模型训练更关注被误分类的样本

实验结果:
降低帧率时,识别效果呈现先上升后下降的趋势,当帧率=17.6hz,即60ms每帧时,在提升计算效率的同时,得到最佳的识别效果

三种计划采样中,线性采样的效果最好,并且采样概率在训练初始阶段稍小,而在训练后期阶段稍大

Focal Loss的应用可以对识别效果带来进一步的提升

结论:
在speechTransformer基础上进行一系列的改进,1)低帧率,提升计算效率;2)计划采样减少训练和预测偏差,以一定概率决定是否采样前一时刻预测输出作为输入;3)Focal Loss,缓解字符类别之间的数据不均衡问题;实验结果表明,三者均可以对模型效果带来提升,相比于speechTransformer提升幅度在10.8%~26.1%;相比于TDNN-LSTM混合系统提升12.2%~19.1%。
实战:https://github.com/kaituoxu/Speech-Transformer
环境: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%