Dictation, heard four ways

You said Saoirse.
It heard Sirsha.

Dictation gets everyday words right and fails on the ones that are slowest to type: names, tools, jargon. Quorum sends each recording to AssemblyAI four ways at once, each copy altered slightly, and lets the words vote. On real speech it makes 45% fewer errors than sending the recording as it is.

Spokenask Saoirse to check the kustomize overlay on etcd
Untouched Ask Sirsha·28 to check the customize overlay on it.
Faint noise Ask Saoirse·36 to check the customize overlay on it.
+200 ms Ask Saoirse·48 to check the customize overlay on Edged.
0.95× speed Ask Saoirse·50 to check the customize overlay on it.
Quorum Ask Saoirse to check the customize overlay on it.
A real capture from the AssemblyAI Dictation API. Small numbers are the model's own per-word confidence. The untouched recording is the one that got the name wrong.
45%

fewer word errors than sending the recording untouched

16.7%

word error rate on 20 real recordings, against 30.5% for untouched audio

1.3×

the wait of a single call. All four lanes are sent at the same time.

The problem

The words that matter most are the ones it gets wrong.

A dictation model handles "check the overlay" perfectly. It stumbles on Saoirse, kubectl, Ngozi: the colleague's name, the tool you use every day. Those are exactly the words you'd otherwise type by hand, so each miss costs the most.

The usual fix is to tell the model what to expect. We tried that first. AssemblyAI's Dictation beta accepts vocabulary hints and ignores them: the output is byte-identical with or without, even on the exact word you hinted. So Quorum takes a different route. Instead of telling the model what to hear, it lets the model hear the same sentence more than once.

How it works

One recording, four ears, one vote.

Your recording 1 · Transform 2 · Transcribe in parallel 3 · Vote Untouched Faint noise −46 dB +200 ms silence Slowed to 0.95× one sentence
01

Transform

Your clip is copied four ways: untouched, with faint noise, padded with 200 ms of silence, and slowed by 5%. You'd barely hear the difference. The model does.

02

Transcribe in parallel

All four copies go to AssemblyAI at the same moment, so you wait about as long as for one. A lane that times out, or answers in the wrong language, sits out.

03

Vote

The transcripts are lined up word by word. Where they disagree, the phrase with the most support and the highest confidence wins. It can pick among what the lanes heard, but it never invents a word.

Results

On real speech, the vote beats every single lane.

Word error rate, lower is better. 20 real recordings, one speaker, a laptop mic, each sentence loaded with rare names and niche tools. Quorum ties the best lane on 19 of 20 clips, but the best lane changes from clip to clip, so across the set it beats any fixed choice. Adding a list of names you're known to use takes it to 16.1%. The lanes were picked with a screen on this same audio that never looked at accuracy. Even so, treat these numbers as optimistic until they hold for new voices.

What we learned

Three things the API documentation doesn't tell you.

Vocabulary hints are accepted, and ignored.

keyterms, prompt, word_boost and invented field names all return 200. The transcript doesn't change, even for the exact word you hinted. A success code proved nothing. Comparing transcripts did.

It switches language on its own.

On an accented voice, the model sometimes answers in Devanagari script, spelling the English phonetically. No language setting stops it. Quorum notices when a lane has switched scripts and leaves it out of the vote.

जाओ मारा फ्लैग डी रिग्रेशन इन डी क्यूब फ्लो पाइपलाइन

“Xiomara flagged a regression in the Kubeflow pipeline”, as the API returned it

It's deterministic.

The same audio gives the same words and the same confidences, every time. So when the four lanes disagree, the transform is the cause, not chance. That's the property the whole idea rests on.

For builders

Already using AssemblyAI? Change one URL.

Quorum accepts the Dictation API's own request, with the same audio field and the same headers, and replies in the same format. An app built on AssemblyAI switches over by changing its address, and nothing else. Your key is passed straight through, so each caller pays for their own calls.

Same command. Only the host changes.

- curl https://dictation.assemblyai.com/transcribe \
+ curl http://localhost:5173/transcribe \
    -H "Authorization: $ASSEMBLYAI_API_KEY" \
    -H "X-AAI-Model: universal-3-5-pro" \
    -F "audio=@clip.wav;type=audio/wav"

What comes back, from a real recording

AssemblyAITell CEO Bhan the Grafana Loki shards are backing up.
QuorumTell Siobhan the Grafana Loki shards are backing up.

The speaker said "Siobhan". Quorum's reply has the same fields as the API's (text, words, confidence, audio_duration_ms) plus a quorum block your app can ignore.

Hear it on your own voice.

Hold a key, say a sentence with a name in it, and watch four transcripts settle into one.