【免费下载链接】open-audio-opd
Industrial audio online policy distillation (OPD) training stack for ASR and TTS, distilling compact audio models from stronger teacher models.
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 模型就是靠这套评测持续调优的。整体流程如下图所示:
评测环节位于推理侧,整条链路分四步:
- 读取 JSONL 评测数据:每行一条音频 + 参考转写;
- 批量 ASR 推理:Transformers 后端批量生成转写文本;
- 文本归一化 + jiwer 打分:清洗标点、统一全角数字后计算 WER/CER;
- 按错误数排序输出:结果按
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)。
两个关键细节值得注意:
- 中文自动按字计分:当参考文本含 CJK 字符时,WER 自动退化为字符级计算,即"中文看 CER、英文看 WER",无需手动切换(score_rows)。
- 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_PATH | ASR 模型路径(必填) |
EVAL_DATA_DIR | 评测 JSONL 所在目录(必填) |
OUTPUT_DIR | 日志、pid 与结果文件输出目录(必填) |
PRESETS | 数据集名列表,默认aishell clean meeting net other |
GPUS | GPU 编号列表,数量需 ≥ 数据集数,默认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.
相关推荐
如何评估PyTorch Image Models多类分类准确率:完整指南
如何评估PyTorch Image Models多类分类准确率:完整指南 PyTorch Image Models(timm)库是Hugging Face开发的
人工智能计算机视觉深度学习预训练FIM One评测中心(Eval Center)完整教程:管理测试集、并行评测与LLM打分,量化Agent质量
FIM One评测中心 Eval Center 完整教程:管理测试集、并行评测与LLM打分,量化Agent质量 FIM One 是一款面向全球与中国企业的开源
不等官方更新做 DLSS 版本切换:DLSS Swapper 新手上手实操
不等官方更新做 DLSS 版本切换:DLSS Swapper 新手上手实操 游戏里的旧版 DLSS 迟迟等不来官方升级,想自己换却怕搞坏文件?DLSS Swap
桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考