#5456: Parakeet vs Whisper: Picking a Phone ASR Model

Why Whisper loses on Android, why Parakeet v2 beat v3, and how to benchmark speech-to-text without any tooling.

Featuring
Listen
0:00
0:00
Episode Details
Episode ID
MWP-5639
Published
Duration
24:29
Audio
Direct link
Pipeline
V5.2
TTS Engine
chatterbox-regular
Script Writing Agent
DeepSeek 4.1 Flash

AI-Generated Content: This podcast is created using AI personas. Please verify any important information independently.

Whisper is the first name most people reach for in open-source speech recognition, but it was built for batch transcription on a desktop, not for a phone. Its encoder-decoder architecture wants a thirty-second audio window and decodes it in one pass, which is a poor fit for someone dictating for minutes at a time and expecting words to appear as they speak. NVIDIA's Parakeet family, built on the NeMo toolkit, was designed for efficient inference from the start, and it consistently outperforms Whisper in this on-device use case.

The most interesting result: Parakeet v2, which is English-only, beat the multilingual v3. Parameter count is capacity, and capacity gets spent. A multilingual model shares its parameters across every language it was trained on, so a single-language user gets more effective capacity from a model that only ever learned one language. The same logic explains why a 0.6B model at 4-bit quantization may beat a 1.1B model — the bigger model's capacity is spread across languages the user doesn't speak.

Three decisions move accuracy and latency: version, size, and quantization. Quantization to four bits cuts memory roughly fourfold and speeds up arithmetic on mobile silicon, but it introduces silent rounding errors on rare words, names, and accents. Streaming models, meanwhile, commit to output too early for multi-minute dictation; context boundary generation, which transcribes natural pauses and syntactic breaks as whole segments, fits composition-by-voice far better.

The real gap is tooling. Desktop ASR benchmarking is a solved problem, but there is no standard Android harness for measuring on-device accuracy and latency — and cloud benchmarking defeats the purpose, since it loses the memory pressure, thermal throttling, and NPU-specific quantization behavior that only exist on the phone. A ten-sentence, record-and-score-offline approach works as a screening tool, but with a margin of error around thirty percentage points, it can only catch dramatic differences, not close ones.

Downloads

Episode Audio

Download the full episode as an MP3 file

Download MP3
Transcript (TXT)

Plain text transcript file

Transcript (PDF)

Formatted PDF with styling

#5456: Parakeet vs Whisper: Picking a Phone ASR Model

Corn
Okay. I need everyone to know that Daniel has spent his week doing something I consider deranged, and I say that with love.
Herman
He's been running speech-to-text models on his phone. On purpose. For fun.
Corn
For science, allegedly. Here's what he wrote in. He's had this goal for about two years now, going fully dictation-first, no typing. And Whisper's been the big name in open source ASR the whole time, but he's never found it works well on his phone specifically. He's not doing this to save money on API calls. Reception in his new area is spotty, so local ASR means he can keep dictating through a dead zone and push the audio out whenever the signal comes back. He's tried basically every local model you can run on Android. Moonshine, the rest of them. NVIDIA's Parakeet series is the one that's consistently impressed him.
Herman
Which is interesting, because Whisper is what everyone reaches for first.
Corn
Right. He landed on an app called Whisperian, and then the actual hard part started, which was trying the variants. He dictates for minutes at a time, so the real-time streaming models fall apart on him. The ones doing context boundary generation fit his style much better. And then the surprise: he got better results out of Parakeet v2 than v3. He suspects it's because v2 is English-only. He was also startled that the 1.1 billion parameter model would even run on the phone. His hunch is that 0.6B v2 at 4-bit quantization is the sweet spot for his voice and his hardware.
Herman
Three decisions, not one.
Corn
Three decisions. Version, size, quantization. Each one moves accuracy and latency. And here's where he's stuck. He knows how to benchmark ASR on his desktop. He doesn't know of any tooling for Android, and the catch is that the inference has to happen on-device or the benchmark tells you nothing. So his plan is to generate ten sentences, record them with each variant on the phone, push the transcripts to the cloud, and compute word error rate offline. He knows he won't get inference time in milliseconds. He figures it's enough to rank them. And he wants to know if we've got better ideas. He's budgeting about an hour.
Herman
An hour. That's the part I want to talk about.
Corn
Naturally. So let's get into it, because there's a lot here and the first thing worth untangling is why Whisper, the model everyone names first, is the wrong tool for this job entirely.
Herman
Whisper was never built for a phone. It was built for batch transcription. You hand it a file, it hands you text, and it does that extremely well. The architecture is an encoder-decoder transformer, and the smallest useful variants are not small. Base is seventy-four million parameters. Small is two hundred forty-four million. Medium is seven hundred sixty-nine million. Large is one and a half billion.
Corn
And those numbers mean nothing to a person until you put them next to a phone.
Herman
Right, so think about what a phone actually gives you. You've got a mobile NPU with a fixed compute budget, you've got memory bandwidth that's shared with everything else on the device, and you've got thermal headroom that disappears the moment the thing warms up. Whisper large at one and a half billion parameters, even quantized, is asking a phone to do something it was not designed to do. And the deeper problem isn't size, it's shape. Whisper wants to see a thirty-second window of audio and decode it in one go. That's fine when you're transcribing a podcast file on a laptop. It's terrible when you're holding a phone and want words to appear as you speak.
Corn
So the mismatch is architectural, not just a matter of the model being too fat.
Herman
It's both, but the architecture is the part people miss. Whisper's decoder attends over the whole encoded chunk. There's no incremental state you can carry forward cheaply. So a mobile implementation either waits for a full window before producing anything, which feels broken to a user, or it hacks around the architecture and loses accuracy. Neither is what you want when you're dictating for four minutes straight.
Corn
And Parakeet is different how?
Herman
Parakeet is NVIDIA's family, built on their NeMo toolkit. The sizes Daniel's working with are six hundred million and one point one billion. Same rough order of magnitude as Whisper medium, but designed from the start for efficient inference and deployment, which means the operators and the memory access patterns are friendlier to accelerators. It's the difference between a model that was trained and then someone tried to make it fast, and a model that was trained with deployment in mind.
Corn
That's a real distinction. A lot of models get optimized after the fact and it shows.
Herman
It shows in exactly the place Daniel cares about. And then there's the v2 versus v3 thing, which I think is the most interesting result he reported. v2 is English-only. v3 is multilingual. He got better results from v2.
Corn
Which sounds backwards. More languages, more capability, right?
Herman
That's the intuition and it's wrong. Parameter count is capacity, and capacity gets spent. If you train a model to handle forty languages, those parameters are shared across all of them. The model has to represent phoneme inventories, vocabularies, and syntax for everything it's been taught. When you ask it to transcribe English, it's still carrying all of that. A model trained only on English spends every parameter it has on the one language you actually speak. For a single-language user, that focus is worth more than the breadth.
Corn
So v3 isn't worse. It's just carrying luggage Daniel never asked it to carry.
Herman
That's a clean way to think about it. And it explains why he could run the 1.1B model and still prefer the 0.6B one. The bigger model has more capacity, but if that capacity is spread across languages he doesn't use, the effective capacity for his English is smaller than the English-only model's total.
Corn
Okay, so that's decision one. Version. Now quantization, because that's the one I understand least and I suspect it's doing more work than people give it credit for.
Herman
Quantization is reducing the precision of the model's weights. Normally those weights are stored in sixteen-bit floating point. Quantize to four-bit integers and you've cut the memory footprint by roughly four times, and you've also made the arithmetic cheaper because integer operations are faster and cooler than floating point on most mobile silicon.
Corn
Four times smaller. That's the difference between a model that loads and one that doesn't.
Herman
It's often exactly that. But the cost is real. Four-bit integers can only represent sixteen distinct values. So every weight gets rounded to the nearest one of sixteen levels. Most of the time the model barely notices. But on rare words, unusual names, strong accents, technical vocabulary, that rounding error can flip a decision. And it flips it silently. You don't get a warning, you get a wrong word.
Corn
Which is precisely the failure Daniel's going to be measuring, whether he knows it or not.
Herman
Which is why the benchmark matters. Four-bit is usually the practical floor on mobile, and it's usually good enough.
Corn
Here's the thing I want to poke at. He said streaming models never do well with his style. I want to understand why, because "streaming" sounds like it should be strictly better. Lower latency, words as you go.
Herman
Streaming models process audio in small chunks, often a few hundred milliseconds at a time, and they commit to output early. That's the whole point. Low latency means you can't wait to see how the sentence ends. So the model is essentially guessing at the end of a clause before it's heard the rest of it.
Corn
And Daniel doesn't speak in tidy hundred-millisecond units.
Herman
Nobody does. He dictates for minutes. He pauses mid-thought, he restarts sentences, he runs clauses together. A streaming model has already emitted text for the first half of a sentence by the time the second half arrives and contradicts it. Context boundary generation is the fix. Instead of chopping on a fixed clock, the system looks for natural boundaries, a pause, a breath, a syntactic break, and transcribes those segments whole. The model gets enough context to resolve ambiguity before it commits.
Corn
So it's the difference between transcribing what he said and transcribing what he was saying at the two-second mark.
Herman
That's the whole thing. And it's a use-case fit question, not a quality question. A streaming model is the right call for live captioning. It's the wrong call for someone composing prose by voice.
Corn
There's a thread on Hacker News about Apple's SpeechAnalyzer that's been chewing through exactly this, Parakeet versus Whisper on-device, and the numbers people are posting line up with what Daniel found. Whisper is not the automatic winner once you leave the desktop.
Herman
It isn't, and that's the misconception worth killing early. Whisper is excellent. It's just excellent at a different job.
Corn
So Daniel's got his three dials. Version, size, quantization. And he's got a hypothesis. Now he wants to test it, and this is where the episode turns, because the tooling situation is bleak.
Herman
It's bleak, and I want to be precise about why. On desktop, benchmarking ASR is a solved problem. You've got the audio, you've got the reference transcript, you run the model, you compute word error rate, you're done. There are libraries that do this. There's a whole ecosystem.
Corn
And on Android?
Herman
Nothing. Or close enough to nothing that it doesn't matter. There's no standard harness that says "run this model on this phone, feed it this audio, give me accuracy and latency." The apps that run these models are consumer apps. They're built to transcribe your voice memos, not to expose an evaluation API.
Corn
And the catch Daniel identified is the killer. The inference has to happen on the device. If you benchmark in the cloud, you're measuring a server's behavior, not your phone's. You lose the memory pressure, you lose the thermal throttling, you lose the exact quantization behavior on that specific NPU. The benchmark becomes fiction.
Herman
That's the crux. The thing you're trying to measure only exists on the device. Which means you can't outsource the measurement.
Corn
So we've got a real gap. And I want to be fair to his proposed approach, because I think it's better than he's giving himself credit for. Ten sentences, recorded with each variant, transcripts saved to the cloud, word error rate computed offline.
Herman
Let's evaluate it honestly. Strengths first. It requires no custom tooling. It measures exactly what he cares about, accuracy on his voice, on his hardware, with his microphone. And it's cheap. An hour, like he said.
Corn
Weaknesses.
Herman
It doesn't capture latency. He knows that. It doesn't capture memory usage or thermal behavior. And ten sentences is a small sample. If two models are within a couple of percentage points of each other on word error rate, ten sentences won't separate them. The confidence interval on a sample that small is enormous.
Corn
How enormous?
Herman
Roughly, if you're measuring a rate on ten sentences, your margin of error is plus or minus thirty percentage points. Which means the benchmark can tell you that one model is dramatically better. It cannot tell you that one model is slightly better.
Corn
So it's a screening tool, not a ranking tool.
Herman
That's exactly what it is. And that's fine, as long as he knows it. If the gap is big, the test finds it. If the gap is small, he needs more sentences or a different method.
Corn
Which brings us to the other ideas. And I want to put these on the table properly, because he asked for them. First one: does the app expose anything scriptable? An intent, an API, a share target?
Herman
Worth checking, and I'd check it before building anything. If Whisperian or any of these apps will accept audio through an Android intent and return a transcript, you can script the whole loop with the Android Debug Bridge. Push the audio, fire the intent, pull the transcript, repeat. That turns a manual hour into a batch job.
Corn
And if it doesn't?
Herman
Then you build the smallest possible thing that does. Not an app for users. A test harness. You take the model's inference library, ONNX Runtime, TensorFlow Lite, or NVIDIA's own NeMo tooling if it's portable, and you write a minimal Android app that loads the model, feeds it a fixed set of audio files, and writes out the transcript plus a timestamp before and after each inference. That timestamp is your latency measurement.
Corn
And that gets him the milliseconds he said he wasn't going to get.
Herman
It does. It's more than an hour of work, though. I'd call it an afternoon if everything goes smoothly and a weekend if it doesn't. And there's a real chance it doesn't, because mobile ML build tooling is where desktop tooling was ten years ago.
Corn
Which is itself the story. This isn't Daniel's problem. This is a structural gap. Mobile ML tooling lags desktop ML tooling by years, and it lags worst in evaluation. Everyone's building inference runtimes for phones. Almost nobody's building measurement harnesses for phones.
Herman
Because the people building the runtimes are shipping products, and the people who need the measurements are researchers, and the two groups don't overlap as much as they should.
Corn
Third option. ADB scripting if the app supports it, which we covered. Fourth: does he even need Android-specific tooling? He could export the transcripts and compute word error rate offline with standard tooling. Hugging Face's evaluate library does word error rate. That part's solved.
Herman
That part's solved, and it's the part he already planned to do. The unsolved part is getting the transcripts out of the phone reliably.
Corn
So let me try to give him something actionable. If I were him, here's what I'd do. First, spend fifteen minutes checking whether the app exposes any automation surface at all. Intent, share target, filesystem access to the model output. If it does, script it and you've got a repeatable harness.
Herman
Second, if it doesn't, don't build an app yet. Do the manual ten-sentence test first, but do it properly. Use the same ten sentences across every variant. Record them once, cleanly, and feed the identical audio to each model. Otherwise you're measuring your own inconsistency, not the models.
Corn
That's important. Same audio, every variant. If he re-records for each model, the comparison is worthless.
Herman
And third, if the manual test shows a clear winner, stop. He doesn't need a harness. He needs a decision. The harness only earns its keep if the results are close or he wants to keep testing new models as they ship.
Corn
Which he will, because new models ship constantly.
Herman
Then the fourth thing is to build the harness, but build it as a general on-device evaluation tool, not an ASR-specific one. The loop is the same for any model. Feed input, capture output, timestamp both ends, export. Once you've got that, you can evaluate any on-device model on that phone, not just speech.
Corn
And that's the second-order point worth making. The workflow is the asset. The specific benchmark result is disposable. Models change every few months. A reusable evaluation pipeline on his phone is worth more than any single comparison.
Herman
There's one more thing I'd add, and it's a measurement Daniel didn't mention. Speaker adaptation. Some of these models have a warmup or adaptation phase where accuracy improves after they've heard you for a while. If he benchmarks cold, he might be measuring the wrong thing.
Corn
Does Parakeet do that?
Herman
I'm not certain it does anything adaptive in the deployed app. I don't want to overstate it. But it's worth controlling for. Run each model twice on the same audio and see if the second pass differs. If it does, you've got a variable you need to hold constant.
Corn
Fair. So let's say he does all this. He gets his numbers. What's he actually going to learn?
Herman
If his hunch is right, he learns that 0.6B v2 at four-bit beats 1.1B v2 at higher precision for his voice. Which is a counterintuitive result and worth knowing. It would mean the extra capacity of the bigger model is being eaten by something, either quantization differences or inference path differences on his specific hardware.
Corn
And if his hunch is wrong?
Herman
Then he learns that his intuition about the sweet spot was off, which is also worth an hour. The whole point of a benchmark is to lose an argument with reality.
Corn
I want to flag something about his framing, though. He said he wouldn't get inference time in milliseconds, and he seemed to accept that as the trade. But I don't think he has to. A stopwatch on the screen, or even counting seconds, gets you within a second of the truth. If one model takes two seconds and another takes eight, you don't need millisecond precision to make the call.
Herman
Latency is usually bimodal in practice. Models are either fast enough or they're not. The exact number rarely changes the decision.
Corn
So the lightweight version captures more than he thinks. Accuracy from word error rate, latency from a crude timer, and a subjective feel for whether it's usable. That's a complete picture for his purposes.
Herman
It is. And I'd add one more piece of data that costs nothing. Note the battery drain and whether the phone gets hot. Those are the things that make a model unusable in daily life, and no benchmark captures them.
Corn
A model that's accurate and fast but turns your phone into a hand warmer is not the sweet spot.
Herman
It's not. And that's the kind of thing you only learn by living with it.
Corn
Okay, so here's where I land. Daniel's plan is good. It's better than good, it's the right shape. Manual, same audio across variants, transcripts exported, word error rate computed offline. The improvements are: use a fixed sentence set, run each model twice to control for adaptation, capture crude latency with a timer, and note thermals and battery. Then, if the results are close, build the harness. Not before.
Herman
And if he builds it, build it general. For on-device evaluation.
Corn
Which brings us to the metric itself. Because word error rate is the standard, and I want to spend a minute on whether it's actually the right thing to optimize, given that Daniel's use case is dictating prose he's going to publish.
Herman
Word error rate is substitutions plus deletions plus insertions, divided by the total number of words in the reference. It treats every error as equally bad.
Corn
And they're not equally bad.
Herman
They're not. If a model transcribes "the" as "a," that's an error. If it transcribes a technical term as something else entirely, that's also an error. Same weight in the metric. Completely different consequences for the user.
Corn
Which is exactly the kind of thing that would make a model look great on paper and be miserable in practice.
Herman
There's a real risk there. A model can have a lower word error rate and still be worse for Daniel, if its errors cluster on the words that matter to him.
Corn
So the metric he should maybe be tracking is not just word error rate but something like meaning-altering error rate. Errors that change what the sentence means.
Herman
That's a harder thing to compute automatically, but it's very easy to compute by hand on ten sentences. He's already reading the transcripts. He can just mark which errors would have required him to go back and fix them.
Corn
Which is a better use of his hour than chasing a decimal point on word error rate.
Herman
It is. And it's the kind of thing that only shows up when you actually look at the output instead of the number.
Corn
Which is a good place to pause, because I think our producer has been sitting on something this whole time.

Hilbert: The patient became a patent. That's the one that got me.
Herman
Say more.

Hilbert: I did transcription for a medical group. Early voice-to-text, the kind that shipped on a CD. They bought it to cut the transcription pool. I was in the pool. My job for about a year was correcting the machine.
Corn
Correcting it how?

Hilbert: The system heard "patient" as "patent." Every time. Every time. And in our documents that word is load-bearing. "The patient was seen" became "the patent was seen." The billing people flagged it. The compliance people flagged it. We had a meeting about it.
Herman
One substitution, and it cascaded.

Hilbert: It wasn't the spelling. Nobody cares about the spelling. It was that the sentence stopped meaning anything. And the error rate on that system looked fine. It was the errors that mattered that were the problem.
Corn
So you'd have scored it well and it was useless.

Hilbert: I kept a notebook. Every error I caught, I wrote it down. Which word, which model version, what it should have been. Filled most of a spiral notebook over that year. Still have it in a box somewhere.
Herman
That's a labelled error corpus. That's the thing Daniel's trying to build.

Hilbert: It's a notebook. Anyway, the point is you want to count the errors that make you rewrite the sentence. The other ones you fix without thinking.
Corn
Which is exactly the distinction Herman was drawing. Meaning-altering versus cosmetic.

Hilbert: I've got to move a chest freezer before it gets dark. It's in the garage and it's not going to move itself.
Corn
A chest freezer.

Hilbert: It's empty. Mostly. I'll be back for the mix.
Corn
So Daniel's got his answer, and it's a better answer than the one he came in with. Word error rate gets him a ranking. Meaning-altering errors get him a decision.
Herman
The notebook Hilbert mentioned is the proof that the second metric is the one that survives contact with real work. He was doing this by hand thirty years ago and the lesson hasn't changed.
Corn
Here's the misconception I want to put to bed. The one I think most people carry into this. The belief that Whisper is the default best open source ASR model, full stop.
Herman
It's the default for batch transcription on a desktop, and it's excellent at that. It is not the default for a phone. Its architecture and its size make it a poor fit for on-device dictation, and NVIDIA's Parakeet models routinely beat it there. Daniel's own testing says the same thing.
Corn
The second one, which is subtler. The belief that bigger is better. That the 1.1B model has to beat the 0.6B model.
Herman
Not if the bigger model is multilingual and the smaller one is English-only. For a single-language user, focused capacity wins. Daniel ran the bigger model and still preferred the smaller one, and the reason is that v3's parameters are spread across languages he never speaks.
Corn
The open question I'm left with. Does he build the harness, or does he take the manual result and run?
Herman
I'd take the manual result and run, unless the numbers come back close. An hour gets him a decision. A weekend gets him a tool. The tool only pays off if he's going to keep testing.
Corn
The bigger question. Whether word error rate is even the right target, or whether the whole field should be tracking meaning-altering errors separately. Hilbert's notebook suggests the second one is what actually matters, and nobody's built a standard for it.
Herman
Nobody has. Which means Daniel, with ten sentences and a text editor, could build a better evaluation than the one that ships with most tooling.
Corn
That's the episode. Thanks to Hilbert Flumingtop for producing, and for the freezer update.
Herman
If you got something out of this one, leave us a review wherever you listen. It helps other people find the show.
Corn
This has been My Weird Prompts.
Herman
The human-AI collaboration podcast. We'll be back soon.

This episode was generated with AI assistance. Hosts Herman and Corn are AI personalities.