YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Quick or Slow: Forced-Choice Self-Consistency Inversion in Audio-LLMs

This repository accompanies the ICASSP submission: "Anti-Predictive Self-Consistency in Audio-LLMs: A Forced-Choice Diagnostic and Silent-Audio Probe Recalibrator"

One-sentence claim

On an audio-LLM binary paralinguistic task, forcing a full commit rate does not fix chance-level accuracy β€” but it does let us prove that the model's confidence is worse than useless (anti-predictive), and a one-extra-forward-pass silent-audio probe can partially repair it.

Repository layout

pivot_c/
β”œβ”€β”€ paper/                  # ICASSP manuscript (IEEEtran)
β”‚   β”œβ”€β”€ main_merged.tex     # single-file merged manuscript (compile this)
β”‚   β”œβ”€β”€ main.tex            # split version (uses \input{})
β”‚   β”œβ”€β”€ sec_*.tex           # per-section sources
β”‚   β”œβ”€β”€ references.bib      # bibliography
β”‚   └── figures/            # publication-ready PNG + PDF (figures4papers style)
β”‚       β”œβ”€β”€ forced_choice_intro.{png,pdf}
β”‚       └── selective_risk_curve.{png,pdf}
β”‚
β”œβ”€β”€ code/                   # analysis + inference scripts
β”‚   β”œβ”€β”€ infer_sc.py         # k-sample SC generation
β”‚   β”œβ”€β”€ infer_probe_pitchbright.py  # first-token logit probe extraction
β”‚   β”œβ”€β”€ grid.py             # multi-cell GPU grid runner
β”‚   β”œβ”€β”€ grid_perturb_q2o.py # perturbation (noise/pink/trunc) grid
β”‚   β”œβ”€β”€ analyze_rho_sign_predictor.py   # N=54 predictor
β”‚   β”œβ”€β”€ analyze_forced_choice.py        # forced-choice rescore
β”‚   β”œβ”€β”€ analyze_fc_paired_bootstrap.py  # paired bootstrap CI
β”‚   β”œβ”€β”€ analyze_fc_decompose.py         # K-flip redundancy + decomposition
β”‚   β”œβ”€β”€ analyze_locked_wrong_xfam.py    # cross-family locked-wrong
β”‚   β”œβ”€β”€ analyze_flipped_calibrator_xfam.py
β”‚   β”œβ”€β”€ analyze_tau_sweep.py            # Ο„-sweep
β”‚   β”œβ”€β”€ analyze_perturb.py              # deployment-degradation
β”‚   β”œβ”€β”€ analyze_fusion_canonical.py      # canonical fusion (SoT)
β”‚   β”œβ”€β”€ analyze_fusion_generic.py
β”‚   β”œβ”€β”€ analyze_fusion_xfam.py           # lp_margin cross-family pooled
β”‚   β”œβ”€β”€ verify_selective_risk.py        # selective-risk verification
β”‚   β”œβ”€β”€ make_selective_risk_fig_fp.py   # figure: selective-risk
β”‚   └── make_intro_fig_fp.py            # figure: forced-choice intro
β”‚
β”œβ”€β”€ results/                # raw per-item JSONLs (351 files)
β”‚   β”œβ”€β”€ sc_{model}__{corpus}__{task}.jsonl          # free-gen SC
β”‚   β”œβ”€β”€ sc_pert_{cond}_{model}__{corpus}__{task}.jsonl  # perturbed SC
β”‚   └── probe_{task}_{model}__{corpus}__{cond}.jsonl    # logit probes
β”‚
└── analysis/               # canonical analysis outputs + verdicts
    β”œβ”€β”€ rho_sign_cells.json
    β”œβ”€β”€ rho_sign_cells_k20.json
    β”œβ”€β”€ snr_sweep_curve.json
    └── ...

Reproducibility

All numbers in the paper recompute from the raw per-item JSONLs:

# Forced-choice rescore (Table tab:fc + Figure fig:fc)
python3 code/analyze_forced_choice.py

# Paired bootstrap CI (abstract + Finding Layer-2)
python3 code/analyze_fc_paired_bootstrap.py
python3 code/analyze_fc_decompose.py

# Selective-risk curve (Figure fig:selective)
python3 code/verify_selective_risk.py
python3 code/make_selective_risk_fig_fp.py

# Forced-choice intro figure (Figure fig:fc)
python3 code/make_intro_fig_fp.py

# N=54 flip-rate rho-sign predictor (Finding #9)
python3 code/analyze_rho_sign_predictor.py

Models used (weights loaded from HuggingFace / local checkpoints):

  • Qwen/Qwen2-Audio-7B-Instruct
  • Qwen/Qwen2.5-Omni-7B
  • SALMONN-7B (local checkpoint)
  • Audio Flamingo-Next (local checkpoint at /ossfs/workspace/af-next, requires afnext_env)

Grid: 4 audio-LLM families Γ— 3 corpora (LibriSpeech test-clean/test-other, VoxPopuli) Γ— 4 binary paralinguistic tasks (pace/loud/pitch/bright) Γ— k=5 at Ο„=0.7 + perturbations (noise at SNR {10,5,0,-5} dB, pink noise, trunc 1s).

Key numbers (all reproducible)

metric value script
forced-choice pace accuracy 0.489 β‰ˆ chance analyze_forced_choice.py
ρ(forced SC, forced correct) pace βˆ’0.059 analyze_forced_choice.py
Stouffer combined p 0.003 analyze_forced_choice.py
SC-alone AUROC (forced) 0.466 < 0.5 analyze_forced_choice.py
Fused [SC,probe] AUROC (forced) 0.537 verify_selective_risk.py
Lift +0.072, CI [+0.004, +0.141] analyze_fc_paired_bootstrap.py
Selective-risk 0.496β†’0.508β†’0.521 (monotone↑) verify_selective_risk.py
Bright forced ρ +0.02 (inversion gone) analyze_forced_choice.py

License

Anonymous for double-blind review. Code + data released for reproducibility.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support