Downloads · 30 days
3
5% of all-time downloads
dys-asr/parakeet-ctc-0.6b-all
parakeet-ctc-0.6b-all 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 to us -- SAPC1 train, SAPC1 dev and SAPC2 train, deduplicated -- for recognition of dysarthric and otherwise disordered spe…
Downloads · 30 days
3
5% of all-time downloads
All-time downloads
57
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 to us -- SAPC1 train, SAPC1 dev and SAPC2 train,
deduplicated -- for recognition of dysarthric and otherwise disordered speech.
| WER | CER | |
|---|---|---|
nvidia/parakeet-ctc-0.6b | 32.35% | 20.43% |
dys-asr/parakeet-ctc-0.6b-sapc2 | 13.35% | 7.83% |
dys-asr/parakeet-ctc-0.6b-all | 12.08% | 7.02% |
All three rows are the same evaluation on the same 17,582 utterances, greedy CTC decoding, no language model, both sides through the same normaliser. Against the stock model that is a 63% cut in word errors; against the SAPC2-only model, 1.27 points, which is what the extra SAPC1 data buys.
This figure is not comparable to the ones on the sibling model cards, and the reason is worth understanding before you use any of them together.
This model trains on SAPC1 dev in full. SAPC1 dev and SAPC2 dev share 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 set for this model. What remains fair is the
48 SAPC2 dev speakers who appear nowhere in training, and that is the set
scored above: sapc2_dev filtered to those speakers, 17,582 of 47,929 records,
35.6 h.
That set is harder than SAPC2 dev as a whole, because the exclusion is not
random. Every one of SAPC2 dev's 35 Parkinson's speakers also appears in SAPC1
dev, so the held-out set contains no Parkinson's speech at all -- and
Parkinson's is by some distance the easiest cohort in this corpus, averaging
7.5% WER against 20-22% for Down Syndrome and Cerebral Palsy on the sibling
model. So parakeet-ctc-0.6b-sapc2's published 11.51% on all of SAPC2 dev and
this model's 12.08% here are not evidence that this model is worse. Scored
head to head on this set, as above, it is better by 1.27 points.
This model writes numbers as words and emits upper-case, unpunctuated text.
audio: "lower the temperature three degrees"
output: LOWER THE TEMPERATURE THREE DEGREES # not "... 3 DEGREES"
The tokeniser has 1,025 tokens and no digit characters, so numerals cannot be
produced. Training transcripts are verbalised before tokenisation: "2" becomes
TWO, "$45" becomes FORTY FIVE DOLLARS, "1949" becomes NINETEEN FORTY NINE. If you score this model, apply the same verbalisation to your references,
or numerals will dominate your error count.
SAPC2 wraps the canonical interview prompt, and PII redactions, in square
brackets. The prompt is shown to the speaker rather than read to them, so none of
it is in the audio, and left in the labels it trains the model to transcribe a
question nobody asked. Bracketed spans and the #ts / #dis provenance tags are
stripped before normalisation. It affects 12.4% of SAPC2 records and essentially
none of SAPC1's.
SAPC1 train + SAPC1 dev + SAPC2 train, deduplicated by audio filename, then filtered to 0.5-30 s.
| raw records across the three manifests | 586,089 |
| duplicates merged | 182,575 |
| unique recordings | 403,514 |
| used after the 0.5-30 s filter | 392,378 |
| audio used | 752.6 h |
| speakers | 1,055 |
SAPC2 re-releases most of SAPC1 rather than extending it: 182,575 of SAPC1's 218,900 train recordings reappear in SAPC2 under the same filename with identical duration and contributor. Concatenating the manifests would train on those twice and silently double the weight of the 483 speakers in both, so identity is taken from the audio filename and each recording is kept once. Where a recording appears in both releases the SAPC1 copy is kept, being the one without the bracketed markup; this is immaterial in practice, since after normalisation 182,574 of the 182,575 duplicated pairs are character-identical, the single exception being a typo SAPC2 corrected.
Held-out evaluation set, by aetiology:
| aetiology | training speakers | held-out speakers |
|---|---|---|
| Parkinson's Disease | 383 | 0 |
| ALS | 227 | 13 |
| Cerebral Palsy | 205 | 13 |
| Down Syndrome | 152 | 13 |
| Stroke | 88 | 9 |
Inherited unchanged from parakeet-ctc-0.6b-sapc1, whose learning rate and
effective batch came from a 20-cell grid; they were not re-searched here.
| 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 |
| gradient accumulation | 1 |
| 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 |
| feature encoder | trainable (not frozen) |
| gradient checkpointing | off |
| batch sampling | length-grouped |
| seed | 42 |
| hardware | 2x NVIDIA A100-SXM4-80GB, ~7.9 h |
Per-device batch size is not a free choice. Parakeet normalises over it in 24
BatchNorm1d layers, so it behaves as a hyperparameter in its own right.
SyncBatchNorm all-reduces the statistics across both processes, so 2 x 16
normalises over all 32 as a single device holding 32 would.
Dev WER was still falling on the final epoch, so this recipe has not saturated:
| epoch | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| WER | 16.81 | 14.87 | 14.48 | 13.88 | 13.40 | 12.81 | 12.59 | 12.11 | 12.02 | 11.69 |
| CER | 10.28 | 8.89 | 8.74 | 8.19 | 7.98 | 7.60 | 7.35 | 7.02 | 6.97 | 6.76 |
The trainer's metric reads slightly optimistic against a standalone pass: 11.69% there against the 12.08% reported above.
The 12.08% aggregate is pooled over words and so is dominated by the speakers who talk most. Averaged with equal weight per speaker it is 14.96%:
| min | 25th | median | 75th | max |
|---|---|---|---|---|
| 0.84% | 5.10% | 12.12% | 18.32% | 71.56% |
20 of the 48 held-out speakers are under 10% WER; 4 are above 30%.
| aetiology | speakers | mean WER | median WER |
|---|---|---|---|
| Down Syndrome | 13 | 21.77% | 15.75% |
| Cerebral Palsy | 13 | 18.53% | 17.25% |
| Stroke | 9 | 15.23% | 12.24% |
| ALS | 13 | 4.39% | 2.71% |
Any single number for this model is a poor description of what a given speaker should expect.
import torch
from transformers import AutoModelForCTC, AutoProcessor
model_id = "dys-asr/parakeet-ctc-0.6b-all"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCTC.from_pretrained(model_id).eval()
# audio: 16 kHz mono float32
inputs = processor(audio, sampling_rate=16_000, return_tensors="pt")
with torch.inference_mode():
logits = model(**inputs).logits
print(processor.batch_decode(logits.argmax(dim=-1)))
Greedy CTC decoding, no language model.