UniASR 是阿里巴巴达摩院提出的离线流式一体化语音识别模型(Universal ASR: Unifying Streaming and Non-Streaming ASR)。该模型同时具备高精度和低延时的特点,通过共享动态编码器结构,统一了离线、流式、低延迟三种语音识别场景,显著降低了模型生产和维护成本。
本仓库提供 Ascend NPU (昇腾910) 适配版本,支持在华为昇腾硬件上进行高性能推理。
UniASR 采用两遍解码(Two-pass)架构:
| 组件 | 配置 |
|---|---|
| Encoder (Streaming) | SANM Encoder Chunk-Opt, 35 blocks, 1280 units |
| Encoder (Offline) | SANM Encoder Chunk-Opt, 20 blocks, 1280 units |
| Decoder | FSMN Decoder SCAMA-Opt, 12 blocks, 1024 units |
| Predictor | CIF Predictor V2, 320 dim |
| Frontend | WavFrontend, 16kHz, 80-dim mel |
| Tokenizer | CharTokenizer, 1067 vocab |
支持三种解码模式:
| 组件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| FunASR | 1.3.1 |
| Ascend NPU | Ascend910 (2 cards) |
pip install torch==2.9.0 torch_npu==2.9.0.post1
pip install funasr==1.3.1 modelscope soundfile librosapip 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-onlinepython inference.py --mode npu --audio <path_to_wav>python inference.py --mode all --audio <path_to_wav> --output results.jsonpython inference.py --mode benchmark --bench-runs 50 --audio <path_to_wav>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%) |
| 最大 CER | 0.0% |
| 平均 CER | 0.0% |
| 精度通过阈值 | CER < 1% |
python evaluate.py --accuracy-runs 5 --perf-runs 50 --output evaluation_report.json| 指标 | 数值 |
|---|---|
| 平均延迟 | 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.py | NPU 推理脚本,支持 NPU/CPU 对比和性能基准测试 |
evaluate.py | 精度与性能评测脚本,输出详细评测报告 |
evaluation_report.json | 评测结果 JSON 报告 |
models/ | 模型文件目录 |
@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}
}Apache License 2.0