出门问问联合西北工业大学音频语音与语言处理研究组推出面向产品和工业界的端到端语音识别开源工具WeNet,WeNet致力于消除从端到端模型研究到产品落地中的鸿沟,探索更适合工业级产品的端到端解决方案。


目前WeNet项目已经开源到

https://github.com/mobvoi/wenet

并已有超过200个star。


并且,出门问问和西北工业大学针对WeNet工具和其核心算法U2(Unified Two Pass)分别撰写了论文进行介绍,详情参考:


WeNet

https://arxiv.org/pdf/2102.01547.pdf

U2

https://arxiv.org/pdf/2012.05481.pdf

 

对此,西北工业大学计算机学院教授、博士生导师、音频语音与语言处理研究组(ASLP@NPU)负责人谢磊表示:WeNet基于高效的U2端到端语音识别方案,集成流式和非流式解码为一体,工具包多层架构同时满足面向科研和工业化部署双重需求,是一套易用高效的端到端语音识别工具包,极大地降低了大家学习、科研和工程化门槛。

出门问问CTO Mike Lei表示:WeNet是业界第一个面向工业级产品的开源端到端语音识别解决方案,同时支持流式及非流式识别,并能高效运行于云端及嵌入式端。

 

那工业界在落地端到端模型时存在哪些问题,WeNet又是如何解决这些问题的呢?


WeNet如何解决这些问题?

为了解决流式问题、统一模型问题和产品落地问题,WeNet选择了如下解决方案,提供了一套简单、高效、易于产品化的解决方案:


模型架构选择

WeNet中采用的U2模型,如下图所示,该模型使用Joint CTC/AED的结构,训练时使用CTC和Attention Loss联合优化,并且通过dynamic chunk的训练技巧,使Shared Encoder能够处理任意大小的chunk(即任意长度的语音片段)。在识别的时候,先使用CTC Decoder产生得分最高的多个候选结果,再使用Attention Decoder对候选结果进行重打分(Rescoring),并选择重打分后得分最高的结果作为最终识别结果。识别时,当设定chunk为无限大的时候,模型需要拿到完整的一句话才能开始做解码,该模型适用于非流式场景,可以充分利用上下文信息获得最佳识别效果;当设定chunk为有限大小(如每0.5秒语音作为1个chunk)时,Shared Encoder可以进行增量式的前向运算,同时CTC Decoder的结果作为中间结果展示,此时模型可以适用于流时场景,而在流失识别结束时,可利用低延时的重打分算法修复结果,进一步提高最终的识别率。可以看到,依靠该结构,我们同时解决了流式问题和统一模型的问题。



系统设计

为解决落地问题,同时兼顾简单、高效、易于产品化等的准则,WeNet做了如下图的三层系统设计。


第一层为PyTorch及其生态。WeNet充分利用PyTorch及其生态以达到使用方便、设计简洁和易于产品化的目标。其中,TorchScript用于开发模型,Torchaudio用于on-the-fly的特征提取,DistributedDataParallel用于分布式训练,Torch JIT(Just In Time)用于模型导出,Pytorch Quantization用于模型量化,LibTorch用于产品模型的推理。

 

第二层分为研发和产品化两部分。模型研发阶段,WeNet使用TorchScript做模型开发,以保证实验模型能够正确的导出为产品模型。产品落地阶段,用LibTorch Production做模型的推理。

 

第三层是一个典型的研发模型到落地产品模型的工作流。其中:

  • Data Prepare:

数据准备部分,WeNet仅需要准备kaldi风格的wav列表文件和标注文件。

  • Training:

WeNet支持on-the-fly特征提取、CTC/AED联合训练和分布式训练。

  • Decoding:

支持python环境的模型性能评估,方便在正式部署前的模型调试工作。

  • Export:

研发模型直接导出为产品模型,同时支持导出float模型和量化int8模型。

  • Runtime:

WeNet中基于LibTorch提供了云端X86和嵌入式端Android的落地方案,并提供相关工具做准确率、实时率RTF(real time factor), 延时(latency)等产品级别指标的基准测试。


嵌入式端Android流式语音识别

WeNet中开发了嵌入式端Android平台的离线流式端到端语音识别,该示例中使用aishell训练的U2 transformer模型,并对模型进行8bit的量化。

【戳我看样例视频】

云端X86流式语音识别

为模拟云端流式语音识别,WeNet中开发了基于WebSocket的流式方案,其中包含Server和Client两个部分,如视频演示了一次实时语音请求的过程,左侧为Server界面,右侧为Client界面。

【戳我看样例视频】