We present an empirical study on utilizing the diffusion-based large language model LLaDA for automatic speech recognition (ASR). We propose Whisper-LLaDA, integrating the Whisper encoder with LLaDA to evaluate diffusion-based LLMs both as external deliberation modules for autoregressive transcripts and as standalone internal decoders.
By leveraging the bidirectional attention and denoising capabilities of LLaDA, we systematically investigate various masking and decoding strategies, demonstrating the viability and current limitations of non-autoregressive diffusion paradigms in ASR.
Key Capabilities:
- Direct Decoding: Whisper-LLaDA supports diffusion-based and semi-autoregressive decoding conditioned on the speech features, with most experimental configurations achieving faster inference speeds than the autoregressive baseline.
- Deliberation Processing: Whisper-LLaDA refines preliminary transcripts generated by an external speech recognizer. It leverages LLaDA's bidirectional attention mechanism through diffusion-based remasking (random or low-confidence) and semi-autoregressive remasking.
- Performance: On LibriSpeech, the best cascade system achieves 2.25%/4.94% WER on test-clean/test-other, representing a 12.3% relative improvement over the Whisper-LLaMA baseline on the test-other split.
1. Create and activate the conda environment:
conda env create -f environment.yaml
conda activate whisper-llada2. Install k2:
pip install k2==1.24.4.dev20250714+cuda12.6.torch2.7.1 -f https://k2-fsa.github.io/k2/installation/pre-compiled-cuda-wheels-linux/2.7.1.html3. Download Model Checkpoints: Download whisper-large-v3 and LLaDA-8B-Instruct.
- Data Preparation: Organize your training data to match the format in
data/train_example_data.json. - Configuration: Modify the parameters in
configs/config.yaml. - Start Training: Launch the training using
torchrun.
# Launch training on 1 node with 8 GPUs
torchrun --nnodes=1 --nproc_per_node=8 train.py --cfg-path configs/config.yamlDownload the checkpoint from Google Drive.
# Note: Batch inference is not supported yet
python3 inference.py --cfg-path configs/decode_config.yamlYou can switch between different decoding and deliberation strategies by modifying the decode section in configs/decode_config.yaml:
-
Diffusion-based Decoding: Set
mode: "decoding"and ensureblock_lengthis equal togen_len(e.g., 128). -
Semi-Autoregressive Decoding: Set
mode: "decoding"and setblock_lengthto an integer fraction ofgen_len(e.g., 64 or 32). -
Diffusion-based Deliberation: Set
mode: "diffusion_deliberation". You also need to specify themask_ratio(e.g., 0.3) andmasking_type(options: "random" or "low_confidence"). -
Semi-Autoregressive Deliberation: Set
mode: "semi_ar_deliberation". You can adjust the number of sub-blocks by modifying thenum_chunksparameter (e.g., 4).
If you find our paper useful for your research, please consider citing our paper:
@inproceedings{wang2025audio,
title={Audio-Conditioned Diffusion LLMs for ASR and Deliberation Processing},
author={Wang, Mengqi and Liu, Zhan and Jin, Zengrui and Sun, Guangzhi and Zhang, Chao and Woodland, Philip C},
booktitle={Proc. ICASSP},
year={2026}
}License: Apache 2.0
