Automatic speech recognition works well on clean audio and falls apart with background noise and reverb. The obvious fix — run a speech enhancement preprocessor first — sounds like it should always help. Our BSc thesis at ZHAW measured whether it actually does.

We built a Python evaluation pipeline that ran noisy audio corpora through five enhancers (Noisereduce, NVIDIA Maxine, Dolby.io, PoCoNet, Deep Xi) and four speech-to-text engines (Google Cloud, Azure, Mozilla DeepSpeech, Apple’s SFSpeechRecognizer), then compared word error rates. pandas and numpy did the heavy lifting for wrangling thousands of transcript–reference pairs into WER deltas per combination.

The five enhancers ran as Dockerized microservices on two GPU servers behind a load balancer, receiving audio over HTTP

The honest headline: enhancement is not a free win. Some combinations improved WER; others introduced artifacts that made transcription worse.

Histograms of WER differences vs. baseline for six enhancer configurations with DeepSpeech — most mass sits near zero, with long tails in both directions If you magically knew the best preprocessor for each clip, you’d cut WER by 7.1% on a high-variance corpus. So the second half of the thesis tried to predict that choice.

The first attempt failed in an instructive way. We extracted acoustic features with librosa and the Dolby.io Analyze API, and trained SVMs and neural networks (scikit-learn, with StandardScaler and dummy-classifier baselines) to map features to the best preprocessor. Neither beat the baseline — those features just don’t correlate with transcription quality.

Correlation matrix of Dolby.io and librosa acoustic features — plenty of structure between the features themselves, none pointing at transcription quality

What worked was attacking the output instead of the input. A neural network approximating WER directly could decide whether to apply the Dolby.io enhancer at all, worth a 3.1% WER reduction. The best result used GPT-2: we scored transcript fragments with gpt2-large via lm-scorer, using a sliding window of conditional word probabilities to flag garbled transcripts. Picking transcripts by language-model probability recovered a 7% WER reduction on a test set where the theoretical best was 9.8%.

WER delta distributions: best case, SVM with sentence-scoring probabilities, and worst case — the predictions land close to the best case

The takeaway that stuck with me: the negative result was the valuable part. Knowing that acoustic features can’t predict enhancement outcomes saved us from tuning a dead-end model, and pointed us to the language-model approach that actually worked.