g
gcw_AVRCax4T/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

UniASR 语音识别模型 (Ascend NPU 适配版)

模型介绍

UniASR 是阿里巴巴达摩院提出的离线流式一体化语音识别模型(Universal ASR: Unifying Streaming and Non-Streaming ASR)。该模型同时具备高精度和低延时的特点,通过共享动态编码器结构,统一了离线、流式、低延迟三种语音识别场景,显著降低了模型生产和维护成本。

本仓库提供 Ascend NPU (昇腾910) 适配版本,支持在华为昇腾硬件上进行高性能推理。

  • 原始模型:iic/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online
  • 开源框架:FunASR

模型结构

UniASR 采用两遍解码(Two-pass)架构:

组件配置
Encoder (Streaming)SANM Encoder Chunk-Opt, 35 blocks, 1280 units
Encoder (Offline)SANM Encoder Chunk-Opt, 20 blocks, 1280 units
DecoderFSMN Decoder SCAMA-Opt, 12 blocks, 1024 units
PredictorCIF Predictor V2, 320 dim
FrontendWavFrontend, 16kHz, 80-dim mel
TokenizerCharTokenizer, 1067 vocab

支持三种解码模式:

  • fast 模式:低延迟实时出字(~600ms 延迟)
  • normal 模式:两遍解码,实时出字 + 3-6s 后刷新
  • offline 模式:高精度离线转写

NPU 适配环境

组件版本
CANN8.5.1
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
FunASR1.3.1
Ascend NPUAscend910 (2 cards)

依赖安装

pip install torch==2.9.0 torch_npu==2.9.0.post1
pip install funasr==1.3.1 modelscope soundfile librosa

模型下载

pip install modelscope
modelscope download --model iic/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online \
    --local_dir ./models/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online

NPU 推理

快速推理

python inference.py --mode npu --audio <path_to_wav>

NPU vs CPU 对比

python inference.py --mode all --audio <path_to_wav> --output results.json

性能基准测试

python inference.py --mode benchmark --bench-runs 50 --audio <path_to_wav>

Python API 示例

from funasr import AutoModel
import torch_npu
import soundfile as sf

# Load and move model to NPU
model = AutoModel(
    model="UniASR",
    model_path="./models/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online",
    device="cpu",
    disable_update=True,
    disable_log=True,
)
model.model = model.model.npu()
model.kwargs["device"] = "npu"
# Fix runtime config snapshot
if hasattr(model, "_base_kwargs_map"):
    model._base_kwargs_map.setdefault("kwargs", {})["device"] = "npu"

# Load audio and run inference
audio, sr = sf.read("audio.wav", dtype="float32")
if audio.ndim > 1:
    audio = audio.mean(axis=1)

result = model.generate(input=audio)
print(result[0]["text"])

精度评测

评测方法

在相同输入音频上,对比 NPU 推理结果与 CPU 基准结果的字符错误率(CER)和文本匹配度。

评测结果

指标结果
评测次数5
文本完全匹配5/5 (100%)
最大 CER0.0%
平均 CER0.0%
精度通过阈值CER < 1%

运行精度评测

python evaluate.py --accuracy-runs 5 --perf-runs 50 --output evaluation_report.json

性能评测

测试环境

  • 硬件: Ascend910 NPU (x2)
  • 音频: 16kHz, 3.5s, 单声道
  • 预热: 5 轮

性能数据

指标数值
平均延迟0.759s
P50 延迟0.758s
P95 延迟0.784s
P99 延迟0.796s
标准差0.017s
RTF (实时率)0.217
NPU vs CPU 加速比1.42x

RTF < 1.0 表示推理速度快于实时,可满足流式语音识别需求。

文件说明

文件说明
inference.pyNPU 推理脚本,支持 NPU/CPU 对比和性能基准测试
evaluate.py精度与性能评测脚本,输出详细评测报告
evaluation_report.json评测结果 JSON 报告
models/模型文件目录

模型局限性

  • 建议输入语音时长在 20s 以下
  • 当前适配版本仅支持离线(offline)解码模式
  • 流式(fast/normal)模式的 NPU 适配需要进一步开发

引用

@inproceedings{gao2020universal,
  title={Universal ASR: Unifying Streaming and Non-Streaming ASR Using a Single Encoder-Decoder Model},
  author={Gao, Zhifu and Zhang, Shiliang and Lei, Ming and McLoughlin, Ian},
  booktitle={arXiv preprint arXiv:2010.14099},
  year={2010}
}

License

Apache License 2.0