京东科技
京东科技集团是京东集团旗下专注于以技术为产业服务的业务子集团,致力于为企业、金融机构、政府等各类客户提供全价值链的技术性产品与解决方案。依托人工智能、大数据、云计算、物联网等前沿科技能力,京东科技集团打造出了面向不同行业的产品和解决方案,以此帮助全社会各行业、企业降低供应链成本,提升运营效率。京东科技融合了原京东数科技云与AI(原京东智联云)两大技术业务板块,现已成为整个京东集团对外提供技术服务的核心输出平台,拥有丰富的产业理解力、深厚的风险管理能力、用户运营能力和企业服务能力,能面向不同行业为客户提供行业应用、产品开发与产业数字化服务。
京东科技关于语音识别思考和探索
语音语义技术是计算机感知智能和认知智能非常重要的两个研究方向,语音技术负责信息获取和语言表达,语义技术则负责理解推理和内容创造,语音语义技术充当了人类和计算机之间交流沟通的重要桥梁,被认为是“人工智能皇冠上的明珠”。京东智能客服团队支撑了京东商城、京东物流、京东健康、京东科技等核心业务的智能客服服务,每天为5亿京东用户提供优质的服务;同时还在帮助政府、企业进行智能数字化转型,比如山西大同智能化市民热线,中联重科等。
语音识别在工业界一般采用Kaldi的识别系统方案,大部分情况下经过finetune能得到比较好的效果,比如针对京东内部的物流大家电商品预约进行配送的外呼场景,用户需要对机器人信息确认问题做一些简短的回答,比如:身份确认、商品确认、地址确认、时间确认等。使用kaldi的系统在识别准确率也可以满足业务需要,关键词的准确率能达到95%以上。除了线上能够满足业务的kaldi系统之外,为客户提供更好的语音识别服务是京东智能客服语音团队一直探索的方向。在此基础上,我们也在思考和探索其他的解决方案:
- kaldi中的pybind11分支上使用pytorch的model+kaldi chain的训练方案以加快训练速度,但该方案并没有摆脱hybrid系统训练的pipeline,步骤比较冗长。
- 在下一代kaldi的k2中,将加入有限状态转换器(Weighted Finite State Transducers, WFST)结合Pytorch实现Autograd,目前conformer的模型结果已优于kaldi的效果;值得继续跟进。
- 与此同时,我们在ESPnet上做了很多实验,实现了工业级大数据量上的多机多卡训练,完成了ONNX推理引擎的封装和上线。受限于ESPnet是非流式端到端模型,在人机实时交互的过程中由于延迟太高而影响交互体验,所以只能进行离线识别,比如质检系统,虽说识别效果较好,但由于没有动态热词语言模型对于业务领域的帮助,依然存在线上badcase比较难优化的问题。
- Wenet自发布以来受到了社区、工业界的大量关注,从开始就考虑从生产力出发,给出了端到端模型的流式非流式识别结合的训练方案U2,在解码中使用了ctc_greedy_search,ctc_prefix_beam_search, 对比attention_decoder之外还加入了非自回归方案attention_rescoring,很好的降低了自回归系统延迟。除此之外,还吸收了EESEN中关于TLG的做法,加入WFST来通过构建业务场景中的语言模型,从而给出了真实场景中badcase修复的比较好的方案。
我们针对以上分析,做成下列表格,供大家参考使用:

可以看到,WeNet吸收了众家所长,既可以在模型训练上达到在各数据集上SOTA的效果,也可以给出比较完善的工业方案。
基于 WeNet 的端到端语音识别优化方案与落地
我们首先把Wenet的技术方案落地到了京东内部的IM沟通工具中的语音识别上,最终Wenet技术方案比原有线上kaldi的系统在京东内部咚咚IM中CER相对下降50%,字准率提升到90%以上。同时使用优化引擎带来的速度提升,带来效率上的提升,使京东内部同学可以使用到最优质的语音识别引擎。
京东IM场景业务复杂,包含京东零售,京东物流,京东金融,京东健康等大量的专有名词场景,而且该场景涉及各业务部门的隐私,所以语音数据需要保密,不能拿来优化使用,我们通过TTS来合成包含专有名词的话术文本,很好地解决这种问题。数据隐私越来越受到客户的重视,保护客户隐私一直是我们做工作的重要前提,同时在对接的外部客户中也有很多数据敏感性的场景,我们使用TTS+语言模型热词的方案在该场景均能取得很好的效果。我们在其他业务场景中的实验还在同步进行中,从而使京东的客户能够第一时间使用到业界最先进的技术方案。
在开源 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%
以上大部分代码功能都已经在Wenet中实现,大家可以结合自己的场景来尝试更多更有效的优化方案,当然我们还有另外一些独到的方法,如果读者感兴趣,可以联系我们或在社区一起讨论。
京东助力开源 助力WeNet
京东在第一时间开源了基于Wenet在所有中文开源数据集multi_cn上做的识别recipe,其中考虑到部分数据集存在中英文混合数据,所以在建模单元上,中文采用了字、英文采用bpe这样端到端模型比较通用的中英文识别方案,模型的效果表现较好,结果如下:

目前该结果在社区的调优下又得到了继续的提升,可以看出该工具在单纯端到端不加语言模型的情况下,模型精度上也已经达到了SOTA的结果。
如前文所述,runtime引擎中增加在线resample、支持ONNX模型的导出我们也做了开源。
未来,京东智能客服团队也会持续助力开源,助力WeNet。也欢迎各位对我们团队感兴趣、有志于语音的同学加入京东智能客服团队,详请联系fanlu@jd.com。
相关链接
- resample 开源地址: https://github.com/fanlu/wenet/commit/bfded32a4f8c35fe1383bba5a45d29f0ffde40a0
- ONNX 支持开源地址:https://github.com/fanlu/wenet/commit/40062b065405280b5ae679c8e6d91a2333294d0a
- WeNet multi_cn 支持:https://github.com/wenet-e2e/wenet/pull/210
- kaldi: https://github.com/kaldi-asr/kaldi
- k2: https://github.com/k2-fsa/snowfall/pull/59
- ESPnet: https://github.com/espnet/espnet
- EESEN: https://github.com/srvk/eesen