☰
如何科学评测ASR准确率?open-audio-opd的J/WER评测与多GPU并行打分完整教程
2026/10/15 11:59:02 网站建设 项目流程

【免费下载链接】open-audio-opd

Industrial audio online policy distillation (OPD) training stack for ASR and TTS, distilling compact audio models from stronger teacher models.

项目地址:https://gitcode.com/gh_mirrors/op/open-audio-opd
点击查看免费下载

ASR 评测(自动语音识别准确率评测)是检验语音识别模型好坏的核心环节。open-audio-opd 开源了一套工业级 ASR 评测工具链:用一条命令完成"批量推理 + J/WER 打分",再用多GPU并行打分同时评估多个测试集,最终按错误数排序输出结果,方便快速定位 bad case。本教程面向新手,带你完整走通这条评测流水线。

为什么 ASR 评测不能只看"感觉"

语音识别模型好不好,最终要落到两个硬指标上:

  • WER(Word Error Rate,词错误率):按"词"统计插入/删除/替换错误,适合英文等以空格分词的语言;
  • CER(Character Error Rate,字错误率):按"字"统计错误,适合中文这类无空格分词的语言。

错误率越低越好。但直接拿原始转写文本对比会踩坑:标点、大小写、全角数字(如123)都会制造"假错误"。所以科学的 ASR 评测必须先做文本归一化,再计算 J/WER(Joint WER,联合词错误率)。open-audio-opd 的评测脚本把这套流程全部封装好了。

open-audio-opd 评测链路全景

open-audio-opd 是一个面向 ASR/TTS 的工业级音频在线策略蒸馏(OPD)训练栈,其中的 Ark-ASR 0.6B 模型就是靠这套评测持续调优的。整体流程如下图所示:

评测环节位于推理侧,整条链路分四步:

  1. 读取 JSONL 评测数据:每行一条音频 + 参考转写;
  2. 批量 ASR 推理:Transformers 后端批量生成转写文本;
  3. 文本归一化 + jiwer 打分:清洗标点、统一全角数字后计算 WER/CER;
  4. 按错误数排序输出:结果按cer_errors降序写入 JSONL,错误最多的样本排在最前面,一眼找到 bad case。

核心文件只有两个:

  • 单数据集打分脚本:eval_jwer_ark_asr_transformers.py
  • 多GPU并行启动器:run_arkasr_eval.sh

推理能力复用自 ark_asr_transformers.py,无需重复造轮子。

评测数据准备:JSONL 格式与字段说明

评测输入是 JSONL 文件,每行一条样本,格式与训练数据保持一致(参考 README_zh.md 的"评测"章节):

{"audio":"/path/to/audio.wav","text":"参考转写文本","begin_time":-1,"end_time":-1}
字段说明
audio必填,音频文件路径
text参考转写文本(ground truth)
begin_time/end_time可选,分段起止秒数;-1表示整段音频
其他字段原样保留到输出,方便追溯来源

💡 仓库不内置评测数据,EVAL_DATA_DIR需要你自备测试集 JSONL。

J/WER 一键评测:单数据集快速跑分

拿到一个测试集后,直接运行评测脚本即可完成推理 + 打分:

python scripts/eval/eval_jwer_ark_asr_transformers.py \ --input /path/to/test_aishell.jsonl \ --output runs/eval/test_aishell_result.jsonl \ --model_path <你的ASR模型路径> \ --batch_size 40 \ --dtype float16 \ --attn_impl sdpa

常用参数速查:

参数作用
--batch_size批量推理大小,显存不足就调小
--dtype模型精度,float16/bfloat16/float32
--attn_impl注意力实现,sdpa兼容性最好,flash_attention_2更快
--max_new_tokens生成长度上限,默认 256
--max_audio_seconds单条音频最长秒数,默认 40
--text_normalize_python指向独立环境中的text_process归一化器
--disable_text_normalize关闭归一化(对照实验用)

脚本运行结束会打印汇总:有效样本数、总词数/字符数、Final WER / Final CER,并保存排序后的结果文件(见 eval_jwer_ark_asr_transformers.py)。

文本归一化:标点、全角数字与中文按字计分

打分前,评测脚本会对参考文本和预测文本做统一清洗(见 clean_text):

  • 转小写、去除中英文标点与特殊符号、压缩空白;
  • 全角数字/符号统一转半角(0-9、%、.等);
  • 支持接入text_process归一化器处理更复杂的数字/单位规范,支持本地导入或通过子进程调用独立 Python 环境(build_text_normalizer)。

两个关键细节值得注意:

  1. 中文自动按字计分:当参考文本含 CJK 字符时,WER 自动退化为字符级计算,即"中文看 CER、英文看 WER",无需手动切换(score_rows)。
  2. jiwer 可选:安装了jiwer就用它算编辑距离;没装则回退到内置的纯 Python 编辑距离实现,结果一致,只是速度稍慢。

多GPU并行打分:一次启动 5 个数据集

单条命令串行跑 5 个测试集太慢,run_arkasr_eval.sh 把"每个数据集绑定一块 GPU、并行启动"封装成一条命令:

MODEL_PATH=<你的ASR模型路径> \ EVAL_DATA_DIR=/path/to/eval_jsonl_dir \ OUTPUT_DIR=runs/eval/arkasr_step30000 \ SUFFIX=step30000 \ GPUS="0 1 2 3 4" \ PRESETS="aishell clean meeting net other" \ scripts/eval/run_arkasr_eval.sh

启动器要求EVAL_DATA_DIR下存在与PRESETS对应的test_${preset}.jsonl文件,例如PRESETS里写了aishell,就需要test_aishell.jsonl。

环境变量说明
MODEL_PATHASR 模型路径(必填)
EVAL_DATA_DIR评测 JSONL 所在目录(必填)
OUTPUT_DIR日志、pid 与结果文件输出目录(必填)
PRESETS数据集名列表,默认aishell clean meeting net other
GPUSGPU 编号列表,数量需 ≥ 数据集数,默认0 1 2 3 4
SUFFIX输出文件名后缀,便于区分不同 checkpoint
BATCH_SIZE/DTYPE/ATTN_IMPL推理参数,默认 40 / float16 / sdpa

每个任务通过CUDA_VISIBLE_DEVICES绑定指定 GPU 后后台运行,日志写到OUTPUT_DIR/${preset}.log,pid 写到${preset}.pid,结果输出为test_${preset}_${SUFFIX}_result.jsonl。5 个数据集并行时,总耗时约等于最慢的那一个。

如何看懂评测结果:输出字段与 Bad Case 排查

每个结果 JSONL 的每行包含:

字段含义
ref_text/pred_text原始参考文本 / 模型预测文本
ref_text_clean/pred_text_clean归一化后的对比文本
wer_errors/cer_errors该条样本的词错误数 / 字错误数
ref_words/ref_chars参考文本的词数 / 字符数

结果文件已按cer_errors降序排好,打开文件前几十行就是错误最严重的样本,对照音频和参考文本即可定位是声学问题、同音字混淆还是领域词缺失。

以项目实测数据为例(README_zh.md "实验结果"一节):Ark-ASR 在中文三个基准上的平均 CER 为4.30%,低于同规模 Qwen3-ASR-0.6B 的 4.36%;英文平均 WER 为6.55%,同样领先 0.6B 基线的 6.93%。评测工具链正是这类结论的直接产出。

常见问题与调优建议

  • 显存不足(OOM):先调小BATCH_SIZE(如 40 → 8),再缩短MAX_AUDIO_SECONDS;
  • 报错缺少 flash_attn:--attn_impl sdpa即可,脚本内置了 attention 实现的自动回退;
  • WER 异常偏高:确认参考文本语种,中文样本会被自动按字计分;也可用--disable_text_normalize对比归一化前后的差异;
  • 需要更严格的数字规范:通过TEXT_NORMALIZE_PYTHON指向 wetext 等独立环境的 Python 解释器,评测进程会以后台子进程方式调用其text_normalize。

小结

open-audio-opd 的评测方案可以概括为三句话:JSONL 进、WER/CER 出;中文按字、英文按词,归一化先行;多 GPU 并行 + 错误数降序,让大规模评测又快又好排查。配合 README.md 中的推理与训练章节,你就拥有了一条从模型推理、J/WER 打分到 bad case 分析的完整 ASR 评测工作流。

【免费下载链接】open-audio-opd

Industrial audio online policy distillation (OPD) training stack for ASR and TTS, distilling compact audio models from stronger teacher models.

项目地址:https://gitcode.com/gh_mirrors/op/open-audio-opd
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询