Brain Dump
Performance•••8 min read

On-device speech model accuracy: seven models, published numbers only

Word error rate for the seven speech models Brain Dump downloads, each attributed to whoever measured it, on which corpus, at which quantization. Three are UNKNOWN and stay UNKNOWN.

On-device speech model accuracy: seven models, published numbers only

Tested: Every figure on this page was published by the model authors or by the team that converted the file, and verified against the primary source on 2026-08-31. We have measured no word error rate of our own, on any model, on any device. Section 5 states what we will measure and how.

Brain Dump ships a model picker with seven on-device speech models, from a 32 MB file to a 574 MB file, all user selectable, all deletable, none of them calling a network. Two of them transcribe languages other than English, one of those across 25 languages from a 485 MB file on a phone. Choosing between them needs accuracy numbers, and accuracy numbers are where this category lies most often.

So the rule for this page: every number below was measured by somebody else, and it says who. We have not measured a word error rate. Not for one model, not on one device. Where nobody credible has published a number for the exact file the app downloads, the cell says UNKNOWN and stays UNKNOWN. A borrowed full-precision figure standing in for a quantized file is the specific dishonesty this page exists to avoid.

What word error rate is, and what it hides

Word error rate is substitutions plus deletions plus insertions, divided by the number of words in the reference transcript.

WER = (substitutions + deletions + insertions) / words in the reference

Lower is better. It also treats every mistake as equal. "There" for "their" and a mangled surname both score one error, and you do not experience those as the same mistake.

The seven files, and what has been published about each

The four transcribe.cpp models are converted and published by handy-computer, the team behind transcribe.cpp. They publish WER for each quantized file they ship, not for a full-precision proxy, on the full LibriSpeech test-clean split, 2,620 utterances, greedy decoding, no external language model, with an F32 run through the same harness for comparison. That is why those four rows exist at all.

Model in the picker File downloaded Size Languages Published WER, LibriSpeech test-clean F32 in the same harness
Tiny ggml-tiny-q5_1.bin 32.2 MB multilingual checkpoint UNKNOWN n/a
Small ggml-small-q5_1.bin 190.1 MB multilingual checkpoint UNKNOWN n/a
Parakeet 110M parakeet-tdt_ctc-110m-Q4_K_M.gguf 90.0 MB English 2.53% 2.43%
Moonshine Base moonshine-base-Q8_0.gguf 77.5 MB English 3.26% 3.28%
Canary 180M Flash canary-180m-flash-Q4_K_M.gguf 139.2 MB English, German, Spanish, French 1.93% 1.94%
Parakeet 600M v3 parakeet-tdt-0.6b-v3-Q4_K_M.gguf 485.4 MB 25 European languages 1.98% 1.95%
Large ggml-large-v3-turbo-q5_0.bin 574.0 MB multilingual checkpoint UNKNOWN n/a

Sizes are the byte counts the app expects, in base-10 MB. Each WER links to the measurement it came from. Every WER in that column is measured on English audio.

Four things belong with that table, and none of them are optional.

The three UNKNOWN rows are the Whisper models, and they are UNKNOWN on purpose. The app downloads quantized ggml builds (q5_1, q5_0). Whisper's own paper measures full-precision checkpoints. What quantization costs those particular ggml files has not been measured by anyone publishing their method, and the figures circulating are blog-grade. Whisper Small at full precision scores 3.4 on this split. That number is not in the table because it is not a number about the file on your phone.

Quantization looks nearly free here, on clean read speech only. The largest gap in the table is a tenth of a percentage point, on Parakeet 110M. On Moonshine and Canary the quantized file scores fractionally under F32, and the Moonshine card says outright that the gap sits inside the 95% bootstrap confidence interval and is noise, not an improvement. Nobody has measured what quantization costs under noise, under an unfamiliar accent, or on very short utterances, which is exactly where a small model is most fragile.

Two of these models are multilingual, on the device, with no network call. Parakeet 600M v3 transcribes 25 European languages and detects the language itself rather than being told which one it is hearing: Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish and Ukrainian, as listed on NVIDIA's card. Canary 180M Flash recognises English, German, Spanish and French out of a 139 MB file (NVIDIA). Parakeet 110M and Moonshine Base are English only. The three Whisper files are the multilingual checkpoints, not the English-only builds.

Supporting a language and being accurate in it are different things. Canary 180M Flash scores 1.87 on LibriSpeech test-clean and 9.53 on Common Voice 16.1 English, same model and same card: five times the error rate, from the speakers alone. Parakeet 600M v3 averages 11.97% across the FLEURS languages, ranging from 3.00% on Italian to 24.03% on Slovenian, on the same benchmark on the same day. Every WER in the table above is an English number, and it does not carry over.

Comparability has limits even inside the table. Canary's porter measures 1.93% and NVIDIA reports 1.87% on the same split, a difference of roughly one substitution in 27,000 words, caused by harness and normalizer rather than by the model. Different rows normalize text differently. Small gaps between rows are not real differences.

Why a single test-clean number tells you almost nothing

LibriSpeech test-clean is read audiobook speech: scripted, close mic, no background noise, no false starts, no proper noun the model has never seen. A voice note is none of those things. The model authors publish the evidence for how far apart those two worlds are.

One model, one row of one table, nine different corpora. From the Whisper paper's Table 8, greedy decoding, the multilingual Whisper Small checkpoint:

Corpus What it is Whisper Small WER
LibriSpeech test-clean read audiobooks, clean 3.4
LibriSpeech test-other read audiobooks, harder speakers 7.6
TED-LIUM 3 conference talks 4.3
Common Voice 5.1 crowd-recorded volunteers, many accents 13.5
CORAAL interviews with African American English speakers 18.1
AMI-IHM meetings, head-worn mic 19.0
CHiME6 conversation recorded at a dinner party 29.3

Same weights, same decoder, same day. The number moves from 3.4 to 29.3, an 8.6x spread, and accent alone accounts for the move from 3.4 to 18.1. Source: Radford et al., Table 8.

Noise is measurable and it is large. NVIDIA publishes a signal-to-noise sweep for Parakeet 600M v3, mixing MUSAN music and noise into the eight Open ASR Leaderboard sets:

Condition Average WER LibriSpeech test-clean AMI
Clean 6.34% 1.93% 11.31%
10 dB SNR 7.12% 2.15% 13.99%
5 dB SNR 8.23% 2.62% 17.59%
0 dB SNR 11.66% 4.82% 24.44%
-5 dB SNR 19.88% 12.21% 34.91%

Source: NVIDIA parakeet-tdt-0.6b-v3. A phone held at arm's length in a cafe is not the clean row.

Put those together and the honest summary is short. Accent, background noise, disfluency, domain vocabulary and quantization all move the real number, most of them by more than the entire spread between the models in the table above. A leaderboard figure on clean read speech predicts almost none of what you will get.

Two claims this page does not make

Nothing about speed. The four transcribe.cpp models currently run CPU only, with Metal switched off in our integration, and nobody has timed them on a phone. Any seconds-per-minute or time-to-first-word figure would be invented.

Nothing about which phone you have. Every supported device gets the same catalog. The picker shows all seven models on every device, and any of them can be downloaded and deleted again. If you want the 574 MB model on an old iPhone, the picker will let you.

What we will measure, and have not measured yet

The published table is somebody else's work on somebody else's corpus. Here is the benchmark we intend to run and publish, stated in advance so the result can be checked against the plan.

Corpus. 60 utterances, 20 to 60 seconds each, in three sets of 20. Set A is read reference text, the only set comparable to the published LibriSpeech figures. Set B is natural voice notes with real disfluency, self-correction and domain vocabulary. Set C is Set B re-recorded in a noisy room with the SNR measured and recorded, targeting 5 to 10 dB. At least three speakers, at least one a non-native English speaker. Recorded inside the app, so the audio passes through the capture path we actually ship.

Ground truth and scoring. One human verbatim transcript per utterance. The normalization spec written down before scoring, using the Whisper text normalizer, cited, so Set A stays comparable to the leaderboard. Scoring with jiwer, reporting WER plus the substitution, insertion and deletion split, plus a 95% bootstrap confidence interval. Twenty utterances is a small sample and that interval will be wide. Publishing it is the difference between a number and a claim.

Devices. Three: one older iPhone, one recent iPhone, one Apple Silicon Mac.

Also recorded, because nobody publishes it. Time to first text, wall-clock seconds per minute of audio, peak resident memory, and thermal state at the end of the run. On a phone those decide whether a model is usable more than WER does.

The repro script, per the standing rule that every number we publish ships with one. A scoring script taking a results directory and a corpus directory, a runner that drives the CLI at fixed printed decode settings and writes the model file's SHA-256 into every result, and a corpus manifest listing speaker, accent, set, duration, measured SNR and file hash for each utterance. If speaker consent does not allow publishing the audio, the manifest and hashes get published anyway and we say plainly that the audio is withheld.

Until that runs, this page has no number of our own on it, and it will not pretend otherwise.

Measuring your own dictation in ten minutes

You do not need any of the above to check the setup in your hand. Pick a 150-word passage with general vocabulary and no proper nouns you would have to spell. Read it once silently so your pace on the real run is natural. Dictate it into a blank note, copy the text out, and tally substitutions, deletions and insertions against the source. Punctuation the app inserts by itself does not count. Divide by 150.

Repeat three runs per condition and average. Change one variable at a time: quiet room against light background noise, phone at 15 to 25 cm against arm's length, same speaker and same passage throughout. Noise and mic distance are where the differences show up, and a result you produced yourself on your own voice beats every published table on this page.

Device OS version Environment Mic distance WER Time to first char
Quiet room 15 to 25 cm
Quiet room Arm's length
Background noise 15 to 25 cm
Background noise Arm's length

Related: dictation tips and mic positioning.

References

  1. handy-computer/parakeet-tdt_ctc-110m-gguf model card • https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf • Per-quantization WER on the full LibriSpeech test-clean split, 2,620 utterances, greedy TDT/RNN-T decoding, no external LM. Q4_K_M 2.53%, F32 reference baseline 2.43%. Card also reports NVIDIA's own 2.40% on the same split.
  2. handy-computer/moonshine-base-gguf model card • https://huggingface.co/handy-computer/moonshine-base-gguf • Q8_0 3.26% on LibriSpeech test-clean, F32 baseline 3.28%. The card states the quantized file scoring under F32 sits inside the 95% bootstrap confidence interval and is noise, not an improvement.
  3. handy-computer/canary-180m-flash-gguf model card • https://huggingface.co/handy-computer/canary-180m-flash-gguf • Q4_K_M 1.93% on LibriSpeech test-clean, F32 baseline 1.94%. Card notes NeMo's reference run on the same wavs gives 1.93%, one substitution apart in roughly 27,000 words, and that NVIDIA's own card reports 1.87%.
  4. handy-computer/parakeet-tdt-0.6b-v3-gguf model card • https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf • Q4_K_M 1.98% on LibriSpeech test-clean, F32 baseline 1.95%.
  5. nvidia/parakeet-tdt-0.6b-v3 model card • https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3 • Full-precision upstream. Supports 25 European languages, listed on the card, with automatic language detection. Open ASR Leaderboard average WER 6.34%. Noise robustness table using MUSAN music and noise: 6.34% clean, 7.12% at 10 dB SNR, 8.23% at 5 dB, 11.66% at 0 dB, 19.88% at -5 dB. FLEURS average 11.97%, ranging from 3.00% on Italian to 24.03% on Slovenian.
  6. nvidia/canary-180m-flash model card • https://huggingface.co/nvidia/canary-180m-flash • Full-precision upstream, greedy decoding, whisper-normalizer applied, batch size 128. 182M parameters, ASR in English, German, French and Spanish. LibriSpeech clean 1.87, and 9.53 on Common Voice 16.1 English. Same model, same card, five times the error rate.
  7. Radford et al. 2022, Robust Speech Recognition via Large-Scale Weak Supervision (Whisper) • https://arxiv.org/abs/2212.04356 • Table 8, English transcription WER with greedy decoding. Whisper small, multilingual checkpoint: 3.4 LibriSpeech test-clean, 7.6 test-other, 13.5 Common Voice 5.1, 18.1 CORAAL, 29.3 CHiME6. Full precision, not the quantized ggml build.
  8. Jeffries et al. 2024, Moonshine: Speech Recognition for Live Transcription and Voice Commands • https://arxiv.org/abs/2410.15608 • Table 2, Open ASR Leaderboard datasets, greedy decoding. Moonshine Base averages 10.07 across eight datasets against Whisper base.en at 10.32. The paper flags Earnings22 as its weak spot because 8% of that set is under one second.