Dulu Compact AED 46M β experimental Malayalam ASR
A 45,808,192-parameter offline Malayalam speech recognizer trained from scratch on 643.5927 hours of human-transcribed speech. This is the best validated checkpoint at epoch 22, step 96,034, selected by equal-weight mean CER across the Kathbath and IndicVoices development sets. It is an experimental research checkpoint, with substantial remaining recognition errors, not a production release.
The architecture implementation is adapted from bodhan-ai/indic-transcribe-core. No pretrained Indic model weights or teacher predictions were used. This is not a pruned Indic checkpoint and is unrelated to the EmbeddingGemma CTC releases.
Architecture
16 kHz mono audio β 128-bin log-mel features β depthwise convolutional 8Γ subsampling β 14 FastConformer encoder blocks β 6 autoregressive Transformer decoder blocks β tied 2,048-token embedding/output projection.
Both encoder and decoder have width 320, 8 attention heads and FFN width 1,280. Encoder convolution kernel is 9. The SentencePiece BPE vocabulary was fitted only on the accepted training transcripts and includes 256 byte-fallback tokens. Training uses next-token cross-entropy, not CTC. There is no external language model. This model supports offline utterances, not streaming.
Validation results
Greedy decoding, at most 512 generated tokens; all values below are percentages.
| Development set | Clips | WER | CER |
|---|---|---|---|
| Kathbath | 1,767 | 52.32 | 16.16 |
| IndicVoices | 1,715 | 65.21 | 33.58 |
Equal-source mean CER: 24.87%. One IndicVoices utterance reached the generation limit. Full per-epoch results through epoch 25 are in epoch-metrics.md. Epochs 23β25 did not beat epoch 22; this is a fixed checkpoint release while the 30-epoch training budget was not yet completed.
These are development results, not final-test results. The historical Kathbath split contains speakers also present in training. Do not interpret these results as speaker-disjoint generalization, production quality, or superiority to another model. Early epoch error rates above 100% reflect inserted text.
Run inference
This repository uses an explicit local loader; it is not registered as a standard
Transformers pipeline model. Python 3.13 and the versions in requirements.txt
were checked for export parity on CPU. Install a suitable PyTorch build for your
CUDA platform if using a GPU.
pip install huggingface_hub
hf download serendipitylabs/dulu-compact-aed-46m --local-dir ./dulu-compact-aed-46m
pip install -r ./dulu-compact-aed-46m/requirements.txt
python ./dulu-compact-aed-46m/transcribe.py --audio /path/to/mono-16k.wav --device cpu
For GPU inference, use --device cuda. Input must be mono 16 kHz and 1β30 seconds
long; segment longer recordings first. The output includes eos_seen; false means
generation reached the token limit. Inference loads safetensors and requires no
training checkpoint, teacher model, or authentication for public files.
Export validation compared every model/feature tensor, CPU forward logits and 16-step greedy token IDs against the original trusted training checkpoint. All tensors matched and the maximum CPU logit difference was zero. This verifies serialization, not recognition quality; it used seeded synthetic input. See verification.json.
Training and reproducibility
The exact training source from commit
85e3d411d0aac3f7dc146df00fba76cf52148493 is in source/.
The full hyperparameters are in training-config.json.
The recipe includes initialization, normalization, data restoration, tokenizer
creation, augmentation, training, greedy evaluation, checkpoint recovery and tests.
The source README contains historical protocols; this top-level card describes
this released checkpoint.
Training data: 290,579 clips β Kathbath 45,104 / 134.107h; IndicVoices 211,032 / 459.908h; IMaSC 34,443 / 49.578h. AIR pseudo-labels and synthetic speech are excluded. Source revisions are pinned in sources.json. No source audio or utterance-level transcripts are redistributed in this public repo.
Training used an NVIDIA L4, BF16 autocast with FP32 parameters and AdamW moments, label smoothing 0.1, dropout 0.1, gradient clipping 1.0, SpecAugment and accumulation over at least 480 actual audio seconds per update. Microbatches were limited to 16 clips / 120 padded audio seconds. Each epoch visits every accepted clip once.
The schedules were: epochs 1β10, 1,000-step warmup to 3e-4 then cosine to 3e-5; epochs 11β20, cosine 3e-5 to 1e-5; planned epochs 21β30, cosine 1e-5 to 3e-6. Optimizer moments and RNG states were preserved across continuations.
RESUME.md records continuation and archive details. The private companion archive preserves both the selected checkpoint and a later optimizer checkpoint, the original inventory/selection manifests, metrics and source. The public safetensors export alone does not contain optimizer or RNG state.
Attribution and licenses
Released weights and tokenizer: CC BY-SA 4.0, with attribution to Serendipity Labs and the source datasets. Training sources: Kathbath and IndicVoices, AI4Bharat, CC BY 4.0; IMaSC, CC BY-SA 4.0. See the pinned source manifest for exact revisions.
Code: Apache 2.0. NVIDIA/Bodhan notices and the Apache license for adapted components are retained in source/recipes/compact_asr/vendor/NOTICE. Numeric Hann/mel-filter buffers are not learned teacher weights.
The model can omit, repeat, or invent words. Review transcriptions before relying on them. Dialect, noise, domain and long-form robustness have not been established.
- Downloads last month
- 25