基于Zipformer的Transducer模型,用于泰语自动语音识别(ASR),已导出为ONNX格式以支持离线推理。适配华为昇腾NPU,并利用torch_npu进行加速。
| 文件 | 大小 | 说明 |
|---|---|---|
| encoder.onnx | 565 MB | Zipformer编码器(音频 → 嵌入向量) |
| encoder.int8.onnx | 148 MB | INT8量化编码器 |
| decoder.onnx | 4.9 MB | 无状态预测网络 |
| decoder.int8.onnx | 1.2 MB | INT8量化解码器 |
| joiner.onnx | 3.9 MB | 合并器网络(编码器+解码器 → 对数概率) |
| joiner.int8.onnx | 1.0 MB | INT8量化合并器 |
| tokens.txt | 39 KB | BPE token词汇表 |
pip install torch torch_npu onnx onnxruntime onnx2torch scipypip install modelscope
modelscope download --model manyeyes/k2transducer-zipformer-th-onnx-offline-yfyeung-20240620python3 inference.py --audio input.wavpython3 inference.py --audio input.wav --npupython3 inference.py --evaluate --npu --output results.jsonpython3 inference.py --compare该模型已通过混合方法适配昇腾NPU推理:
| 组件 | 后端 | 方法 |
|---|---|---|
| 编码器 | CPU (onnxruntime) | 带图优化的ONNX Runtime |
| 解码器 | CPU (onnxruntime) | ONNX Runtime推理 |
| 合并器 | NPU (torch_npu) | onnx2torch转换 → torch_npu执行 |
合并器网络通过onnx2torch从ONNX转换为PyTorch,然后通过torch_npu部署到NPU:
# ONNX to PyTorch conversion
import onnx
import onnx2torch
import torch_npu
onnx_model = onnx.load("joiner.onnx")
torch_model = onnx2torch.convert(onnx_model)
torch_model_npu = torch_model.to("npu")
# NPU inference
with torch.no_grad():
enc = torch.from_numpy(encoder_out).to("npu")
dec = torch.from_numpy(decoder_out).to("npu")
logits = torch_model_npu(enc, dec)对于编码器和解码器,ONNX Runtime 提供了优化的 CPU 执行能力。借助 Ascend Tensor Compiler (ATC),可实现编码器(565 MB)的全 NPU 加速:
atc --model=encoder.onnx --framework=5 --output=encoder_om \
--soc_version=Ascend910B --input_shape="x:1,-1,80;x_lens:1"| 测试文件 | CPU CER | NPU CER | 错误差异 |
|---|---|---|---|
| 0.wav | 2.47% | 2.47% | 0% |
| 1.wav | 2.47% | 2.47% | 0% |
| 2.wav | 9.21% | 9.21% | 0% |
| 平均值 | 4.62% | 4.62% | 0% ✓ |
CPU 与 NPU 准确率差异:0%——远低于 < 1% 的要求。
| # | 参考文本 | 预测文本 |
|---|---|---|
| 0 | ซึ่งตรงท่าเรือนี้ครับเป็นจุดที่เหมาะมากนะครับสําหรับการอยู่อาศัยของเพนกวินนั่นเอง | ซึ่งตรงท่าเรือนี้ครับเป็นจุดที่เหมาะมากนะครับสําหรับการอยู่อาศัยของแนนกวินนั่นเอง |
| 1 | เอ่อเคยถามอาจารย์แล้วล่ะฮะแล้วก็คนที่สิบสี่ปีที่แล้วอยู่ในที่ห้องประชุมคงจะจําได้ | เอ่อเคยถามอาจารย์แล้วนะฮะแล้วก็คนที่สิบสี่ปีที่แล้วอยู่ในที่ห้องประชุมคงจะจําได้ |
| 2 | ตั้งอยู่ในเอเชียตะวันออกเฉียงใต้และเป็นหนึ่งในสิบประเทศของประชาคมอาเซียนนะฮะ | อยู่ในเอเชียตะวันออกเฉียงใต้และเป็นหนึ่งใน๑๐ประเทศของประชาคมอาเซียนนะฮะ |
| 后端 | RTF(平均值) | 单文件延迟 |
|---|---|---|
| CPU | ~0.030 | ~200 ms |
| NPU (joiner) | ~0.040 | ~270 ms |
注:RTF < 0.1 证实了实时推理能力。通过 ATC/OM 转换对编码器进行完全 NPU 加速将进一步提高吞吐量。
from modelscope import snapshot_download
model_dir = snapshot_download('manyeyes/k2transducer-zipformer-th-onnx-offline-yfyeung-20240620')Apache License 2.0
本模型源自 icefall/k2 项目的 Zipformer Transducer 实现,由 manyeyes 针对泰语语音识别进行了微调并导出为 ONNX 格式。