We wrap an off-the-shelf speech recognizer in modular layers โ denoise, speaker-selection, domain correction โ and fix farmer-speech errors without fine-tuning the recognizer. Hear a real farmer clip and watch the recognized query change, layer by layer.
The pipeline
Five layers around an off-the-shelf recognizer
Each layer fixes one way raw speech recognition fails on farmer audio โ field noise, competing speakers, domain words โ without fine-tuning the recognizer.
M0
Denoise
Strips field noise โ tractor, TV/radio, wind. Applied only where it helps that recognizer.
โ
M1
Diarize + speaker-select
Isolates the farmer from bystanders and cross-talk. The main lever โ cuts multi-speaker error 32โ43%.
โ
M2
Recognizer (ASR)
Any off-the-shelf model โ Gemini, Sarvam, Azure, IndicConformer. Never fine-tuned.
โ
M3
Domain correction
Fixes agriculture terms via an 18k-word lexicon. Targeted โ applied where it helps, off elsewhere.
โ
M4
Quality gate
Flags uncertain crop / chemical / dose terms to re-ask the farmer (agentic deployment).
Does the pipeline help? Yes โ significant on all four recognizers.
Whole corpus: 2,677 IISc clips, Hindi / Telugu / Odia, scored against the farmer's own words (WER; lower is better). The same modular pipeline wraps four off-the-shelf recognizers with no fine-tuning. Best config = speaker-select on, domain correction and denoise applied only where each recognizer benefits.
Recognizer
All clips: raw โ best
Multi-speaker: raw โ best
Multi-speaker audio is the production problem โ a bystander, a helper, or a TV competing with the farmer. That is where isolating the farmer pays off most. All improvements shown are statistically significant (paired-bootstrap 95% CI excludes zero). Denoise and correction are conditional: they help some recognizers and settings and are switched off where they do not.
Explore ยท per-clip examples
Choose a clip & the pipeline
The results above are the whole 2,677-clip corpus. Below are 150 example clips to inspect one at a time โ hear the audio and watch the recognized query change layer by layer.
Step 2
The farmer's query โ and what each setup heard
โ What the farmer actually asked (human reference)
Step 3
Accuracy by pipeline stage โ this clip
Same recognizer each row; only the layers change. Your current toggles are outlined. Longer / greener = better.
Step 4
Listen & look
โ Raw
the original recording
โก Denoised (M0)
background removed
โข Farmer-only (M1)
other speakers dropped
Waveform โ raw โ denoised โ removed noiseSpectrogram โ before vs after denoisingEnergy removed by the denoiser (larger โ noisier clip)
The idea
General ASR fails on farmer speech for three reasons โ field noise, competing speakers, and domain terms. Instead of fine-tuning the recognizer, we fix the problem around it with modular layers. Toggle them and switch recognizers to see it is model- and language-agnostic.
Modules
M0 ยท Denoise โ DeepFilterNet3, gentle (6 dB), CPU. Applied only on noisy clips and only for recognizers it helps: it curbs hallucinated insertions on generative recognizers at high noise, but adds errors on others, so it is switched off where it hurts.
M1 ยท Diarize + speaker-select โ a fine-tuned pyannote segmenter finds who speaks when; an energy-based rule keeps the farmer's turns. This is the dominant lever โ it strips bystander/cross-talk speech that the recognizer would otherwise transcribe into the query.
M2 ยท Recognizer โ any off-the-shelf ASR, never fine-tuned (here: Gemini 3.7, Sarvam saaras:v3, Azure, IndicConformer 600M).
M3 ยท Domain correction โ an 18k-word agriculture lexicon (mined from ~100k Farmer.Chat transcripts) fixes domain-term spellings. It recovers terms on genuinely mispronounced clips but over-normalizes correct text if applied everywhere, so it is targeted, not always-on.
M4 ยท Quality gate โ flags low-confidence critical terms (crop / chemical / dose) so an agentic deployment can re-ask the farmer rather than act on a wrong term.
Result (whole corpus: 2,677 IISc clips, Hindi / Telugu / Odia)
Each recognizer is scored against the farmer's own words (corpus WER; lower is better). The pipeline is a statistically significant improvement on all four recognizers (paired-bootstrap 95% CI excludes zero), and the win is largest on multi-speaker clips โ the production case where a bystander, helper, or TV competes with the farmer. Best-config WER (raw โ pipeline): Gemini 0.439 โ 0.338 all / 0.825 โ 0.471 multi (โ43%); Sarvam 0.399 โ 0.322 / 0.713 โ 0.469 (โ34%); Azure 0.439 โ 0.371 / 0.686 โ 0.467 (โ32%); IndicConformer 0.365 โ 0.346 / 0.508 โ 0.433 (โ15%). The lever is speaker-selection, and it generalizes across every recognizer with no fine-tuning, on a fine-tuned diarizer, across three languages. Denoise and correction are conditional (applied where each helps). On single-speaker clips the pipeline is neutral, not harmful โ there is nothing to isolate.
Real farmer recordings (IISc). The 150 example clips below are for per-clip inspection; the numbers above are the whole corpus. A live "run the pipeline on this clip" mode needs a server (hosted version).