HelloAI
L5 Chapter 4 🐣 🕒 6 min

Whisper: Speech Recognition Solved (Mostly)

OpenAI's open-source ASR model — multilingual, robust, free. How it works + why it dominated.

A
Alai
8/13/2026

In 2022, OpenAI released Whisper — an automatic speech recognition (ASR) model.

It was open-source (Apache 2.0), multilingual (99 languages), and best-in-class in quality.

Whisper effectively solved speech-to-text for most use cases. This is its story.

The Pre-Whisper World

Before 2022, speech recognition was hard:

  • Required specialized companies (Google, Amazon, Nuance)
  • Closed APIs
  • Quality varied by language (English fine, others uneven)
  • Punctuation / casing often wrong
  • Background noise / accents = errors

Each company built their own dataset and pipeline. Open-source efforts (Mozilla DeepSpeech) were limited.

What Whisper Did

OpenAI trained Whisper on 680,000 hours of multilingual audio scraped from the web — diverse, noisy, real-world.

Architecture: standard Transformer encoder-decoder.

  • Encoder: takes audio mel-spectrograms, outputs representation
  • Decoder: generates text autoregressively

Trained on multiple tasks simultaneously:

  • Transcription (audio → text in same language)
  • Translation (audio → English text from any language)
  • Language identification
  • Voice activity detection

Just by training on a lot of varied data, the model became robust to:

  • Background noise
  • Accents
  • Speed (fast/slow speakers)
  • Music in background
  • Multiple speakers (somewhat)

Model Sizes

ModelParamsLanguagesSpeed
tiny39M99Realtime+
base74M99Realtime
small244M99~realtime
medium769M99< realtime
large1.55B99Slowest, best quality
large-v3 (2023)1.55B99Improved version

For most use cases: medium or large. Tiny/base for embedded.

Performance

On standard benchmarks (WER = word error rate):

LanguageWhisper Large WERPre-Whisper SOTA
English (clean)3-5%4-6%
English (noisy)8-12%15-25%
Mandarin8-12%10-15%
Japanese10-15%15-25%
Low-resource languages30-50%50-80%

Cross-language, multi-condition robustness was the breakthrough.

Using Whisper

Locally with openai-whisper

pip install openai-whisper

# Command line
whisper audio.mp3 --model large --language en

# Python
import whisper
model = whisper.load_model("large")
result = model.transcribe("audio.mp3")
print(result["text"])

Faster Implementations

The original Python implementation is slow. Better:

ImplementationSpeedNotes
openai-whisperReference, slow
faster-whisper (CTranslate2)Best CPU/GPU
whisper.cpp5× CPUC++ port, runs on Mac/embedded
WhisperX3-10× + timestampsAligned with words
Distil-Whisper (HF)Distilled smaller variant

For production: faster-whisper or WhisperX.

Via API

OpenAI offers a hosted API:

from openai import OpenAI
client = OpenAI()
audio = open("audio.mp3", "rb")
result = client.audio.transcriptions.create(model="whisper-1", file=audio)
print(result.text)

$0.006 per minute → for occasional use, simpler than self-hosting.

Strengths

1. Multilingual

Single model handles 99 languages. No per-language tuning needed.

2. Robustness

Handles real-world audio: phone calls, podcasts, lectures, voice memos.

3. Punctuation + Capitalization

Outputs include proper punctuation, casing, paragraphs. Most prior ASR was lowercase + no punctuation.

4. Open Source

MIT-licensed weights. Companies can self-host without API costs.

5. Translation Built-in

Whisper can directly translate from any language to English text:

result = model.transcribe("french.mp3", task="translate")
# → English text of the French content

Limits

1. Hallucination

Whisper sometimes invents text during silence:

  • “Thank you for watching!” (because trained on YouTube)
  • Random filler when audio is unclear

Solutions:

  • Use voice activity detection (VAD) to skip silence
  • WhisperX includes this

2. Speaker Diarization

Whisper transcribes but doesn’t identify who is speaking. For “Speaker A said… Speaker B said…”:

  • Use pyannote-audio or similar for diarization
  • Combine with Whisper transcription

3. Real-Time Latency

Whisper processes 30-second chunks. Real-time captioning requires chunking + overlap handling.

Solutions: whisper-live projects, streaming variants.

4. Long Files

Long audio (1h+) can drift in time alignment. Solution: chunk + align.

Common Use Cases

  • Podcast transcription (1 hour = ~2 minutes processing)
  • Meeting notes + summarization (Whisper + GPT-4)
  • Subtitle generation (with timestamps via WhisperX)
  • Voice commands (combined with LLM for understanding)
  • Audio search (transcribe + index → search by text)
  • Accessibility (live captions)
  • Compliance (call recording transcription)

The Ecosystem It Enabled

Post-Whisper, an entire ecosystem of audio AI emerged:

  • Otter.ai — meeting transcription (premium)
  • Descript — audio/video editing via text
  • Wispr Flow — speech-to-text typing
  • Rev — transcription service (still uses humans + AI hybrid)

Whisper made “audio understanding” accessible. Companies built on top instead of from scratch.

Beyond Whisper

What’s next:

Whisper Successors

  • OpenAI continues improvement (whisper-large-v3 in 2023)
  • Open-source models match / exceed in specific languages

SeamlessM4T (Meta 2023)

Translation across 100 languages + speech-to-speech. “Universal translator” idea — Star Trek tech for real.

Real-time Streaming ASR

Models designed for low-latency:

  • NVIDIA Canary
  • Conformer-based architectures
  • Trade some accuracy for streaming

Speaker-Aware Models

Models that natively handle diarization + transcription.

A Concrete Example

Transcribe a podcast + summarize:

import whisper
from openai import OpenAI

# 1. Transcribe with Whisper
model = whisper.load_model("medium")
result = model.transcribe("podcast.mp3", language="en")
transcript = result["text"]

# 2. Summarize with GPT
client = OpenAI()
summary = client.chat.completions.create(
    model="gpt-4",
    messages=[{
        "role": "user",
        "content": f"Summarize this podcast transcript:\n\n{transcript}"
    }]
).choices[0].message.content

print(summary)

This is how modern podcast / video summarization apps are built.

Technical Insight: Mel-Spectrogram

Whisper doesn’t see raw audio. Audio is converted to log-mel spectrogram:

Audio (1D waveform)
   ↓ STFT (sliding FFT)
Power spectrogram (frequency × time)
   ↓ Mel filterbank (perceptual scale)
Mel spectrogram (80 channels × time)
   ↓ log
Log-mel spectrogram → input to Whisper

This is the standard audio representation for deep learning.

Why? Mel scale matches human hearing — close frequencies near 100Hz, less precision at 10kHz.

Cost Comparison

  • OpenAI API: 0.006/minute0.006/minute → 0.36/hour
  • Self-host on GPU: ~$0.05/hour (compute cost)
  • Self-host on CPU with whisper.cpp: ~$0 (slow but free)

For high volume: self-host. For low volume / convenience: API.

💡 A perspective

Whisper is a great example of scaling laws + diverse data.

Not a brilliant new architecture (it’s vanilla Transformer encoder-decoder). The breakthrough was train on 680,000 hours of diverse data.

Throwing data + scale at standard architectures can reset entire fields. Speech recognition was hard for decades; Whisper made it (mostly) easy in one paper.

The next “Whisper for X” is probably hiding somewhere — waiting for someone to do the boring data collection work.

Next recommended: L5-05 TTS or L5-01 Multimodal Overview.