CoolFace
Modelpublic

dys-asr/parakeet-tdt-0.6b-all-soup

sourceHugging Faceotherupdated 9d agoView on Hugging Face
0likes45downloads
Model Card

Parakeet TDT 0.6B — all-data run, last five epochs averaged

An equal-weight average of the epoch 6, 7, 8, 9 and 10 checkpoints of `dys-asr/parakeet-tdt-0.6b-all`. No training was done here, and inference costs exactly what one model costs.

Like its ingredient, this model has no reported WER or CER and cannot have one. That run trains on every held-out hour the project has, including the SAPC2 dev split the rest of this family scores against. Averaging its epochs does not create a set to measure on.

So this checkpoint rests on a bet rather than a measurement, and it is worth stating plainly which bet: on the sibling run that did hold out a dev split, the same soup of the same five epochs was worth 0.27 CER points — 6.06% against 6.33% for the best single epoch. That is the whole of the evidence. It is evidence from a different architecture (RNN-T, not TDT) on different data, and it is one comparison, not a trend.

Why average at all, with nothing to rank

The ingredient run writes no best-N: with no dev manifest, nothing ranks its checkpoints, so its published weights are epoch 10 because epoch 10 is last. That is a weaker basis than it sounds. On the sibling that could rank, epoch 9 beat epoch 10 (6.06% against 6.09%), so "last" is not reliably "best" for this recipe.

Averaging sidesteps the choice. It cannot pick the wrong epoch because it does not pick one, and where a run has already flattened out the five checkpoints differ mostly by the noise an average cancels. That reasoning is why this exists; it is not a measurement, and the section above is the closest thing to one available.

Usage

python
import soundfile as sf
import torch
from transformers import AutoProcessor, ParakeetForTDT

model_id = "dys-asr/parakeet-tdt-0.6b-all-soup"
device = "cuda" if torch.cuda.is_available() else "cpu"

processor = AutoProcessor.from_pretrained(model_id)
model = ParakeetForTDT.from_pretrained(model_id).to(device).eval()

audio, rate = sf.read("utterance.wav", dtype="float32")
inputs = processor(audio, sampling_rate=rate, return_tensors="pt").to(device)
with torch.inference_mode():
    generated = model.generate(**inputs)
print(processor.batch_decode(generated, skip_special_tokens=True)[0])

Requires transformers>=5.9. Audio must be 16 kHz mono.

Ingredients

slotepochstep
last-5692,076
last-47107,422
last-38122,768
last-29138,114
last-110153,460

Uniform weights, 1/5 each, 723 tensors. No greedy selection — admitting ingredients by score needs a set to score on, and this family of runs does not have one.

Float tensors are averaged in float64 and cast back. BatchNorm's int64 num_batches_tracked is carried across as a maximum rather than averaged, since a counter has no meaningful mean and integer division would silently floor it. This changes nothing at inference: that counter is read only when a BatchNorm layer sets momentum=None, and Parakeet's layers set a momentum.

The soup is built and saved on CPU, deliberately. cuDNN flattens the prediction network's LSTM weights into one buffer the first time it runs on CUDA, which leaves decoder.lstm.weight_ih_l0 and its siblings sharing storage; safetensors writes that without complaint and then refuses to read it back. The result is reloaded and compared tensor by tensor before it is published.

Training data

The ingredient's, unchanged — 1,047.7 hours across 491,063 records after filtering: SAPC1 train and dev, SAPC2 train, the SAPC2 dev split other models in this family evaluate against, 103.1 hours of synthetic CosyVoice speech, 79.2 hours of chunks force-aligned out of recordings past the 45-second cap, and 15.5 hours of HeyJay! and AtaxiaUK, which are outside the challenge corpora. The ingredient card carries the full breakdown, the chunking method and the augmentation recipe.

That last item makes this an unconstrained-track model. An earlier version of this card and of the ingredient's omitted it.

Intended use and limitations

A competition entry for the Speech Accessibility Project Challenge, and research on atypical-speech recognition.

  • —No held-out evaluation exists, or can. Any score computed on SAPC1 dev or SAPC2 dev is a score on training data.
  • —Not comparable with its siblings, which report on a 48-speaker subset of SAPC2 dev that they never trained on.
  • —The 0.27-point justification is borrowed. It comes from an RNN-T run on a different corpus, and nothing here confirms it transfers to this TDT run.
  • —Inherits every limitation of the ingredient, including that its epoch selection was never validated.
  • —Requires `transformers>=5.9`. Not loadable by the 4.x line.
  • —Slow relative to CTC. Decoding is autoregressive.
  • —Lower-case, unpunctuated, numerals written as words.
  • —Single run, single seed. Averaging five epochs of one trajectory is not the same experiment as averaging five seeds, and says nothing about the latter.
  • —English only, 16 kHz mono.
  • —Not a clinical tool. Nothing here supports inference about any diagnosis.

License and attribution

The Speech Accessibility Project corpora are governed by their own data use agreement and are not redistributed here; reproducing this training set requires authorized access. Fun-CosyVoice3's terms apply to the synthesis component of the ingredient's training data.