Downloads · 30 days
11
18% of all-time downloads
dys-asr/parakeet-ctc-0.6b-all-aug
parakeet-ctc-0.6b-all-aug is a automatic speech recognition model from dys-asr. Use it when you need speech turned into text. It is set up for transformers. The card lists the license as other.
nvidia/parakeet-ctc-0.6b fine-tuned on every Speech Accessibility Project recording available -- SAPC1 train, SAPC1 dev and SAPC2 train, deduplicated -- with online speed perturbation and SpecAugment.
Downloads · 30 days
11
18% of all-time downloads
All-time downloads
61
Public
Parameters
609M
2.4 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors2.4 GB · 100%
From the Hugging Face model README
nvidia/parakeet-ctc-0.6b fine-tuned on every Speech Accessibility Project
recording available -- SAPC1 train, SAPC1 dev and SAPC2 train, deduplicated --
with online speed perturbation and SpecAugment.
It is dys-asr/parakeet-ctc-0.6b-all
with augmentation added and nothing else changed, so the pair is a clean ablation:
| WER | CER | |
|---|---|---|
nvidia/parakeet-ctc-0.6b | 32.35% | 20.43% |
dys-asr/parakeet-ctc-0.6b-sapc1 | 14.65% | 8.77% |
dys-asr/parakeet-ctc-0.6b-sapc2 | 13.35% | 7.83% |
dys-asr/parakeet-ctc-0.6b-all | 12.08% | 7.02% |
dys-asr/parakeet-ctc-0.6b-soup | 11.89% | 6.89% |
| this model | 11.65% | 6.80% |
All rows are the same 17,582 utterances from 48 speakers, greedy CTC decoding, no language model, both sides through the same normaliser.
Augmentation is worth 0.43 WER points here, on identical data and an identical recipe. It also puts this model ahead of the weight-averaged soup, which was previously the best of the family.
Both are applied online in the collator, so the batch size never changes and neither costs disk:
Speed runs before feature extraction, so the frame count and attention mask follow the perturbed audio; the time mask honours that attention mask, so spans land inside each utterance rather than in padding where they would mask nothing.
Training includes SAPC1 dev, which shares 28,253 recordings and 76 of SAPC2 dev's
124 speakers, so neither sapc1_dev nor the whole of sapc2_dev is a fair test
for this model. The set used above is the 48 SAPC2 dev speakers appearing
nowhere in training, 17,582 of 47,929 records.
That set is harder than SAPC2 dev as a whole: all 35 of SAPC2 dev's
Parkinson's speakers also appear in SAPC1 dev, so it contains no Parkinson's
speech, easily the lowest-error cohort here. Do not compare this model's 11.65%
against parakeet-ctc-0.6b-sapc2's published 11.51% on all of SAPC2 dev; they are
different sets. Scored head to head, as above, this model wins by 1.70 points.
Numbers as words, upper-case, unpunctuated, as for every model in this family.
audio: "lower the temperature three degrees"
output: LOWER THE TEMPERATURE THREE DEGREES # not "... 3 DEGREES"
The tokeniser holds 1,025 tokens and no digit characters. Verbalise your references the same way or numerals will dominate your error count.
SAPC1 train + SAPC1 dev + SAPC2 train, deduplicated by audio filename, filtered to 0.5-30 s: 392,378 utterances, 752.6 h, 1,055 speakers. SAPC2 re-releases 182,575 of SAPC1's train recordings under the same filenames, so concatenating the manifests would train on them twice and double the weight of the 483 speakers in both.
Square-bracketed spans, which in SAPC2 hold the interview prompt shown to the speaker rather than read aloud, are stripped before normalisation. Leaving them in trains the model to transcribe a question nobody asked.
Identical to parakeet-ctc-0.6b-all apart from the two augmentation rows.
| base model | nvidia/parakeet-ctc-0.6b |
| optimizer | AdamW, weight decay 0.01 |
| learning rate | 1e-4 |
| schedule | tri-stage, 10% warmup, 40% hold |
| per-device batch | 16 x 2 GPUs, SyncBatchNorm over all 32 |
| effective batch | 32 |
| epochs | 10 (122,620 optimizer updates, 12,262 per epoch) |
| precision | bf16 mixed |
| layerdrop | 0.05 |
| gradient clipping | 1.0 |
| max audio duration | 0.5-30 s |
| gradient checkpointing | off |
| batch sampling | length-grouped |
| speed perturbation | 0.9 / 1.0 / 1.1, one factor per utterance |
| SpecAugment | time 0.05 x 10 frames, frequency 0.4 x 27 bins |
| seed | 42 |
| hardware | 2x NVIDIA A100-SXM4-80GB, ~8.0 h |
Dev WER by epoch, still falling at the end:
| epoch | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| WER | 16.83 | 14.99 | 13.80 | 13.37 | 12.96 | 12.46 | 12.18 | 11.75 | 11.52 | 11.25 |
| CER | 10.17 | 9.00 | 8.23 | 8.03 | 7.62 | 7.33 | 7.01 | 6.77 | 6.70 | 6.51 |
The trainer's metric reads slightly optimistic against a standalone pass: 11.25% there against the 11.65% reported above.
Pooled over words the figure is 11.65%; averaged with equal weight per speaker it is 14.32%:
| min | 25th | median | 75th | max |
|---|---|---|---|---|
| 0.84% | 5.48% | 11.37% | 17.81% | 68.84% |
20 of the 48 speakers are under 10% WER; 3 are above 30%.
| aetiology | speakers | mean WER | median WER |
|---|---|---|---|
| Down Syndrome | 13 | 20.91% | 13.18% |
| Cerebral Palsy | 13 | 17.63% | 16.99% |
| Stroke | 9 | 14.44% | 11.58% |
| ALS | 13 | 4.33% | 2.75% |
import torch
from transformers import AutoModelForCTC, AutoProcessor
model_id = "dys-asr/parakeet-ctc-0.6b-all-aug"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCTC.from_pretrained(model_id).eval()
inputs = processor(audio, sampling_rate=16_000, return_tensors="pt") # 16 kHz mono
with torch.inference_mode():
logits = model(**inputs).logits
print(processor.batch_decode(logits.argmax(dim=-1)))
Augmentation is training-time only and has no effect at inference.