站点图标 高效码农

神速评测!AU-Harness一键解决语音大模型评估痛点?

语音大模型怎么“打分”?AU-Harness 把复杂 benchmark 装进一个开源工具箱

如果你只想知道结论
AU-Harness = 一套用 Python 写的开源脚本,能把 50+ 语音数据集、21 种任务、9 种指标一次性跑完;跑得快(比现有工具快 127%)、配得细(每句话长度、口音、噪声都能筛)、结果可复现(提示词、打分全部锁版本)。
装好 vLLM → 改两行 config → bash evaluate.sh → 几个小时后拿到 CSV/JSON 报告。
下面把“为什么、装什么、怎么跑、看什么”逐层拆开讲清。


一、为什么又需要一个新工具?

老痛点 具体表现 AU-Harness 的对策
跑得慢 单卡单模型、无并发、无批处理 vLLM 批推理 + 数据集分片 + Token 池调度
比不了 各家提示词格式不同,A 家多一个“请回答”就多 3% 分 统一 system prompt 模板,可版本化
测不全 只有 ASR 或情绪识别,缺“谁说了什么、什么时候” 新增 LLM-Adaptive Diarization 与 Spoken Language Reasoning 两大板块

二、它到底测哪些“语音能力”?

用一句话概括:从“听见”到“听懂”再到“跟着做”

六大类 举例任务 典型数据集 输出形式
语音识别 普通话转写、代码混合、长音频 LibriSpeech、VoxPopuli 文字
副语言 情绪、口音、性别、说话人 MELD、VoxCeleb 标签
音频理解 场景、音乐 AudioCaps、CHiME 文字描述
口语理解 意图、问答、摘要、翻译 SLURP、CoVoST2 文字/标签
口语推理 函数调用、SQL 生成、多轮指令 Speech-BFCL、Speech-Spider 可执行代码
安全 对抗样本、伪造音频 AdvBench、AVSpoof 安全分数

新任务 1:LLM-Adaptive Diarization
不给专用声纹模型,只靠提示词让大模型输出“:hello (0.0,1.2s)”这种带时间戳的转写,再用 WDER/cpWER 打分。
新任务 2:Spoken Language Reasoning
把文本指令用 TTS 念出来,让模型“听”完再写 SQL 或调 API,测它跨模态推理能力。


三、核心架构:三步流水线,全是并发


图 1:Config → Request Controller → Concurrent Engines

  1. Config 模块
    YAML 里写清“哪些模型、哪些数据集、什么指标、什么提示词”,一键版本控制。

  2. Request Controller
    维护“令牌桶”——一个令牌 = 一次推理请求。所有引擎抢令牌,vLLM 后端自动批处理,失败可重试。

  3. Concurrent Engines
    每张卡跑一个 Engine,内部再按 batch_size 把音频切片喂模型;后处理、打分、写日志都在子进程完成,主进程只汇总。


四、性能实测:同样 500 条语音,时间对比

工具 实时系数 RTF ↓ 样本/秒 ↑
VoiceBench 87.9 0.15
AudioBench 19.9 0.66
Kimi-Eval 7.1 1.87
AU-Harness 3.6 3.65
  • RTF = 处理耗时 / 音频时长;越低越好
  • 硬件:A100 40 GB ×1;数据集:LibriSpeech-test-clean 1.05 h

五、安装与 5 分钟上手

0)前提

  • Python ≥3.9
  • 有 NVIDIA 驱动 + CUDA 11.8+
  • 已装 vLLM(如没有,pip install vllm 即可)

1)克隆与装依赖

git clone https://github.com/ServiceNow/AU-Harness.git
cd AU-Harness
python -m venv myenv && source myenv/bin/activate
pip install -r requirements.txt

2)填 key & 端点

cp sample_config.yaml config.yaml
# 编辑 config.yaml
export ENDPOINT_URL="http://localhost:8000/v1"
export AUTH_TOKEN="sk-xxx"

3)跑一条最小示例

bash evaluate.sh

日志实时刷在终端,结果落在 run_logs/{时间戳}/

4)看结果

  • 逐条打分:run_logs/{t}/emotion_recognition/emotion_recognition_llm_judge_binary_qwen2.5_omni.csv
  • 总表:run_logs/{t}/final_scores.json

六、YAML 配置速查表

段落 干嘛 示例
dataset_metric 指定“数据集+指标”对 [librispeech_test_other, word_error_rate]
filter 只跑部分样本 num_samples: 300;length_filter: [1.0, 30.0]
models 可同时测 N 个模型 每个模型单独写 batch_size、chunk_size、 temperature
generation_params_override 给某任务/某模型开小灶 温度、最大 token 数
prompt_overrides 换提示词 system / user 都可改
judge_settings LLM-as-Judge 必备 指定 judge 模型、并发数

七、常见问答 FAQ

Q1:没有 A100,普通 2080 能跑吗?
能。把 batch_size 降到 16–32,chunk_size 改 10 s,RTF 会升高但照样能出结果。

Q2:只想测自己私有数据怎么办?
tasks/ 对应目录新建 mytask.yaml,字段照抄模板,把 dataset_path 指到本地 JSON/CSV 或 HuggingFace repo 即可。

Q3:需要多卡多机?
把同一模型起多个 vLLM 端点,YAML 里写多行 model,名字不同即可;AU-Harness 会自动按令牌桶做负载均衡。

Q4:为什么同样模型两次分数差 0.5%?
LLM-as-Judge 本身有随机性;官方建议把 temperature 锁 0.0,开 seed,并跑三次取中位数。

Q5:提示词必须英文吗?
system prompt 可任意改中文,但当前 benchmark 的参考答案是英文,打分模型也是英文,换中文需自己译标签。


八、把 benchmark 转化成业务指标的一条示范链

  1. 业务场景:客服对话质检
    需求 = 说话人分错 < 10%、情绪检出召回 > 85%

  2. 在 AU-Harness 里勾任务
    dataset_metric: [[callhome, wder], [meld, llm_judge_binary]]

  3. 筛数据
    length_filter: [10, 60] 只留 10–60 s 的通话段

  4. 跑完后拿到
    WDER = 8.2%,情绪 F1 = 87% → 满足上线阈值

  5. 生成对内报告
    直接读 final_scores.json 写进 PPT,不再手工对 Excel。


九、局限与社区待办

  • 依赖 vLLM:无成熟后端的模型只能回退到单条推理,速度打回原型。
  • 时间戳精度:LLM-Adaptive Diarization 在重叠语音、快切说话人时仍偏高 WDER。
  • 语言覆盖:目前 70% 数据集是英文,中文、低资源语言需社区继续贡献。

十、一句话总结

AU-Harness 把“准备数据 → 写提示词 → 并发推理 → 统一打分”这条最耗时的评估流水线,封装成一条 bash evaluate.sh 命令,并公开全部代码与配置模板。
研究者和工程师不用再重复造轮子,只需关心“我要测什么、阈值多少”,就能把语音大模型真正地、可复现地“称一称”重量。

退出移动版