经过 Dan 长时间以来对声学模型的持续优化,我们终于确定了新版的 Zipformer 结构,并提交代码至:

github: https://github.com/k2-fsa/icefall/pull/1058

首先,我们对新版 Zipformer 的优点作简单概括:
  • 快:收敛快;计算快
在 LibriSpeech 数据集上,对于 3 倍 speed perturb 的数据,一般只需训练 30 个 epoch 左右,便可取得媲美其他框架上百 epoch 的效果;在计算速度上,明显优于现有的其他声学模型。
  • 稳:半精度训练稳定
据我们了解(不谦虚地讲),新一代 kaldi 的模型,是开源语音(识别)框架中,为数不多的,支持稳定半精度训练的。如果半精度训练不稳定,欢迎在 github 提 issue。
  • 准:识别精度高
在 LibriSpeech 数据集上,WER 更接近 Conformer 原论文。不同参数规模的 Zipformer,均取得了优异的识别性能。
本文不具体介绍 Zipformer 模型的原理细节,只展示相关结果。我们会在后续公众号文章对 Zipformer快稳准的原因作详细的解读分析 。
我们希望新版 Zipformer 可以帮助大家在工业应用和学术研究上,以更快的速度训练出性能更好的 ASR 模型。

不同参数规模的模型表现

下面的表格展示了三个不同规模的 Zipformer,在 LibriSpeech 数据集 test-clean & test-other 的 WER,训练数据经过3 倍 speed perburb。
  • normal-scaled model (65.5 M), max-duration=1000, ~1h7m per epoch on 4 * V100-32GB gpus
  • small-scaled model (23.2M), max-duration=1500, ~1h30m per epoch on 2 * V100-32GB gpus


  • large-scaled model (148.4M), max-duration=1000, ~1h20m per epoch on 4 * V100-32GB gpus


与 icefall 中现有的模型比较

对于 icefall 四个常用的声学模型:包括普通 Conformer、reworked Conformer、旧版 Zipformer、新版 Zipformer,我们比较它们在 LibriSpeech 数据集 test-clean & test-other 的 WER,解码方法为 greedy-search。

我们使用nvtx[1]分析工具,可视化比较以上四个声学模型的推理速度。每个 batch 的 tensor shape 为 (20, 3000, 80)。可以发现,新版 Zipformer 的推理速度,明显优于其他其他三个。
  • regular Conformer, 83.5 M (pruned_transducer_stateless[2])


  • reworked Conformer, 77.1 M (pruned_transducer_stateless2[3])


  • old Zipformer, 68.9 M (pruned_transducer_stateless7[4])


  • upgraded Zipformer, 64.0 M


与 SOTA 模型比较

我们将 Zipformer 与现有的 SOTA 模型比较,包括Conformer[5]、BranchFormer[6]、SqueezeFormer[7]。下表展示了不同模型在 LibriSpeech 数据集 test-clean & test-other 的 WER。数据摘自原论文,没有作说明的标记为 unknown。 可以看出,相比较其他 SOTA 模型,Zipformer 的识别精度更加逼近Conformer 原论文的结果。


流式模型表现

另外,我们已经实现新版 Zipformer 的流式版本,下表展示了 66.1 M 的 Zipformer 在 LibriSpeech 数据集上,以不同的 chunk 大小进行流式推理的表现。该模型在 3 倍 speed perburb 的数据上,训练了 30 个 epoch,解码方法为 greedy-search。
  • The chunk size is at 50Hz frame rate

后续计划

  • 我们将着重维护以及引导用户重点使用这个新的 recipe,并陆续添加其他特性,如 CTC + Attention decoder 框架,多数据集训练, language model rescoring, delay penalty, 等等。

  • 为其他数据集添加 zipformer recipe,如 AiShell、WenetSpeech。

  • 支持服务端模型部署,包括sherpa[8]、sherpa-onnx[9]、sherpa-ncnn[10]。

参考资料

[1]nvtx: https://nvtx.readthedocs.io/en/latest/

[2]pruned_transducer_stateless: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless

[3]pruned_transducer_stateless2: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless2

[4]pruned_transducer_stateless7: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless7

[5]Conformer: https://arxiv.org/pdf/2005.08100.pdf

[6]BranchFormer: https://arxiv.org/pdf/2207.02971.pdf

[7]SqueezeFormer: https://arxiv.org/pdf/2206.00888.pdf

[8]sherpa: https://github.com/k2-fsa/sherpa

[9]sherpa-onnx: https://github.com/k2-fsa/sherpa-onnx

[10]sherpa-ncnn: https://github.com/k2-fsa/sherpa-ncnn