- 在TLG解码时,适当调大acoustic-scale,来保证am分数和lm分数在同一个量级上,可以使生成的Nbest更加准确,效果较好;
- 由于CTC spike的稀疏性,如果blank_skip_thresh太大,会降低解码速度,并造成漏字等删除错误,所以可以适当调小blank_skip_thresh,能够在rtf变化较小的情况下,明显降低短音频删除错误,提高识别准确率;
- 得到Nbest后,在AttentionRescore中除了原有的分数外,同时加入ngram的分数,相比不加ngram分数cer绝对值也能降低0.5%左右(就是在attention decoder计算路径得分时也进行加G分数)
在开源 WeNet 的基础上,我们还针对服务的内外客户的业务场景继续了大量优化措施的探索,分别考虑了声学模型和语言模型的优化,在大多数的场景中也都取得了一致性的优化效果:
- 在TLG解码时,适当调大acoustic-scale,来保证am分数和lm分数在同一个量级上,可以使生成的Nbest更加准确,效果较好
- 由于CTC spike的稀疏性,如果blank_skip_thresh太小,会降低解码速度,并造成漏字等删除错误,所以可以适当调大blank_skip_thresh,能够在rtf变化较小的情况下,明显降低短音频删除错误,提高识别准确率
- 得到Nbest后,在AttentionRescore中除了原有的分数外,同时加入ngram的分数,相比不加ngram分数cer绝对值也能降低0.5%左右
- runtime引擎中增加在线resample功能,可用一套模型处理不同采样率的音频请求,考虑到目前官方实现的使用的是sox的方案,我们更倾向于kaldi中使用的resample方法,这样训练和推理使用同样的方法会避免对CER的扰动
- 在大量语音使用场景中都专有名词的识别问题,端到端系统大多都采用TTS来合成语音数据,帮助为ASR来训练,有非常明显的识别效果
- 数据增强在生产系统中特别重要,能大大提高业务场景识别的鲁棒性,我们在数据处理阶段使用on-the-fly来模拟信道的方案对电话场景识别的帮助较为明显
- 与TLG并行加入动态语言模型的方案,该方案为我们基于原有kaldi系统开发,同时取得不错的场景名词优化效果
在工业系统中,RTF和Latency是在线方案中非常重要的指标,为了上线我们也实验了大量的方法,将有效果的方案列出来供大家参考:
- 将LM大小裁剪为原来一半大小,构图为TLG后RTF可相对降低30%左右,cer在合理范围内小幅上升(通常小于0.1%)
- 将TLG转为ConstFst后,RTF可相对降低10%左右,同时单进程内存占用降低50%左右,使得低资源的环境的部署成为可能
- 增加min_active选项,通过控制使用TLG解码时活跃token的数目,RTF带来成倍的降低
- 使用TCMalloc做内存管理,优化内存使用,降低RTF
- 除TorchScript模型外,同样我们结合ESPnet中的ONNX集成和借鉴作业帮使用ONNX的经验进行引擎推理优化,并开源了该方案ONNX模型的导出,从而在runtime中获得更优的推理速度,RTF降低大约25%