zoukankan      html  css  js  c++  java
  • 语音识别算法阅读之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较大的类别,其在损失中的权重项越小,比如当pt=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:
  • 相关阅读:
    JVM学习笔记之认识JDK(一)
    C#发送邮件异常:根据验证过程,远程证书无效
    windows下使用mysql双机热备功能
    批处理实现mysql的备份
    WebApi FormData+文件长传 异步+同步实现
    Oracle中已知字段名查询所在的表名
    mstsc遇到CredSSP加密Oracle修正
    使用subgit进行svn迁移至git(branch,tags)
    使用guava进行对字符串的加锁
    使用spring-data-solr做solr客户端
  • 原文地址:https://www.cnblogs.com/zy230530/p/13681892.html
Copyright © 2011-2022 走看看