Fine-tuned version of
nvidia/parakeet-tdt-0.6b-v3 on ~43 hours of Lithuanian speech data. Achieves a
45.5% relative WER reduction on Common Voice 25 Lithuanian test (16.53% →
8.91% with beam search + domain 5-gram language model, BasicTextNormalizer).
* BasicTextNormalizer. Live results:
speechbench-viz.web.app
1import nemo.collections.asr as nemo_asr
2
3# Greedy decoding
4model = nemo_asr.models.ASRModel.from_pretrained("sliderforthewin/parakeet-tdt-lt")
5transcriptions = model.transcribe(["audio.wav"])
1from omegaconf import open_dict
2from huggingface_hub import hf_hub_download
3
4model = nemo_asr.models.ASRModel.from_pretrained("sliderforthewin/parakeet-tdt-lt")
5
6# Download the token-level LM
7lm_path = hf_hub_download("sliderforthewin/parakeet-tdt-lt", "lt_token_4gram.arpa")
8
9# Switch to beam search with LM fusion
10decoding_cfg = model.cfg.decoding
11with open_dict(decoding_cfg):
12 decoding_cfg.strategy = "maes"
13 decoding_cfg.beam.beam_size = 4
14 decoding_cfg.beam.return_best_hypothesis = True
15 decoding_cfg.beam.ngram_lm_model = lm_path
16 decoding_cfg.beam.ngram_lm_alpha = 0.5
17model.change_decoding_strategy(decoding_cfg)
18
19transcriptions = model.transcribe(["audio.wav"])
Split long audio on silence before decoding. transcribe.py in this repo does
it for you — anything over 90s is chunked automatically:
1python transcribe.py interview.mp3 # chunks automatically
2python transcribe.py --lm interview.mp3 # with LM fusion
3python transcribe.py --json interview.mp3 # adds per-segment start/end
4python transcribe.py --chunk-seconds 30 hard_audio.mp3
5python transcribe.py --no-chunk clip.wav # opt out
1git clone https://github.com/jasontitus/finetuneparakeet.git
2cd finetuneparakeet
3bash scripts/gcp_eval.sh # on a GCP VM with GPU