dondo_v1_graphic

w2v-bert-kik_mer_sna_en_fra β€” Kenya & Zimbabwe multilingual ASR

DONDO (Democratizing Oral Neural Dialect Ontology) open multilingual speech-recognition base model for Kenya & Zimbabwe. A single checkpoint covering: English, Kikuyu, Meru, Shona, French. Fine-tuned from w2v-BERT 2.0.

  • Region: Kenya & Zimbabwe
  • Languages: English, Kikuyu, Meru, Shona, French
  • Task: Automatic Speech Recognition (CTC), language-conditioned
  • Backbone: w2v-BERT 2.0
  • License: Apache-2.0 (attribution only; commercial use permitted)
  • Best result: 12.5% average WER (Step 3)
  • Paper: arXiv:2607.21540
  • Demo: Try it in your browser
  • Part of: the DONDO family β€” https://huggingface.co/KhayaAI

Note. A third annealing step was used for this family. Per-language WER was not computed at Step 1.

Intended use

A multilingual base model for the languages of Kenya & Zimbabwe. One checkpoint transcribes any of its languages when steered with a language prefix (below). Use directly, or fine-tune further on your own in-domain data. DONDO is also an open test bed for new low-resource speech techniques; aligned research groups are welcome to collaborate.

Training data

Primarily read speech derived from religious texts with verified transcripts in standard orthography, pooled across the region's languages so the shared encoder learns cross-lingual acoustic structure (especially helpful for the smallest languages).

Training procedure

Two-step learning-rate-annealed fine-tuning (a third step for some families):

  1. Step 1 β€” coarse adaptation (LR 5e-5): adapt the shared encoder to the full multilingual mixture.
  2. Step 2 β€” annealing (LR 5e-6): recover most of the gap to monolingual baselines; for some languages, surpass them.
  3. Step 3 β€” optional (LR 5e-7): a further small improvement.

Evaluation β€” WER (%)

Setting Avg English Kikuyu Meru Shona French
Monolingual β€” 16.9 8.12 26.5 3.02 8.5
Step 1 (5e-5) 21.7 - - - - -
Step 2 (5e-6) 13.3 42.7 16.2 17.5 5.08 9.14
Step 3 (5e-7) 12.5 40.3 15.2 16.9 4.78 7.94

"x" = not evaluated; "-" = not computed at that step. Lower is better.

How to use

This is a multilingual model. Language identity is injected as a short one-hot language prefix prepended to the acoustic features, so you must tell the model which language to transcribe. Not sure where to start? Try the interactive Demo linked above first.

Use the exact language_map below (shared across all DONDO multilingual models):

import torch, torchaudio
from transformers import AutoProcessor, AutoModelForCTC

model_id = "KhayaAI/w2v-bert-kik_mer_sna_en_fra"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCTC.from_pretrained(model_id)

# Full language -> prefix-id map used by the DONDO multilingual models:
language_map = {"Adangme": 0, "Akuapem Twi": 1, "Asante Twi": 2, "Dagbani": 3, "Dagaare": 4,
                "Ewe": 5, "African English": 6, "Fante": 7, "French": 8, "Ga": 9, "Gonja": 10,
                "Gurene": 11, "Hausa": 12, "Igbo": 13, "Kasem": 14, "Kikuyu": 15,
                "Konkomba (Likpakpaanl)": 16, "Konkomba (Likoonli)": 17, "Krio": 18,
                "Kusaal": 19, "Luo": 20, "Mampruli": 21, "Mende": 22, "Meru/Kimeru": 23,
                "Nzema": 24, "Pidgin": 25, "Shona": 26, "Swahili": 27, "Temne": 28,
                "Wali": 29, "Wolof": 30, "Yoruba": 31}

def add_language_prefix(features, lang_id, num_langs, prefix_len=1):
    # features: (time, feature_dim). Build a one-hot language vector, map it
    # into the feature dimension, repeat over `prefix_len` frames and prepend.
    T, D = features.shape
    lang_vec = torch.zeros(D)
    lang_vec[lang_id % D] = 1.0                 # crude one-hot -> feature bin
    prefix = lang_vec.unsqueeze(0).repeat(prefix_len, 1)
    return torch.cat([prefix, features], dim=0)

speech, sr = torchaudio.load("audio.wav")
if sr != 16000:
    speech = torchaudio.functional.resample(speech, sr, 16000)
feats = processor(speech.squeeze().numpy(), sampling_rate=16000,
                  return_tensors="pt").input_features[0]

lang_id = language_map["Asante Twi"]   # pick any language this model supports
feats = add_language_prefix(feats, lang_id, num_langs=len(language_map))

with torch.no_grad():
    logits = model(input_features=feats.unsqueeze(0)).logits
pred_ids = torch.argmax(logits, dim=-1)
print(processor.batch_decode(pred_ids)[0])

Limitations

Read-religious-text domain; specify the target language via the prefix (no built-in language ID yet). WERs are in-domain. The African English column is harder in the multilingual setting than in a dedicated model.

License

Released under the Apache-2.0 license. You are free to use, modify, redistribute and build upon this model, including for commercial purposes. The only substantive requirement is attribution.

Professional services & hosted APIs

This model is free to use under Apache-2.0. If your team would like help deploying it offline on your own infrastructure and data, Khaya AI offers professional services (integration, fine-tuning and on-premises deployment). For ready-to-use and more advanced ASR, including APIs for interested parties, see Khaya Studio.

Citation

@article{azunre2026dondo,
  title         = {DONDO: Open w2v-BERT Speech Recognition Base Models for African Languages},
  author        = {Azunre, Paul and Ibrahim, Naafi and Budu, Joel and Adu-Gyamfi, Lawrence},
  year          = {2026},
  eprint        = {2607.21540},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  note          = {Democratizing Oral Neural Dialect Ontology. Funded by the Huniki Federation.}
}

Acknowledgements

Funded by the Huniki Federation. We thank Ghana-NLP and Algorine Research for their support with benchmarking, testing and data, and Hugging Face for compute credits. We also thank the language communities and data contributors whose recordings and transcriptions made this work possible.

Downloads last month
65
Safetensors
Model size
0.6B params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Space using KhayaAI/w2v-bert-kik_mer_sna_en_fra 1

Collection including KhayaAI/w2v-bert-kik_mer_sna_en_fra

Paper for KhayaAI/w2v-bert-kik_mer_sna_en_fra

Evaluation results