CASE · Minor · other
VerifiedFirsthand recordWhisper transcribed 45 seconds of silence with a 0% no-speech probability and high confidence
Feeding pure silence to the Whisper speech recognition model returned a stock phrase such as 'Thank you.' The scores that came with it said the chance of no speech was 0% and confidence was high.
2 min read
- OBSERVED
- CATEGORY
- other
- BLAST RADIUS
- data
- DETECTED BY
- manual-audit
- TAGS
- #whisper #speech-to-text #hallucination #confidence-score #silence
CH 1
Cause
Whisper sometimes fills silent stretches with a fixed stock phrase for each language. When it does, the model's own confidence scores give no way to tell the hallucination apart.
CH 2
Consequence
A home-made transcription tool could put sentences nobody said into its output. The usual remedy, a threshold on the confidence scores, turned out not to work against this kind of hallucination.
CH 3
Fix
A duration-based check was built. A line is removed only when it is a content-free stock phrase and also has far too few characters for the time it spans, or sits between silences. Removed lines are not thrown away; they go to a separate file with their timestamps and the reason.
What happened
A home-made transcription tool uses Whisper for speech recognition, through two paths: a cloud API (Groq’s whisper-large-v3-turbo) and whisper.cpp running locally.
Silent stretches sometimes come back with phrases nobody said. To pin this down, 45 seconds of pure silence were sent in. For Japanese, the answer was the equivalent of “Thanks for watching.” Locally, whisper.cpp produced the same sentence over the same span (0.00–29.98 s).
The chaos on the ground
Whisper hallucination itself is well known. The usual remedy is to look at the
scores the model returns alongside the text: drop segments with a high
no_speech_prob or a low avg_logprob.
The measurements broke that idea. For pure silence, no_speech_prob was 0.0000
and avg_logprob was -0.151. “Zero chance of no speech, high confidence.” There
was nowhere to put a threshold.
Each language has its own phrase. Measured across 14 languages: “Thank you.” in English, “감사합니다.” in Korean, “Sous-titrage Société Radio-Canada” in French, “Продолжение следует…” in Russian.
Root cause
The hallucination fills the entire 30-second window Whisper looks at in one pass. The words are real words, but the timing is impossible for real speech. The model’s confidence measures how sure it was of the text it produced, not whether anyone actually said it. Here the two came apart.
The fix
- The clue was found in time instead. Across 5,009 past output segments, the longest real utterance was 19.51 s, and the median was 7.92 characters per second. Fourteen characters spread over 10.7 seconds is not how people talk.
- A line is removed only when both hold: it is a content-free stock phrase, and it has far too few characters for its span or is surrounded by silence. The first test alone would delete a real “thank you very much”; the second alone would delete real short back-channel replies.
- “Remove consecutive identical lines” was rejected. The real data contained the same words said two or three times in a row, for real.
- Removed lines are not discarded. They go to a separate file with their timestamps and the reason, so a wrong call can be undone. That is a precondition for any feature that deletes things automatically.
- A test runs over every past job’s output to make sure no real speech is removed.
Sources
- Firsthand account from the site operator. There is no public write-up to link to.
Pass this record on to your team