A
LoRA fine-tuned adapter for
openai/whisper-large-v3-turbo optimized for Hindi (Devanagari) speech recognition.
Evaluation uses Whisper-default text normalization. See
Normalization Notes below.
Best checkpoint: step 300 (lowest val WER). Test WER: 22.25%.
1import torch
2from transformers import WhisperProcessor, WhisperForConditionalGeneration
3from peft import PeftModel
4
5BASE_MODEL = "openai/whisper-large-v3-turbo"
6ADAPTER = "Tachyeon/whisper-large-v3-turbo-hindi-lora"
7
8processor = WhisperProcessor.from_pretrained(BASE_MODEL)
9base_model = WhisperForConditionalGeneration.from_pretrained(
10 BASE_MODEL, torch_dtype=torch.bfloat16, attn_implementation="sdpa",
11)
12model = PeftModel.from_pretrained(base_model, ADAPTER)
13model = model.to("cuda").eval()
14
15# Transcribe (audio_array: 16kHz float32 numpy array)
16input_features = processor(
17 audio_array, sampling_rate=16000, return_tensors="pt"
18).input_features.to("cuda", dtype=torch.bfloat16)
19
20with torch.inference_mode():
21 predicted_ids = model.generate(
22 input_features, language="hi", task="transcribe"
23 )
24
25transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
1# Merge LoRA → convert → evaluate
2python convert_and_eval.py --lora-dir outputs/whisper-large-v3-turbo-hindi-lora --quant int8 --gpu 0
1from faster_whisper import WhisperModel
2
3model = WhisperModel("path/to/ct2-model", device="cuda", compute_type="int8")
4segments, info = model.transcribe("audio.wav", language="hi", beam_size=1)
5print(" ".join(seg.text.strip() for seg in segments))
Full pipeline code (data prep → training → deployment):
github.com/ipritamdash/whisper-hindi-lora
Architecture choice follows
LoRA-Whisper (arXiv:2406.06619): encoder+decoder targeting on all linear layers outperforms decoder-only or q/v-only configurations.
Hindi ASR evaluation is sensitive to text normalization. Whisper's default normalizer strips diacritics and simplifies conjunct consonants, which can inflate apparent accuracy but loses semantic precision.
WER numbers above use
Whisper-default normalization for comparability with other HuggingFace models. For production Hindi ASR, consider evaluation with
IndicNLP normalizer.
1@misc{dash2026whisper_hindi_lora,
2 author = {Pritam Dash},
3 title = {Whisper Large-v3-Turbo Hindi LoRA Fine-tune},
4 year = {2026},
5 publisher = {Hugging Face},
6 url = {https://huggingface.co/Tachyeon/whisper-large-v3-turbo-hindi-lora}
7}