📄 Paper | 🤗 Model | 🤗 Rubric Dataset | 🤗 Demo
Fangxu Yu1,
Tao Feng2,
Dehai Min3,
Zinan Lin4,
Weijia Xu4
Philip S. Yu3,
Ge Liu2,
Tianyi Zhou5,
1University of Maryland, College Park 2University of Illinois Urbana-Champaign 3University of Illinois Chicago 4Microsoft Research 5Mohamed Bin Zayed University of Artificial Intelligence
AudioRubrics is a reinforcement learning framework that supervises audio reasoning with self-evolving, audio-grounded rubric rewards.
Outcome-based rewards supervise only the final answer and let the model reach it without genuinely attending to the audio, whereas existing process-based rewards rely on coarse, hand-crafted, and fixed criteria that neither adapt to each question nor stay grounded in the acoustic evidence. AudioRubrics synthesizes per-sample rubrics from the raw waveform and, conditioned on the model's own rollouts, regenerates and reweights criteria each group to keep supplying signal exactly where an outcome-only reward is flat: a judge evaluates every rubric on the rollout group, a variance filter prunes non-discriminative criteria, and new criteria (with positive/negative polarity) are distilled from the model's current failure modes. The rubric score is combined with the accuracy reward and a linear overthinking penalty for GRPO optimization:
- 🎧 Audio-grounded rubrics: every criterion is generated from the raw waveform rather than a transcript, so the reward verifies that the reasoning is anchored in acoustic evidence actually present in the clip.
- 🔄 Self-evolving supervision: rubrics are regenerated and reweighted from the model's own rollouts each group, so the evaluation standard keeps rising as the policy improves instead of saturating like a fixed criterion.
- ⚖️ Stable reasoning length: the overthinking penalty counterbalances the rubric reward, converging to a stable reasoning length that avoids both degenerate collapse (outcome-only GRPO) and runaway verbosity (rubric-only).
conda create -n audiorubrics python=3.11 -y
conda activate audiorubrics
bash setup.sh # or: pip install -r requirements.txtTraining requires flash-attention-2 and DeepSpeed (ZeRO-3 config in src/local_scripts/zero3.json). The file transformers/modeling_qwen2_5_omni.py is a small runtime patch for pure-audio inputs; the training script copies it over the installed transformers package automatically.
Training data is drawn from AVQA: audio is extracted from the videos and audio–text pairs are constructed by replacing "video" with "audio" in the questions, yielding 40k training samples. Two files are needed (see data/avqa/README.md for the exact formats):
data/avqa/train_with_rubrics.json # training samples (question / answer / audio path)
rubrics_avqa_train.jsonl # 5 weighted static rubrics per sample, generated from the raw waveform
The full static-rubric annotation set (40,380 samples) is available at umd-zhou-lab/AVQA-Audio-Rubrics. The rubric-generator / judge prompt is in data/evolving_rubric_system_prompt.md, and data/sample_logs/ contains a sample of the per-step rubric-evolution logs (which rubrics were generated, kept, judged, and reweighted at each step).
Set your judge API key, point the script at the base model and the rubric file, then launch:
export GEMINI_API_KEY=... # judge / rubric-generator API key (or GEMINI_API_KEYS=key1,key2)
MODEL_PATH=/path/to/Qwen2.5-Omni-7B \
RUBRIC_PATH=/path/to/rubrics_avqa_train.jsonl \
RUBRIC_WEIGHT=0.5 OVERTHINK_WEIGHT=0.15 MAX_STEPS=400 \
bash scripts/run_evolve_overthink.shUseful options:
NPROC=4 # number of GPUs
RUBRIC_JUDGE_MODEL=gemini-3.1-pro-preview
JUDGE_BACKEND=trapi # switch the judge to any Azure-OpenAI-compatible endpoint
# (with TRAPI_ENDPOINT / TRAPI_TOKEN_FILE)After training, merge the thinker checkpoint back into a full Omni model for serving:
python scripts/merge_thinker_to_full.py --ckpt_dir <checkpoint> --orig_dir <base_model> --out_dir <merged>AudioRubrics is evaluated on MMAU Test-mini, MMAR, and MMSU. Serve the merged model with vLLM, generate answers, then score:
vllm serve <merged_model> --served-model-name omni --trust-remote-code \
--max-model-len 8192 --limit-mm-per-prompt '{"audio":1}'
python scripts/eval/generate_answers_vllm.py --base_url http://localhost:8000/v1 --model omni \
--input <benchmark.jsonl> --audio_dir <audio_dir> --output <pred.jsonl> --max_new_tokens 768
python scripts/eval/evaluation.py --input <pred.jsonl>scripts/eval/eval_ckpts_3benchmarks.sh automates this loop over checkpoints for all three benchmarks.
If you find this work useful, please cite:
@article{yu2026reinforcement,
title={Reinforcement Learning with Evolving Rubrics as Rewards for Audio Reasoning},
author={Yu, Fangxu and Feng, Tao and Min, Dehai and Lin, Zinan and Xu, Weijia and Xu, Michael and Yu, Philip S and Liu, Ge and Zhou, Tianyi},
journal={arXiv preprint arXiv:2608.02831},
year={2026}
}The training framework is built on Omni-R1; we thank the authors for open-sourcing it. Base model: Qwen2.5-Omni.
