Sravaani-1.0-GGUF / README.md
Henil1's picture
SraVaani-1.0 GGUF conversions for parakeet.cpp
78e844a verified
|
Raw History Blame Contribute Delete
3.93 kB
---
license: mit
base_model: ARTPARK-IISc/SraVaani-1.0
library_name: parakeet.cpp
pipeline_tag: automatic-speech-recognition
tags:
- gguf
- ggml
- parakeet.cpp
- asr
- speech-recognition
- indic
- hindi
- conformer
- transducer
- tdt
language:
- hi
- mr
- ta
- te
- bn
- gu
- kn
- ml
- pa
- or
- as
- en
---
# SraVaani-1.0 GGUF
GGUF conversions of [ARTPARK-IISc/SraVaani-1.0](https://huggingface.co/ARTPARK-IISc/SraVaani-1.0),
an Indic multilingual speech recognition model, for CPU inference with
[parakeet.cpp](https://github.com/mudler/parakeet.cpp).
No Python, no PyTorch, no NeMo, no ONNX Runtime. One file and one binary.
## Files
| file | size | notes |
|---|---|---|
| `sravaani-q8_0.gguf` | 660 MB | **recommended.** Byte-identical output to f16 in testing |
| `sravaani-f16.gguf` | 1016 MB | full precision relative to the source weights |
| `sravaani-q4_k.gguf` | 471 MB | smallest; shows occasional orthographic variants |
## Usage
Get a `parakeet-cli` binary from [parakeet.cpp releases](https://github.com/mudler/parakeet.cpp/releases), then:
parakeet-cli transcribe --model sravaani-q8_0.gguf --input clip.wav --decoder tdt --threads 4
Three things matter:
- **`--decoder tdt`** is required. This is a token-and-duration transducer, not CTC.
- **Do not pass `--lang`.** The model detects language automatically and outputs native script. It has no language token.
- **Input must be 16 kHz mono 16-bit PCM WAV.** parakeet.cpp reads nothing else. Convert first:
ffmpeg -i in.any -ac 1 -ar 16000 -c:a pcm_s16le out.wav
## Model
| | |
|---|---|
| architecture | NeMo FastConformer-TDT (transducer) |
| parameters | 443.62M |
| encoder | 1024 d_model, 17 layers, 8 heads |
| subsampling | dw_striding x8, 256 channels |
| features | 128 mel, n_fft 512, win 400, hop 160, 16 kHz |
| predictor | 1 LSTM layer, 640 hidden |
| joint | 640 hidden, 5006 outputs (5000 vocab + blank + 5 durations) |
| tokenizer | SentencePiece, 5000 pieces, embedded in the GGUF |
## Benchmark
Intel i7 laptop, CPU only, single Hindi utterance, best of 3 runs.
| model | size | 1 thr | 2 thr | 4 thr | 8 thr | WER vs f16 |
|---|---|---|---|---|---|---|
| f16 | 1016 MB | 3.04 s | 2.07 s | 1.30 s | 1.20 s | 0.000 |
| q8_0 | 660 MB | 2.35 s | 1.86 s | 1.49 s | 1.33 s | 0.000 |
| q4_k | 471 MB | 2.52 s | 1.98 s | 1.51 s | 1.36 s | 0.062 |
Roughly 6 to 7x faster than realtime. Returns collapse past 4 threads.
q4_k's single error was `यह` where f16 gave `ये`, both valid Hindi for "this", so the 0.062 overstates the real gap on this sample.
## How these were made
SraVaani ships only a TorchScript graph, with no `.nemo` checkpoint, so the conversion tool had nothing to read. The checkpoint was reconstructed:
1. Weights extracted from the TorchScript module and remapped to NeMo names.
2. Architecture hyperparameters recovered from tensor shapes, with `xscaling` determined empirically by measuring the positional encoding's output gain.
3. Validated by a strict `load_state_dict` against a freshly built `EncDecRNNTBPEModel`: 705 of 705 tensors, zero missing, zero unexpected, zero shape mismatches.
4. Verified by an exact transcript match against the original implementation.
5. Converted with parakeet.cpp's `convert_parakeet_to_gguf.py`.
## Limitations
- Accuracy testing here is limited to Hindi. Tamil and Telugu in particular are untested in these conversions and are known weaker languages for this model family.
- The base model has a documented weakness on overlapping speakers and crosstalk.
- WER figures compare quantised output against f16 output, not against ground truth. They measure quantisation damage, not accuracy.
## Credit
All model weights and training are the work of [ARTPARK at IISc](https://huggingface.co/ARTPARK-IISc). This repository contains format conversions only, released under the same MIT License as the original.