基于ASRT中文语音识别系统的优化

  • Post author:
  • Post category:其他


该项目是基于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),大幅度加快了解码速度。



版权声明:本文为u011930705原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。