1from transformers import WhisperForConditionalGeneration, WhisperProcessor
2from peft import PeftModel
3import librosa
4
5processor = WhisperProcessor.from_pretrained("openai/whisper-small")
6model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small")
7model = PeftModel.from_pretrained(model, "dbarbera/whisper-small-torgo-dysarthria-lora")
8
9audio, sr = librosa.load("audio.wav", sr=16000)
10inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
11generated_ids = model.generate(**inputs)
12print(processor.batch_decode(generated_ids, skip_special_tokens=True)[0])
The encoder's acoustic representations generalise well across speakers.
The decoder's language model is where Whisper fails on clinical speech —
it "corrects" valid dysarthric productions toward standard words.
Adapting only the decoder teaches the model to listen to what was actually said.
TORGO — 15 speakers (8 dysarthric, 7 control), ~13.5 hours total, 16,552 utterances.
Available on HuggingFace:
abnerh/TORGO-database
1@misc{barbera2026whisper-clinical,
2 author = {Barbera, David},
3 title = {Whisper-Clinical: Parameter-Efficient Fine-Tuning for Dysarthric Speech Recognition},
4 year = {2026},
5 url = {https://github.com/DavidBarbera/whisper-clinical-speech},
6 note = {LoRA adapter for OpenAI Whisper Small trained on TORGO}
7}