TieIncred commited on
Commit
deb594e
Β·
verified Β·
1 Parent(s): c693333

Use markdown PNG images in model card

Browse files
Files changed (1) hide show
  1. README.md +430 -452
README.md CHANGED
@@ -1,452 +1,430 @@
1
- ---
2
- library_name: nemo
3
- pipeline_tag: automatic-speech-recognition
4
- license: apache-2.0
5
- language:
6
- - hi
7
- - bn
8
- - ta
9
- - te
10
- - kn
11
- - ml
12
- - mr
13
- - gu
14
- - pa
15
- - or
16
- - en
17
- tags:
18
- - automatic-speech-recognition
19
- - speech-recognition
20
- - fastconformer
21
- - nemo
22
- - indic
23
- - multilingual
24
- - telephony
25
- - call-center
26
- - zero-shot-language-identification
27
- - rnn-t
28
- datasets:
29
- - ai4bharat/IndicVoices
30
- - ARTPARK-IISc/Vaani
31
- metrics:
32
- - wer
33
- - cer
34
- model-index:
35
- - name: VaaniCall
36
- results:
37
- - task:
38
- type: automatic-speech-recognition
39
- name: Automatic Speech Recognition
40
- dataset:
41
- name: AI4Bharat IndicVoices (telephonic)
42
- type: ai4bharat/IndicVoices
43
- split: test
44
- metrics:
45
- - type: wer
46
- value: 24.06
47
- name: WER
48
- - type: cer
49
- value: 8.26
50
- name: CER
51
- - task:
52
- type: automatic-speech-recognition
53
- name: Automatic Speech Recognition
54
- dataset:
55
- name: AI4Bharat IndicVoices (clean)
56
- type: ai4bharat/IndicVoices
57
- split: test
58
- metrics:
59
- - type: wer
60
- value: 24.20
61
- name: WER
62
- - type: cer
63
- value: 8.31
64
- name: CER
65
- - task:
66
- type: automatic-speech-recognition
67
- name: Automatic Speech Recognition
68
- dataset:
69
- name: Google FLEURS (clean)
70
- type: google/fleurs
71
- split: test
72
- metrics:
73
- - type: wer
74
- value: 23.52
75
- name: WER
76
- - type: cer
77
- value: 8.34
78
- name: CER
79
- ---
80
-
81
- <div align="center">
82
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/banner.svg" alt="VaaniCall β€” multilingual telephony ASR for India" width="100%">
83
- </div>
84
-
85
- <br>
86
-
87
- # VaaniCall
88
-
89
- **Call-grade speech recognition for 11 Indian languages.**
90
- By [Tausif Iqbal](https://huggingface.co/TieIncred). Built on NVIDIA NeMo FastConformer, fine-tuned from VAANI for PSTN, VoIP, and contact-center audio.
91
-
92
- VaaniCall transcribes a phone call without a language code. It infers language and script, and it is trained through a 21-stage telephony pipeline so AMR, packet loss, and handset noise look like training data β€” not a domain shift.
93
-
94
- <div align="center">
95
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/languages.svg" alt="Supported languages: Hindi, Bengali, Tamil, Telugu, Kannada, Malayalam, Marathi, Gujarati, Punjabi, Odia, English" width="100%">
96
- </div>
97
-
98
- ---
99
-
100
- ## Why VaaniCall
101
-
102
- | | |
103
- |---|---|
104
- | **Zero-shot language ID** | No `lang=` argument. One model, eleven languages, native scripts. |
105
- | **Telephony-hardened** | 21-stage GPU augmentation: codecs, burst loss, VAD bite, handset EQ, room IR. |
106
- | **Holds on clean audio** | Phone fine-tune does not tax clean WER (24.20% β†’ 24.06% on IndicVoices). |
107
- | **Beats Whisper on Indic** | **3.5Γ— lower** overall WER than Whisper large-v3 on IndicVoices. |
108
- | **FastConformer + RNNT** | Streaming-friendly NVIDIA NeMo `EncDecRNNTBPE` checkpoint (`.nemo`). |
109
-
110
- ---
111
-
112
- ## Performance at a glance
113
-
114
- All numbers are **Word Error Rate** (lower is better). Evaluations use **500 clips per language**.
115
-
116
- <div align="center">
117
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/wer_overall_vs_whisper.png" alt="Overall WER: VaaniCall vs Whisper large-v3 on IndicVoices and FLEURS" width="100%">
118
- </div>
119
-
120
- | Benchmark | Condition | VaaniCall | Whisper large-v3 | Relative WER cut |
121
- |---|---|---:|---:|---:|
122
- | IndicVoices | Clean | **24.20%** | 84.07% | **71%** |
123
- | IndicVoices | Telephonic | **24.06%** | 84.50% | **72%** |
124
- | Google FLEURS | Clean | **23.52%** | 65.23% | **64%** |
125
-
126
- Whisper large-v3 still leads on **English**. VaaniCall is the Indic-language model.
127
-
128
- <div align="center">
129
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/telephony_robustness.png" alt="VaaniCall WER stays flat from clean to telephonic audio" width="100%">
130
- </div>
131
-
132
- ---
133
-
134
- ## Benchmarks
135
-
136
- ### vs Whisper large-v3 β€” IndicVoices, telephonic
137
-
138
- <div align="center">
139
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/wer_indicvoices_telephonic.png" alt="Per-language telephonic WER vs Whisper large-v3" width="100%">
140
- </div>
141
-
142
- <details>
143
- <summary><b>IndicVoices Β· telephonic Β· full table</b></summary>
144
-
145
- | Language | N | VaaniCall WER ↓ | VaaniCall CER ↓ | Whisper WER | Whisper CER |
146
- |---|---:|---:|---:|---:|---:|
147
- | Bengali | 500 | **15.41%** | **4.93%** | 73.87% | 38.04% |
148
- | English | 500 | 13.26% | 4.56% | **7.80%** | **3.04%** |
149
- | Gujarati | 500 | **21.46%** | **7.56%** | 61.48% | 29.72% |
150
- | Hindi | 500 | **16.04%** | **6.87%** | 30.31% | 15.61% |
151
- | Kannada | 500 | **38.01%** | **10.96%** | 98.03% | 53.05% |
152
- | Malayalam | 500 | **40.70%** | **11.53%** | 138.83% | 108.41% |
153
- | Marathi | 500 | **17.10%** | **6.30%** | 93.50% | 47.21% |
154
- | Odia | 500 | **31.52%** | **10.40%** | 110.63% | 97.36% |
155
- | Punjabi | 500 | **14.46%** | **6.03%** | 86.10% | 54.26% |
156
- | Tamil | 500 | **33.82%** | **9.84%** | 80.72% | 40.71% |
157
- | Telugu | 500 | **28.45%** | **8.63%** | 146.64% | 97.12% |
158
- | **Overall** | **5500** | **24.06%** | **8.26%** | 84.50% | 56.30% |
159
-
160
- </details>
161
-
162
- <details>
163
- <summary><b>IndicVoices Β· clean Β· full table</b></summary>
164
-
165
- | Language | N | VaaniCall WER ↓ | VaaniCall CER ↓ | Whisper WER | Whisper CER |
166
- |---|---:|---:|---:|---:|---:|
167
- | Bengali | 500 | **15.16%** | **4.96%** | 73.36% | 36.81% |
168
- | English | 500 | 14.14% | 4.67% | **8.37%** | **3.12%** |
169
- | Gujarati | 500 | **20.02%** | **6.68%** | 56.27% | 25.96% |
170
- | Hindi | 500 | **16.45%** | **6.77%** | 30.71% | 15.20% |
171
- | Kannada | 500 | **38.26%** | **11.02%** | 99.44% | 52.16% |
172
- | Malayalam | 500 | **41.79%** | **12.11%** | 145.50% | 114.81% |
173
- | Marathi | 500 | **16.76%** | **5.80%** | 92.38% | 46.12% |
174
- | Odia | 500 | **31.85%** | **10.63%** | 107.96% | 95.15% |
175
- | Punjabi | 500 | **15.71%** | **6.59%** | 89.11% | 58.95% |
176
- | Tamil | 500 | **34.50%** | **10.22%** | 77.39% | 38.11% |
177
- | Telugu | 500 | **28.39%** | **8.73%** | 141.52% | 96.52% |
178
- | **Overall** | **5500** | **24.20%** | **8.31%** | 84.07% | 56.30% |
179
-
180
- </details>
181
-
182
- ### vs Whisper large-v3 β€” Google FLEURS (out of domain)
183
-
184
- Held-out read speech. Odia is not in FLEURS.
185
-
186
- <div align="center">
187
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/wer_fleurs.png" alt="FLEURS out-of-domain WER vs Whisper large-v3" width="100%">
188
- </div>
189
-
190
- <details>
191
- <summary><b>FLEURS Β· clean Β· full table</b></summary>
192
-
193
- | Language | N | VaaniCall WER ↓ | VaaniCall CER ↓ | Whisper WER | Whisper CER |
194
- |---|---:|---:|---:|---:|---:|
195
- | Bengali | 500 | **26.00%** | **9.22%** | 77.60% | 32.63% |
196
- | English | 500 | 15.16% | 7.88% | **4.47%** | **1.78%** |
197
- | Gujarati | 500 | **24.94%** | **8.22%** | 54.99% | 22.19% |
198
- | Hindi | 500 | **15.70%** | **6.18%** | 27.61% | 9.63% |
199
- | Kannada | 500 | **25.80%** | **7.95%** | 72.85% | 22.87% |
200
- | Malayalam | 500 | **37.55%** | **10.36%** | 130.76% | 102.00% |
201
- | Marathi | 500 | **22.32%** | **7.18%** | 76.52% | 22.61% |
202
- | Punjabi | 500 | **16.53%** | **6.06%** | 74.63% | 35.88% |
203
- | Tamil | 500 | **32.78%** | **9.84%** | 47.73% | 12.11% |
204
- | Telugu | 500 | **29.19%** | **9.99%** | 126.29% | 74.64% |
205
- | **Overall** | **5000** | **23.52%** | **8.34%** | 65.23% | 34.04% |
206
-
207
- > Tamil CER is lower for Whisper (12.11%) despite a higher WER β€” typically an artifact of shorter predicted strings. VaaniCall still wins WER.
208
-
209
- </details>
210
-
211
- ### Per-language profile
212
-
213
- <div align="center">
214
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/wer_by_language.png" alt="VaaniCall WER by language on telephonic IndicVoices" width="100%">
215
- </div>
216
-
217
- Strongest Indic languages on phone audio: **Punjabi 14.5% Β· Bengali 15.4% Β· Hindi 16.0% Β· Marathi 17.1%**.
218
-
219
- ### vs VAANI base β€” the telephony fine-tune
220
-
221
- VaaniCall is a telephony specialist on top of VAANI. On phone-channel audio it improves **9 of 10** Indic languages. On clean audio the two models are statistically tied (24.37% vs 24.38% WER).
222
-
223
- <div align="center">
224
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/delta_vs_vaani_base.png" alt="WER reduction versus VAANI base under telephonic conditions" width="100%">
225
- </div>
226
-
227
- <details>
228
- <summary><b>vs VAANI base Β· telephonic</b></summary>
229
-
230
- | Language | N | VaaniCall WER ↓ | VAANI WER | Ξ”WER | VaaniCall CER ↓ | VAANI CER | Ξ”CER |
231
- |---|---:|---:|---:|---:|---:|---:|---:|
232
- | Bengali | 500 | **19.85%** | 21.70% | +1.85 | **7.74%** | 9.36% | +1.62 |
233
- | Gujarati | 500 | **26.27%** | 28.97% | +2.70 | **10.72%** | 11.50% | +0.78 |
234
- | Hindi | 500 | **19.65%** | 20.28% | +0.63 | **8.92%** | 9.22% | +0.30 |
235
- | Kannada | 500 | **44.44%** | 47.03% | +2.59 | **14.93%** | 15.73% | +0.80 |
236
- | Malayalam | 500 | **47.67%** | 48.51% | +0.84 | **16.46%** | 16.79% | +0.33 |
237
- | Marathi | 500 | **23.65%** | 25.12% | +1.46 | **9.29%** | 10.02% | +0.73 |
238
- | Odia | 500 | 35.93% | **34.56%** | βˆ’1.37 | 13.65% | **13.28%** | βˆ’0.37 |
239
- | Punjabi | 500 | **20.26%** | 20.78% | +0.51 | **9.50%** | 9.71% | +0.21 |
240
- | Tamil | 500 | **40.88%** | 41.84% | +0.96 | **14.69%** | 15.10% | +0.41 |
241
- | Telugu | 500 | **32.17%** | 33.04% | +0.88 | **11.41%** | 11.75% | +0.34 |
242
- | **Overall** | **5000** | **29.96%** | 31.04% | **+1.08** | **11.96%** | 12.46% | **+0.51** |
243
-
244
- *Ξ” = VAANI βˆ’ VaaniCall. Positive Ξ” β†’ VaaniCall is better. English excluded (not a VAANI fine-tune target).*
245
-
246
- </details>
247
-
248
- <details>
249
- <summary><b>vs VAANI base Β· clean</b></summary>
250
-
251
- | Language | N | VaaniCall WER | VAANI WER | Ξ”WER | VaaniCall CER | VAANI CER | Ξ”CER |
252
- |---|---:|---:|---:|---:|---:|---:|---:|
253
- | Bengali | 500 | **14.94%** | 15.07% | +0.13 | 5.01% | **4.97%** | βˆ’0.04 |
254
- | Gujarati | 500 | **21.11%** | 21.93% | +0.82 | **7.38%** | 7.61% | +0.24 |
255
- | Hindi | 500 | 16.47% | **16.39%** | βˆ’0.08 | 6.78% | **6.75%** | βˆ’0.03 |
256
- | Kannada | 500 | **37.91%** | 38.78% | +0.87 | **10.99%** | 11.16% | +0.17 |
257
- | Malayalam | 500 | **40.37%** | 40.63% | +0.26 | **11.46%** | 11.60% | +0.14 |
258
- | Marathi | 500 | 17.05% | **17.01%** | βˆ’0.04 | 5.38% | **5.33%** | βˆ’0.05 |
259
- | Odia | 500 | 31.18% | **28.49%** | βˆ’2.69 | 9.68% | **9.15%** | βˆ’0.53 |
260
- | Punjabi | 500 | **14.17%** | 14.38% | +0.21 | 5.93% | **5.86%** | βˆ’0.07 |
261
- | Tamil | 500 | **34.26%** | 34.49% | +0.24 | **9.82%** | 9.87% | +0.05 |
262
- | Telugu | 500 | **27.12%** | 27.55% | +0.43 | **7.95%** | 8.07% | +0.12 |
263
- | **Overall** | **5000** | **24.37%** | 24.38% | **+0.01** | **8.17%** | 8.18% | **+0.01** |
264
-
265
- *Results are statistically equivalent on clean audio β€” the fine-tune does not spend general accuracy to buy telephony robustness.*
266
-
267
- </details>
268
-
269
- ### vs AI4Bharat IndicConformer
270
-
271
- IndicConformer is a strong general-purpose Indic ASR and still leads this comparison. VaaniCall is optimized for **call-channel robustness and zero-shot language ID**, not for matching a dedicated per-language conformer on clean read speech.
272
-
273
- | Condition | VaaniCall | IndicConformer | Gap |
274
- |---|---:|---:|---:|
275
- | Telephonic | 29.38% | **26.11%** | βˆ’3.26 pp |
276
- | Clean | 24.56% | **20.63%** | βˆ’3.93 pp |
277
-
278
- Largest telephonic gaps: Malayalam βˆ’5.61 pp, Telugu βˆ’5.49 pp. English excluded.
279
-
280
- <details>
281
- <summary><b>vs IndicConformer Β· telephonic</b></summary>
282
-
283
- | Language | N | VaaniCall WER | IndicConformer WER ↓ | Ξ”WER | VaaniCall CER | IndicConformer CER ↓ | Ξ”CER |
284
- |---|---:|---:|---:|---:|---:|---:|---:|
285
- | Bengali | 500 | 18.99% | **16.81%** | βˆ’2.18 | 7.29% | **6.65%** | βˆ’0.63 |
286
- | Gujarati | 500 | 25.31% | **22.48%** | βˆ’2.83 | 9.89% | **9.46%** | βˆ’0.43 |
287
- | Hindi | 500 | 19.61% | **17.27%** | βˆ’2.34 | 9.25% | **7.86%** | βˆ’1.40 |
288
- | Kannada | 500 | 44.50% | **43.22%** | βˆ’1.28 | 15.24% | **13.92%** | βˆ’1.33 |
289
- | Malayalam | 500 | 45.91% | **40.30%** | βˆ’5.61 | 15.74% | **12.75%** | βˆ’2.99 |
290
- | Marathi | 500 | 22.31% | **18.78%** | βˆ’3.53 | 8.27% | **7.09%** | βˆ’1.18 |
291
- | Odia | 500 | 36.38% | **32.34%** | βˆ’4.04 | 13.86% | **12.42%** | βˆ’1.44 |
292
- | Punjabi | 500 | 19.16% | **16.48%** | βˆ’2.68 | 8.75% | **8.74%** | βˆ’0.01 |
293
- | Tamil | 500 | 38.82% | **35.30%** | βˆ’3.52 | 13.53% | **11.34%** | βˆ’2.18 |
294
- | Telugu | 500 | 34.36% | **28.87%** | βˆ’5.49 | 12.52% | **10.10%** | βˆ’2.41 |
295
- | **Overall** | **5000** | 29.38% | **26.11%** | βˆ’3.26 | 11.62% | **10.15%** | βˆ’1.47 |
296
-
297
- </details>
298
-
299
- <details>
300
- <summary><b>vs IndicConformer Β· clean</b></summary>
301
-
302
- | Language | N | VaaniCall WER | IndicConformer WER ↓ | Ξ”WER | VaaniCall CER | IndicConformer CER ↓ | Ξ”CER |
303
- |---|---:|---:|---:|---:|---:|---:|---:|
304
- | Bengali | 500 | 15.42% | **12.79%** | βˆ’2.64 | 4.96% | **4.00%** | βˆ’0.95 |
305
- | Gujarati | 500 | 20.37% | **15.24%** | βˆ’5.13 | 7.09% | **5.11%** | βˆ’1.98 |
306
- | Hindi | 500 | 15.97% | **14.23%** | βˆ’1.74 | 6.58% | **5.68%** | βˆ’0.89 |
307
- | Kannada | 500 | 37.67% | **33.94%** | βˆ’3.73 | 11.10% | **9.40%** | βˆ’1.70 |
308
- | Malayalam | 500 | 41.67% | **35.23%** | βˆ’6.43 | 12.06% | **9.67%** | βˆ’2.39 |
309
- | Marathi | 500 | 16.08% | **13.02%** | βˆ’3.05 | 5.26% | **4.28%** | βˆ’0.99 |
310
- | Odia | 500 | 30.82% | **25.86%** | βˆ’4.96 | 9.86% | **8.01%** | βˆ’1.85 |
311
- | Punjabi | 500 | 15.00% | **10.65%** | βˆ’4.35 | 6.48% | **4.21%** | βˆ’2.27 |
312
- | Tamil | 500 | 34.76% | **30.35%** | βˆ’4.41 | 10.31% | **8.52%** | βˆ’1.79 |
313
- | Telugu | 500 | 27.90% | **24.43%** | βˆ’3.47 | 8.49% | **6.92%** | βˆ’1.57 |
314
- | **Overall** | **5000** | 24.56% | **20.63%** | βˆ’3.93 | 8.40% | **6.74%** | βˆ’1.66 |
315
-
316
- </details>
317
-
318
- ---
319
-
320
- ## How it works
321
-
322
- <div align="center">
323
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/architecture.svg" alt="Phone audio into FastConformer encoder, RNNT decoder, transcript with no language ID" width="100%">
324
- </div>
325
-
326
- ### Training
327
-
328
- Two-phase fine-tune from the VAANI FastConformer checkpoint.
329
-
330
- <div align="center">
331
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/training.svg" alt="Phase 1 language alignment, phase 2 acoustic refinement" width="100%">
332
- </div>
333
-
334
- 1. **Language alignment** β€” encoder frozen; decoder learns script and language mapping.
335
- 2. **Acoustic refinement** β€” last five encoder layers plus the full decoder unfrozen for telephonic acoustics.
336
-
337
- ### Data
338
-
339
- Trained on [AI4Bharat IndicVoices](https://huggingface.co/datasets/ai4bharat/IndicVoices) and [VAANI](https://huggingface.co/datasets/ARTPARK-IISc/Vaani): **50,000** train / **5,000** val / **5,000** test clips per language (mean duration ~18 s).
340
-
341
- ### Telephony augmentation
342
-
343
- Every training batch can pass through a 21-stage, GPU-accelerated call-channel simulator.
344
-
345
- <div align="center">
346
- <img src="https://huggingface.co/TieIncred/VaaniCall/resolve/main/assets/pipeline.svg" alt="Talker, handset, codec, network, and line stages of the augmentation pipeline" width="100%">
347
- </div>
348
-
349
- <details>
350
- <summary><b>All 21 stages</b></summary>
351
-
352
- | # | Stage | Prob | What it does |
353
- |---|---|---|---|
354
- | 0 | Identity setup | 100% | Tier: Premium / Standard / Legacy. Locks mic profile and codec behavior. |
355
- | 1 | Formant shift | 25% | Vocal-tract warp (0.95–1.05Γ—) so the model does not memorize speakers. |
356
- | 2 | Speed perturbation | 30% | Tempo + pitch together (0.9–1.1Γ—). |
357
- | 3 | Room IR | 50% | GPU conv1d reverb, partial RMS match, up to 20 ms pre-delay. |
358
- | 4 | Background noise | 90% | WHAM! floor (15–25 dB SNR) + MUSAN chatter (40%, 10–20 dB). |
359
- | 5 | Mic profile | 100% | Flat / mid / low / muffled EQ + tanh saturation. |
360
- | 6 | Mic plosives | 35% | Breath thumps on transients, 20–50 Hz. |
361
- | 7 | Handling noise | 45% | Handset friction, lowpass @ 2.5 kHz, 25–35 dB SNR. |
362
- | 8 | Vocal EQ | 75% | Presence peak 900–1600 Hz; optional nasal / low-mid dip. |
363
- | 9 | Volume drift | 20% | Interpolated gain envelope, Β±3 dB. |
364
- | 10 | Pre-codec AGC | 85% | Noise-aware rolling-RMS AGC, gain capped at 3.5Γ—. |
365
- | 11 | Codec roundtrip | 100% | pcm_alaw 35% / amrnb 35% / amrwb 15% / opus 10% / pcm_mulaw 5%. |
366
- | 12 | Loudness recovery | 100% | Peak targets: Premium βˆ’8 / Standard βˆ’4 / Legacy βˆ’1 dBFS. |
367
- | 13 | Gateway VAD clipping | 35% | IVR VAD bite: 15–45 ms off 40% of onsets. |
368
- | 14 | Network loss | 40% | Gilbert–Elliott burst loss, 20 ms packets, optional PLC smear. |
369
- | 15 | Stutter / jitter | 25% | 5–40 ms micro-dropouts to 0–10% amplitude. |
370
- | 16 | Clock drift | 15% | Per-100 ms resample warp 0.998–1.002Γ—. |
371
- | 17 | IMD distortion | 35% | Quadratic + cubic harmonics. |
372
- | 18 | Soft clipping | 70% | Handset tanh above 0.5–0.85. |
373
- | 19 | Receiver hiss | 40–85% | Hardware floor from βˆ’85 to βˆ’54 dBFS by tier. |
374
- | 20 | Filter mode | 100% | Static 75% / dynamic 25%; NB or WB band limits. |
375
- | 21 | Mastering | 100% | Gain, smart nudge, tanh, brick-wall at Β±0.98. |
376
-
377
- </details>
378
-
379
- ---
380
-
381
- ## Quick start
382
-
383
- ```python
384
- from nemo.collections.asr.models import EncDecRNNTBPEModel
385
-
386
- model = EncDecRNNTBPEModel.from_pretrained(
387
- model_name="TieIncred/VaaniCall"
388
- )
389
-
390
- hypotheses = model.transcribe(["sample.wav"], return_hypotheses=True)
391
- print(hypotheses[0].text)
392
- ```
393
-
394
- No language flag. 16 kHz mono WAV is the happy path; typical telephony (8 kHz, ΞΌ-law / AMR) is the training domain.
395
-
396
- ---
397
-
398
- ## Intended use
399
-
400
- - Inbound / outbound **contact-center** transcription in Indic languages
401
- - **VoIP and PSTN** call analytics
402
- - Multilingual IVR and voice-bot post-processing
403
- - Offline batch transcription of call recordings
404
-
405
- **Not intended for:** medical or legal dictation, real-time emergency dispatch, or English-only broadcast ASR (use Whisper or a dedicated English model).
406
-
407
- ---
408
-
409
- ## Limitations
410
-
411
- - **English** trails Whisper large-v3 (expected: this checkpoint is Indic-first).
412
- - **Malayalam, Kannada, Tamil** remain the hardest languages (WER 34–41% on IndicVoices).
413
- - **Odia** slightly regresses vs the VAANI base under telephony (βˆ’1.37 pp).
414
- - **IndicConformer** is still stronger as a general Indic ASR.
415
- - Code-mixed utterances and heavy music-on-hold are not separately benchmarked.
416
- - Evaluations are 500 clips / language; treat per-language gaps of <1 pp as noise.
417
-
418
- ---
419
-
420
- ## Citation
421
-
422
- If you use VaaniCall, please cite this model and VAANI, the base the fine-tune starts from:
423
-
424
- ```bibtex
425
- @misc{iqbal2026vaanicall,
426
- title={VaaniCall: Multilingual Telephony ASR for Indic Languages},
427
- author={Iqbal, Tausif},
428
- year={2026},
429
- howpublished={Hugging Face},
430
- url={https://huggingface.co/TieIncred/VaaniCall}
431
- }
432
- ```
433
-
434
- ```bibtex
435
- @misc{pulikodan2026vaanicapturinglanguagelandscape,
436
- title={VAANI: Capturing the language landscape for an inclusive digital India},
437
- author={Sujith Pulikodan and Abhayjeet Singh and Agneedh Basu and Nihar Desai and Pavan Kumar J and Pranav D Bhat and Raghu Dharmaraju and Ritika Gupta and Sathvik Udupa and Saurabh Kumar and Sumit Sharma and Vaibhav Vishwakarma and Visruth Sanka and Dinesh Tewari and Harsh Dhand and Amrita Kamat and Sukhwinder Singh and Shikhar Vashishth and Partha Talukdar and Raj Acharya and Prasanta Kumar Ghosh},
438
- year={2026},
439
- eprint={2603.28714},
440
- archivePrefix={arXiv},
441
- primaryClass={eess.AS},
442
- url={https://arxiv.org/abs/2603.28714}
443
- }
444
- ```
445
-
446
- Also cite [IndicVoices](https://huggingface.co/datasets/ai4bharat/IndicVoices) when reporting numbers on that test set.
447
-
448
- ---
449
-
450
- <p align="center">
451
- <em>VaaniCall Β· Tausif Iqbal Β· Apache 2.0</em>
452
- </p>
 
1
+ ---
2
+ library_name: nemo
3
+ pipeline_tag: automatic-speech-recognition
4
+ license: apache-2.0
5
+ language:
6
+ - hi
7
+ - bn
8
+ - ta
9
+ - te
10
+ - kn
11
+ - ml
12
+ - mr
13
+ - gu
14
+ - pa
15
+ - or
16
+ - en
17
+ tags:
18
+ - automatic-speech-recognition
19
+ - speech-recognition
20
+ - fastconformer
21
+ - nemo
22
+ - indic
23
+ - multilingual
24
+ - telephony
25
+ - call-center
26
+ - zero-shot-language-identification
27
+ - rnn-t
28
+ datasets:
29
+ - ai4bharat/IndicVoices
30
+ - ARTPARK-IISc/Vaani
31
+ metrics:
32
+ - wer
33
+ - cer
34
+ model-index:
35
+ - name: VaaniCall
36
+ results:
37
+ - task:
38
+ type: automatic-speech-recognition
39
+ name: Automatic Speech Recognition
40
+ dataset:
41
+ name: AI4Bharat IndicVoices (telephonic)
42
+ type: ai4bharat/IndicVoices
43
+ split: test
44
+ metrics:
45
+ - type: wer
46
+ value: 24.06
47
+ name: WER
48
+ - type: cer
49
+ value: 8.26
50
+ name: CER
51
+ - task:
52
+ type: automatic-speech-recognition
53
+ name: Automatic Speech Recognition
54
+ dataset:
55
+ name: AI4Bharat IndicVoices (clean)
56
+ type: ai4bharat/IndicVoices
57
+ split: test
58
+ metrics:
59
+ - type: wer
60
+ value: 24.20
61
+ name: WER
62
+ - type: cer
63
+ value: 8.31
64
+ name: CER
65
+ - task:
66
+ type: automatic-speech-recognition
67
+ name: Automatic Speech Recognition
68
+ dataset:
69
+ name: Google FLEURS (clean)
70
+ type: google/fleurs
71
+ split: test
72
+ metrics:
73
+ - type: wer
74
+ value: 23.52
75
+ name: WER
76
+ - type: cer
77
+ value: 8.34
78
+ name: CER
79
+ ---
80
+
81
+ ![VaaniCall β€” multilingual telephony ASR for India](assets/banner.png)
82
+
83
+ <br>
84
+
85
+ # VaaniCall
86
+
87
+ **Call-grade speech recognition for 11 Indian languages.**
88
+ By [Tausif Iqbal](https://huggingface.co/TieIncred). Built on NVIDIA NeMo FastConformer, fine-tuned from VAANI for PSTN, VoIP, and contact-center audio.
89
+
90
+ VaaniCall transcribes a phone call without a language code. It infers language and script, and it is trained through a 21-stage telephony pipeline so AMR, packet loss, and handset noise look like training data β€” not a domain shift.
91
+
92
+ ![Supported languages: Hindi, Bengali, Tamil, Telugu, Kannada, Malayalam, Marathi, Gujarati, Punjabi, Odia, English](assets/languages.png)
93
+
94
+ ---
95
+
96
+ ## Why VaaniCall
97
+
98
+ | | |
99
+ |---|---|
100
+ | **Zero-shot language ID** | No `lang=` argument. One model, eleven languages, native scripts. |
101
+ | **Telephony-hardened** | 21-stage GPU augmentation: codecs, burst loss, VAD bite, handset EQ, room IR. |
102
+ | **Holds on clean audio** | Phone fine-tune does not tax clean WER (24.20% β†’ 24.06% on IndicVoices). |
103
+ | **Beats Whisper on Indic** | **3.5Γ— lower** overall WER than Whisper large-v3 on IndicVoices. |
104
+ | **FastConformer + RNNT** | Streaming-friendly NVIDIA NeMo `EncDecRNNTBPE` checkpoint (`.nemo`). |
105
+
106
+ ---
107
+
108
+ ## Performance at a glance
109
+
110
+ All numbers are **Word Error Rate** (lower is better). Evaluations use **500 clips per language**.
111
+
112
+ ![Overall WER: VaaniCall vs Whisper large-v3 on IndicVoices and FLEURS](assets/wer_overall_vs_whisper.png)
113
+
114
+ | Benchmark | Condition | VaaniCall | Whisper large-v3 | Relative WER cut |
115
+ |---|---|---:|---:|---:|
116
+ | IndicVoices | Clean | **24.20%** | 84.07% | **71%** |
117
+ | IndicVoices | Telephonic | **24.06%** | 84.50% | **72%** |
118
+ | Google FLEURS | Clean | **23.52%** | 65.23% | **64%** |
119
+
120
+ Whisper large-v3 still leads on **English**. VaaniCall is the Indic-language model.
121
+
122
+ ![VaaniCall WER stays flat from clean to telephonic audio](assets/telephony_robustness.png)
123
+
124
+ ---
125
+
126
+ ## Benchmarks
127
+
128
+ ### vs Whisper large-v3 β€” IndicVoices, telephonic
129
+
130
+ ![Per-language telephonic WER vs Whisper large-v3](assets/wer_indicvoices_telephonic.png)
131
+
132
+ <details>
133
+ <summary><b>IndicVoices Β· telephonic Β· full table</b></summary>
134
+
135
+ | Language | N | VaaniCall WER ↓ | VaaniCall CER ↓ | Whisper WER | Whisper CER |
136
+ |---|---:|---:|---:|---:|---:|
137
+ | Bengali | 500 | **15.41%** | **4.93%** | 73.87% | 38.04% |
138
+ | English | 500 | 13.26% | 4.56% | **7.80%** | **3.04%** |
139
+ | Gujarati | 500 | **21.46%** | **7.56%** | 61.48% | 29.72% |
140
+ | Hindi | 500 | **16.04%** | **6.87%** | 30.31% | 15.61% |
141
+ | Kannada | 500 | **38.01%** | **10.96%** | 98.03% | 53.05% |
142
+ | Malayalam | 500 | **40.70%** | **11.53%** | 138.83% | 108.41% |
143
+ | Marathi | 500 | **17.10%** | **6.30%** | 93.50% | 47.21% |
144
+ | Odia | 500 | **31.52%** | **10.40%** | 110.63% | 97.36% |
145
+ | Punjabi | 500 | **14.46%** | **6.03%** | 86.10% | 54.26% |
146
+ | Tamil | 500 | **33.82%** | **9.84%** | 80.72% | 40.71% |
147
+ | Telugu | 500 | **28.45%** | **8.63%** | 146.64% | 97.12% |
148
+ | **Overall** | **5500** | **24.06%** | **8.26%** | 84.50% | 56.30% |
149
+
150
+ </details>
151
+
152
+ <details>
153
+ <summary><b>IndicVoices Β· clean Β· full table</b></summary>
154
+
155
+ | Language | N | VaaniCall WER ↓ | VaaniCall CER ↓ | Whisper WER | Whisper CER |
156
+ |---|---:|---:|---:|---:|---:|
157
+ | Bengali | 500 | **15.16%** | **4.96%** | 73.36% | 36.81% |
158
+ | English | 500 | 14.14% | 4.67% | **8.37%** | **3.12%** |
159
+ | Gujarati | 500 | **20.02%** | **6.68%** | 56.27% | 25.96% |
160
+ | Hindi | 500 | **16.45%** | **6.77%** | 30.71% | 15.20% |
161
+ | Kannada | 500 | **38.26%** | **11.02%** | 99.44% | 52.16% |
162
+ | Malayalam | 500 | **41.79%** | **12.11%** | 145.50% | 114.81% |
163
+ | Marathi | 500 | **16.76%** | **5.80%** | 92.38% | 46.12% |
164
+ | Odia | 500 | **31.85%** | **10.63%** | 107.96% | 95.15% |
165
+ | Punjabi | 500 | **15.71%** | **6.59%** | 89.11% | 58.95% |
166
+ | Tamil | 500 | **34.50%** | **10.22%** | 77.39% | 38.11% |
167
+ | Telugu | 500 | **28.39%** | **8.73%** | 141.52% | 96.52% |
168
+ | **Overall** | **5500** | **24.20%** | **8.31%** | 84.07% | 56.30% |
169
+
170
+ </details>
171
+
172
+ ### vs Whisper large-v3 β€” Google FLEURS (out of domain)
173
+
174
+ Held-out read speech. Odia is not in FLEURS.
175
+
176
+ ![FLEURS out-of-domain WER vs Whisper large-v3](assets/wer_fleurs.png)
177
+
178
+ <details>
179
+ <summary><b>FLEURS Β· clean Β· full table</b></summary>
180
+
181
+ | Language | N | VaaniCall WER ↓ | VaaniCall CER ↓ | Whisper WER | Whisper CER |
182
+ |---|---:|---:|---:|---:|---:|
183
+ | Bengali | 500 | **26.00%** | **9.22%** | 77.60% | 32.63% |
184
+ | English | 500 | 15.16% | 7.88% | **4.47%** | **1.78%** |
185
+ | Gujarati | 500 | **24.94%** | **8.22%** | 54.99% | 22.19% |
186
+ | Hindi | 500 | **15.70%** | **6.18%** | 27.61% | 9.63% |
187
+ | Kannada | 500 | **25.80%** | **7.95%** | 72.85% | 22.87% |
188
+ | Malayalam | 500 | **37.55%** | **10.36%** | 130.76% | 102.00% |
189
+ | Marathi | 500 | **22.32%** | **7.18%** | 76.52% | 22.61% |
190
+ | Punjabi | 500 | **16.53%** | **6.06%** | 74.63% | 35.88% |
191
+ | Tamil | 500 | **32.78%** | **9.84%** | 47.73% | 12.11% |
192
+ | Telugu | 500 | **29.19%** | **9.99%** | 126.29% | 74.64% |
193
+ | **Overall** | **5000** | **23.52%** | **8.34%** | 65.23% | 34.04% |
194
+
195
+ > Tamil CER is lower for Whisper (12.11%) despite a higher WER β€” typically an artifact of shorter predicted strings. VaaniCall still wins WER.
196
+
197
+ </details>
198
+
199
+ ### Per-language profile
200
+
201
+ ![VaaniCall WER by language on telephonic IndicVoices](assets/wer_by_language.png)
202
+
203
+ Strongest Indic languages on phone audio: **Punjabi 14.5% Β· Bengali 15.4% Β· Hindi 16.0% Β· Marathi 17.1%**.
204
+
205
+ ### vs VAANI base β€” the telephony fine-tune
206
+
207
+ VaaniCall is a telephony specialist on top of VAANI. On phone-channel audio it improves **9 of 10** Indic languages. On clean audio the two models are statistically tied (24.37% vs 24.38% WER).
208
+
209
+ ![WER reduction versus VAANI base under telephonic conditions](assets/delta_vs_vaani_base.png)
210
+
211
+ <details>
212
+ <summary><b>vs VAANI base Β· telephonic</b></summary>
213
+
214
+ | Language | N | VaaniCall WER ↓ | VAANI WER | Ξ”WER | VaaniCall CER ↓ | VAANI CER | Ξ”CER |
215
+ |---|---:|---:|---:|---:|---:|---:|---:|
216
+ | Bengali | 500 | **19.85%** | 21.70% | +1.85 | **7.74%** | 9.36% | +1.62 |
217
+ | Gujarati | 500 | **26.27%** | 28.97% | +2.70 | **10.72%** | 11.50% | +0.78 |
218
+ | Hindi | 500 | **19.65%** | 20.28% | +0.63 | **8.92%** | 9.22% | +0.30 |
219
+ | Kannada | 500 | **44.44%** | 47.03% | +2.59 | **14.93%** | 15.73% | +0.80 |
220
+ | Malayalam | 500 | **47.67%** | 48.51% | +0.84 | **16.46%** | 16.79% | +0.33 |
221
+ | Marathi | 500 | **23.65%** | 25.12% | +1.46 | **9.29%** | 10.02% | +0.73 |
222
+ | Odia | 500 | 35.93% | **34.56%** | βˆ’1.37 | 13.65% | **13.28%** | βˆ’0.37 |
223
+ | Punjabi | 500 | **20.26%** | 20.78% | +0.51 | **9.50%** | 9.71% | +0.21 |
224
+ | Tamil | 500 | **40.88%** | 41.84% | +0.96 | **14.69%** | 15.10% | +0.41 |
225
+ | Telugu | 500 | **32.17%** | 33.04% | +0.88 | **11.41%** | 11.75% | +0.34 |
226
+ | **Overall** | **5000** | **29.96%** | 31.04% | **+1.08** | **11.96%** | 12.46% | **+0.51** |
227
+
228
+ *Ξ” = VAANI βˆ’ VaaniCall. Positive Ξ” β†’ VaaniCall is better. English excluded (not a VAANI fine-tune target).*
229
+
230
+ </details>
231
+
232
+ <details>
233
+ <summary><b>vs VAANI base Β· clean</b></summary>
234
+
235
+ | Language | N | VaaniCall WER | VAANI WER | Ξ”WER | VaaniCall CER | VAANI CER | Ξ”CER |
236
+ |---|---:|---:|---:|---:|---:|---:|---:|
237
+ | Bengali | 500 | **14.94%** | 15.07% | +0.13 | 5.01% | **4.97%** | βˆ’0.04 |
238
+ | Gujarati | 500 | **21.11%** | 21.93% | +0.82 | **7.38%** | 7.61% | +0.24 |
239
+ | Hindi | 500 | 16.47% | **16.39%** | βˆ’0.08 | 6.78% | **6.75%** | βˆ’0.03 |
240
+ | Kannada | 500 | **37.91%** | 38.78% | +0.87 | **10.99%** | 11.16% | +0.17 |
241
+ | Malayalam | 500 | **40.37%** | 40.63% | +0.26 | **11.46%** | 11.60% | +0.14 |
242
+ | Marathi | 500 | 17.05% | **17.01%** | βˆ’0.04 | 5.38% | **5.33%** | βˆ’0.05 |
243
+ | Odia | 500 | 31.18% | **28.49%** | βˆ’2.69 | 9.68% | **9.15%** | βˆ’0.53 |
244
+ | Punjabi | 500 | **14.17%** | 14.38% | +0.21 | 5.93% | **5.86%** | βˆ’0.07 |
245
+ | Tamil | 500 | **34.26%** | 34.49% | +0.24 | **9.82%** | 9.87% | +0.05 |
246
+ | Telugu | 500 | **27.12%** | 27.55% | +0.43 | **7.95%** | 8.07% | +0.12 |
247
+ | **Overall** | **5000** | **24.37%** | 24.38% | **+0.01** | **8.17%** | 8.18% | **+0.01** |
248
+
249
+ *Results are statistically equivalent on clean audio β€” the fine-tune does not spend general accuracy to buy telephony robustness.*
250
+
251
+ </details>
252
+
253
+ ### vs AI4Bharat IndicConformer
254
+
255
+ IndicConformer is a strong general-purpose Indic ASR and still leads this comparison. VaaniCall is optimized for **call-channel robustness and zero-shot language ID**, not for matching a dedicated per-language conformer on clean read speech.
256
+
257
+ | Condition | VaaniCall | IndicConformer | Gap |
258
+ |---|---:|---:|---:|
259
+ | Telephonic | 29.38% | **26.11%** | βˆ’3.26 pp |
260
+ | Clean | 24.56% | **20.63%** | βˆ’3.93 pp |
261
+
262
+ Largest telephonic gaps: Malayalam βˆ’5.61 pp, Telugu βˆ’5.49 pp. English excluded.
263
+
264
+ <details>
265
+ <summary><b>vs IndicConformer Β· telephonic</b></summary>
266
+
267
+ | Language | N | VaaniCall WER | IndicConformer WER ↓ | Ξ”WER | VaaniCall CER | IndicConformer CER ↓ | Ξ”CER |
268
+ |---|---:|---:|---:|---:|---:|---:|---:|
269
+ | Bengali | 500 | 18.99% | **16.81%** | βˆ’2.18 | 7.29% | **6.65%** | βˆ’0.63 |
270
+ | Gujarati | 500 | 25.31% | **22.48%** | βˆ’2.83 | 9.89% | **9.46%** | βˆ’0.43 |
271
+ | Hindi | 500 | 19.61% | **17.27%** | βˆ’2.34 | 9.25% | **7.86%** | βˆ’1.40 |
272
+ | Kannada | 500 | 44.50% | **43.22%** | βˆ’1.28 | 15.24% | **13.92%** | βˆ’1.33 |
273
+ | Malayalam | 500 | 45.91% | **40.30%** | βˆ’5.61 | 15.74% | **12.75%** | βˆ’2.99 |
274
+ | Marathi | 500 | 22.31% | **18.78%** | βˆ’3.53 | 8.27% | **7.09%** | βˆ’1.18 |
275
+ | Odia | 500 | 36.38% | **32.34%** | βˆ’4.04 | 13.86% | **12.42%** | βˆ’1.44 |
276
+ | Punjabi | 500 | 19.16% | **16.48%** | βˆ’2.68 | 8.75% | **8.74%** | βˆ’0.01 |
277
+ | Tamil | 500 | 38.82% | **35.30%** | βˆ’3.52 | 13.53% | **11.34%** | βˆ’2.18 |
278
+ | Telugu | 500 | 34.36% | **28.87%** | βˆ’5.49 | 12.52% | **10.10%** | βˆ’2.41 |
279
+ | **Overall** | **5000** | 29.38% | **26.11%** | βˆ’3.26 | 11.62% | **10.15%** | βˆ’1.47 |
280
+
281
+ </details>
282
+
283
+ <details>
284
+ <summary><b>vs IndicConformer Β· clean</b></summary>
285
+
286
+ | Language | N | VaaniCall WER | IndicConformer WER ↓ | Ξ”WER | VaaniCall CER | IndicConformer CER ↓ | Ξ”CER |
287
+ |---|---:|---:|---:|---:|---:|---:|---:|
288
+ | Bengali | 500 | 15.42% | **12.79%** | βˆ’2.64 | 4.96% | **4.00%** | βˆ’0.95 |
289
+ | Gujarati | 500 | 20.37% | **15.24%** | βˆ’5.13 | 7.09% | **5.11%** | βˆ’1.98 |
290
+ | Hindi | 500 | 15.97% | **14.23%** | βˆ’1.74 | 6.58% | **5.68%** | βˆ’0.89 |
291
+ | Kannada | 500 | 37.67% | **33.94%** | βˆ’3.73 | 11.10% | **9.40%** | βˆ’1.70 |
292
+ | Malayalam | 500 | 41.67% | **35.23%** | βˆ’6.43 | 12.06% | **9.67%** | βˆ’2.39 |
293
+ | Marathi | 500 | 16.08% | **13.02%** | βˆ’3.05 | 5.26% | **4.28%** | βˆ’0.99 |
294
+ | Odia | 500 | 30.82% | **25.86%** | βˆ’4.96 | 9.86% | **8.01%** | βˆ’1.85 |
295
+ | Punjabi | 500 | 15.00% | **10.65%** | βˆ’4.35 | 6.48% | **4.21%** | βˆ’2.27 |
296
+ | Tamil | 500 | 34.76% | **30.35%** | βˆ’4.41 | 10.31% | **8.52%** | βˆ’1.79 |
297
+ | Telugu | 500 | 27.90% | **24.43%** | βˆ’3.47 | 8.49% | **6.92%** | βˆ’1.57 |
298
+ | **Overall** | **5000** | 24.56% | **20.63%** | βˆ’3.93 | 8.40% | **6.74%** | βˆ’1.66 |
299
+
300
+ </details>
301
+
302
+ ---
303
+
304
+ ## How it works
305
+
306
+ ![Phone audio into FastConformer encoder, RNNT decoder, transcript with no language ID](assets/architecture.png)
307
+
308
+ ### Training
309
+
310
+ Two-phase fine-tune from the VAANI FastConformer checkpoint.
311
+
312
+ ![Phase 1 language alignment, phase 2 acoustic refinement](assets/training.png)
313
+
314
+ 1. **Language alignment** β€” encoder frozen; decoder learns script and language mapping.
315
+ 2. **Acoustic refinement** β€” last five encoder layers plus the full decoder unfrozen for telephonic acoustics.
316
+
317
+ ### Data
318
+
319
+ Trained on [AI4Bharat IndicVoices](https://huggingface.co/datasets/ai4bharat/IndicVoices) and [VAANI](https://huggingface.co/datasets/ARTPARK-IISc/Vaani): **50,000** train / **5,000** val / **5,000** test clips per language (mean duration ~18 s).
320
+
321
+ ### Telephony augmentation
322
+
323
+ Every training batch can pass through a 21-stage, GPU-accelerated call-channel simulator.
324
+
325
+ ![Talker, handset, codec, network, and line stages of the augmentation pipeline](assets/pipeline.png)
326
+
327
+ <details>
328
+ <summary><b>All 21 stages</b></summary>
329
+
330
+ | # | Stage | Prob | What it does |
331
+ |---|---|---|---|
332
+ | 0 | Identity setup | 100% | Tier: Premium / Standard / Legacy. Locks mic profile and codec behavior. |
333
+ | 1 | Formant shift | 25% | Vocal-tract warp (0.95–1.05Γ—) so the model does not memorize speakers. |
334
+ | 2 | Speed perturbation | 30% | Tempo + pitch together (0.9–1.1Γ—). |
335
+ | 3 | Room IR | 50% | GPU conv1d reverb, partial RMS match, up to 20 ms pre-delay. |
336
+ | 4 | Background noise | 90% | WHAM! floor (15–25 dB SNR) + MUSAN chatter (40%, 10–20 dB). |
337
+ | 5 | Mic profile | 100% | Flat / mid / low / muffled EQ + tanh saturation. |
338
+ | 6 | Mic plosives | 35% | Breath thumps on transients, 20–50 Hz. |
339
+ | 7 | Handling noise | 45% | Handset friction, lowpass @ 2.5 kHz, 25–35 dB SNR. |
340
+ | 8 | Vocal EQ | 75% | Presence peak 900–1600 Hz; optional nasal / low-mid dip. |
341
+ | 9 | Volume drift | 20% | Interpolated gain envelope, Β±3 dB. |
342
+ | 10 | Pre-codec AGC | 85% | Noise-aware rolling-RMS AGC, gain capped at 3.5Γ—. |
343
+ | 11 | Codec roundtrip | 100% | pcm_alaw 35% / amrnb 35% / amrwb 15% / opus 10% / pcm_mulaw 5%. |
344
+ | 12 | Loudness recovery | 100% | Peak targets: Premium βˆ’8 / Standard βˆ’4 / Legacy βˆ’1 dBFS. |
345
+ | 13 | Gateway VAD clipping | 35% | IVR VAD bite: 15–45 ms off 40% of onsets. |
346
+ | 14 | Network loss | 40% | Gilbert–Elliott burst loss, 20 ms packets, optional PLC smear. |
347
+ | 15 | Stutter / jitter | 25% | 5–40 ms micro-dropouts to 0–10% amplitude. |
348
+ | 16 | Clock drift | 15% | Per-100 ms resample warp 0.998–1.002Γ—. |
349
+ | 17 | IMD distortion | 35% | Quadratic + cubic harmonics. |
350
+ | 18 | Soft clipping | 70% | Handset tanh above 0.5–0.85. |
351
+ | 19 | Receiver hiss | 40–85% | Hardware floor from βˆ’85 to βˆ’54 dBFS by tier. |
352
+ | 20 | Filter mode | 100% | Static 75% / dynamic 25%; NB or WB band limits. |
353
+ | 21 | Mastering | 100% | Gain, smart nudge, tanh, brick-wall at Β±0.98. |
354
+
355
+ </details>
356
+
357
+ ---
358
+
359
+ ## Quick start
360
+
361
+ ```python
362
+ from nemo.collections.asr.models import EncDecRNNTBPEModel
363
+
364
+ model = EncDecRNNTBPEModel.from_pretrained(
365
+ model_name="TieIncred/VaaniCall"
366
+ )
367
+
368
+ hypotheses = model.transcribe(["sample.wav"], return_hypotheses=True)
369
+ print(hypotheses[0].text)
370
+ ```
371
+
372
+ No language flag. 16 kHz mono WAV is the happy path; typical telephony (8 kHz, ΞΌ-law / AMR) is the training domain.
373
+
374
+ ---
375
+
376
+ ## Intended use
377
+
378
+ - Inbound / outbound **contact-center** transcription in Indic languages
379
+ - **VoIP and PSTN** call analytics
380
+ - Multilingual IVR and voice-bot post-processing
381
+ - Offline batch transcription of call recordings
382
+
383
+ **Not intended for:** medical or legal dictation, real-time emergency dispatch, or English-only broadcast ASR (use Whisper or a dedicated English model).
384
+
385
+ ---
386
+
387
+ ## Limitations
388
+
389
+ - **English** trails Whisper large-v3 (expected: this checkpoint is Indic-first).
390
+ - **Malayalam, Kannada, Tamil** remain the hardest languages (WER 34–41% on IndicVoices).
391
+ - **Odia** slightly regresses vs the VAANI base under telephony (βˆ’1.37 pp).
392
+ - **IndicConformer** is still stronger as a general Indic ASR.
393
+ - Code-mixed utterances and heavy music-on-hold are not separately benchmarked.
394
+ - Evaluations are 500 clips / language; treat per-language gaps of <1 pp as noise.
395
+
396
+ ---
397
+
398
+ ## Citation
399
+
400
+ If you use VaaniCall, please cite this model and VAANI, the base the fine-tune starts from:
401
+
402
+ ```bibtex
403
+ @misc{iqbal2026vaanicall,
404
+ title={VaaniCall: Multilingual Telephony ASR for Indic Languages},
405
+ author={Iqbal, Tausif},
406
+ year={2026},
407
+ howpublished={Hugging Face},
408
+ url={https://huggingface.co/TieIncred/VaaniCall}
409
+ }
410
+ ```
411
+
412
+ ```bibtex
413
+ @misc{pulikodan2026vaanicapturinglanguagelandscape,
414
+ title={VAANI: Capturing the language landscape for an inclusive digital India},
415
+ author={Sujith Pulikodan and Abhayjeet Singh and Agneedh Basu and Nihar Desai and Pavan Kumar J and Pranav D Bhat and Raghu Dharmaraju and Ritika Gupta and Sathvik Udupa and Saurabh Kumar and Sumit Sharma and Vaibhav Vishwakarma and Visruth Sanka and Dinesh Tewari and Harsh Dhand and Amrita Kamat and Sukhwinder Singh and Shikhar Vashishth and Partha Talukdar and Raj Acharya and Prasanta Kumar Ghosh},
416
+ year={2026},
417
+ eprint={2603.28714},
418
+ archivePrefix={arXiv},
419
+ primaryClass={eess.AS},
420
+ url={https://arxiv.org/abs/2603.28714}
421
+ }
422
+ ```
423
+
424
+ Also cite [IndicVoices](https://huggingface.co/datasets/ai4bharat/IndicVoices) when reporting numbers on that test set.
425
+
426
+ ---
427
+
428
+ <p align="center">
429
+ <em>VaaniCall Β· Tausif Iqbal Β· Apache 2.0</em>
430
+ </p>