Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VoC Logo

EMNLP 2025 PaperOfficial WebsiteSimbaBenchGitHub RepositoryHugging FaceHugging Face Dataset

📑 Table of Contents


Bridging the Digital Divide for African AI

Voice of a Continent is a comprehensive open-source ecosystem designed to bring African languages to the forefront of artificial intelligence. By providing a unified suite of benchmarking tools and state-of-the-art models, we ensure that the future of speech technology is inclusive, representative, and accessible to over a billion people.


Best-in-Class Multilingual Models

VoC Simba Models Logo

Introduced in our EMNLP 2025 paper Voice of a Continent, the Simba Series represents the current state-of-the-art for African speech AI.

  • Unified Suite: Models optimized for African languages.
  • Superior Accuracy: Outperforms generic multilingual models by leveraging SimbaBench's high-quality, domain-diverse datasets.
  • Multitask Capability: Designed for high performance in ASR (Automatic Speech Recognition) and TTS (Text-to-Speech).
  • Inclusion-First: Specifically built to mitigate the "digital divide" by empowering speakers of underrepresented languages.

The Simba family consists of state-of-the-art models fine-tuned using SimbaBench. These models achieve superior performance by leveraging dataset quality, domain diversity, and language family relationships.

🗣️✍️ Simba-ASR

The New Standard for African Speech-to-Text

🎯 TaskAutomatic Speech Recognition — Powering high-accuracy transcription across the continent.

🌍 Language Coverage (43 African languages)

Amharic (amh), Arabic (ara), Asante Twi (asanti), Bambara (bam), Baoulé (bau), Bemba (bem), Ewe (ewe), Fanti (fat), Fon (fon), French (fra), Ganda (lug), Hausa (hau), Igbo (ibo), Kabiye (kab), Kinyarwanda (kin), Kongo (kon), Lingala (lin), Luba-Katanga (lub), Luo (luo), Malagasy (mlg), Mossi (mos), Northern Sotho (nso), Nyanja (nya), Oromo (orm), Portuguese (por), Shona (sna), Somali (som), Southern Sotho (sot), Swahili (swa), Swati (ssw), Tigrinya (tir), Tsonga (tso), Tswana (tsn), Twi (twi), Umbundu (umb), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul), Tamazight (tzm), Sango (sag), Dinka (din).

🌐 Explore the Frontier

ASR ModelsArchitecture#Parameters🤗 Hugging Face Model CardStatus
🔥Simba-S🔥SeamlessM4T-v22.3B🤗 https://huggingface.co/UBC-NLP/Simba-S✅ Released
🔥Simba-W🔥Whisper1.5B🤗 https://huggingface.co/UBC-NLP/Simba-W✅ Released
🔥Simba-X🔥Wav2Vec21B🤗 https://huggingface.co/UBC-NLP/Simba-X✅ Released
🔥Simba-M🔥MMS1B🤗 https://huggingface.co/UBC-NLP/Simba-M✅ Released
🔥Simba-H🔥HuBERT94M🤗 https://huggingface.co/UBC-NLP/Simba-H✅ Released
  • Simba-S emerged as the best-performing ASR model overall.

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportpipeline# Load Simba-S for ASRasr_pipeline=pipeline(
"automatic-speech-recognition",
model="UBC-NLP/Simba-S"#Simba mdoels `UBC-NLP/Simba-S`, `UBC-NLP/Simba-W`, `UBC-NLP/Simba-X`, `UBC-NLP/Simba-H`, `UBC-NLP/Simba-M`
)
##### Load the multilingual African adapter (Only for `UBC-NLP/Simba-M`)asr_pipeline.model.load_adapter("multilingual_african") # Only for `UBC-NLP/Simba-M`############################ Transcribe audio from fileresult=asr_pipeline("https://africa.dlnlp.ai/simba/audio/afr_Lwazi_afr_test_idx3889.wav")
print(result["text"])
# Transcribe audio from audio arrayresult=asr_pipeline({
"array": audio_array,
"sampling_rate": 16_000
})
print(result["text"])

Example Outputs

Using the same audio file with different Simba models:

# Simba-S
{'text': 'watter verontwaardiging sou daar, in ons binneste gewees het.'}
# Simba-W
{'text': 'watter veronwaardigingsel daar, in ons binneste gewees het.'}
# Simba-X
{'text': 'fator fr on ar taamsodr is'}
# Simba-M
{'text': 'watter veronwaardiging sodaar in ons binniste gewees het'}
# Simba-H
{'text': 'watter vironwaardiging so daar in ons binneste geweeshet'}

Get started with Simba models in minutes using our interactive Colab notebook: Open In Colab

🔊 Simba-TTS (Text-to-Speech)

  • 🎯 Task:Text-to-Speech — Natural Voice Synthesis. 🌍 Language Coverage (7 African languages)

Afrikaans (afr), Asante Twi (asanti), Akuapem Twi (akuapem), Lingala (lin), Southern Sotho (sot), Tswana (tsn), Xhosa (xho)

TTS ModelArchitectureHugging Face CardStatus
Simba-TTS-afr 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-afr✅ Released
Simba-TTS-twi-asanti 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-asanti✅ Released
Simba-TTS-twi-akuapem 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-twi-akuapem✅ Released
Simba-TTS-lin 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-lin✅ Released
Simba-TTS-sot 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-sot✅ Released
Simba-TTS-tsn 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-tsn✅ Released
Simba-TTS-xho 🔊MMS-TTS🤗 https://huggingface.co/UBC-NLP/Simba-TTS-xho✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimportVitsModel, AutoTokenizerimporttorchmodel_name="Simba-TTS-afr"## Simba-TTS-twi-asanti, Simba-TTS-twi-akuapem, Simba-TTS-lin, Simba-TTS-sot, Simba-TTS-tsn, Simba-TTS-xhomodel=VitsModel.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
text="Ons noem hierdie deeltjies sub-atomiese deeltjies"#example of Afrikaans (afr) language inputs=tokenizer(text, return_tensors="pt")
withtorch.no_grad():
output=model(**inputs).waveform

The resulting waveform can be saved as a .wav file:

scipy.io.wavfile.write("outputfile.wav", rate=model.config.sampling_rate, data=output.float().numpy())

Or displayed in a Jupyter Notebook / Google Colab:

fromIPython.displayimportAudioAudio(output.numpy(), rate=model.config.sampling_rate)

🔍 Simba-SLID (Spoken Language Identification)

  • 🎯 Task:Spoken Language Identification — Intelligent input routing.
  • 🌍 Language Coverage (49 African languages)

    Akuapim Twi (Akuapim-twi), Asante Twi (Asante-twi), Tunisian Arabic (aeb), Afrikaans (afr), Amharic (amh), Arabic (ara), Basaa (bas), Bemba (bem), Taita (dav), Dyula (dyu), English (eng), Nigerian Pidgin (eng-zul), Ewe (ewe), Fanti (fat), Fon (fon), Pulaar (fuc), Pular (fuf), Ga (gaa), Hausa (hau), Igbo (ibo), Kabyle (kab), Kinyarwanda (kin), Kalenjin (kln), Lingala (lin), Lozi (loz), Luganda (lug), Luo (luo), Western Maninkakan (mlq), South Ndebele (nbl), Northern Sotho (nso), Chichewa (nya), Southern Sotho (sot), Serer (srr), Swati (ssw), Susu (sus), Kiswahili (swa), Swahili (swh), Tigre (tig), Tigrinya (tir), Tonga (toi), Tswana (tsn), Tsonga (tso), Twi (twi), Venda (ven), Wolof (wol), Xhosa (xho), Yoruba (yor), Standard Moroccan Tamazight (zgh), Zulu (zul)

SLID ModelArchitectureHugging Face CardStatus
Simba-SLID-49 🔍HuBERT🤗 https://huggingface.co/UBC-NLP/Simba-SLIS-49✅ Released

🧩 Usage Example

You can easily run inference using the Hugging Face transformers library.

fromtransformersimport (
HubertForSequenceClassification,
AutoFeatureExtractor,
AutoProcessor
)
importtorchmodel_id="UBC-NLP/Simba-SLIS_49"model=HubertForSequenceClassification.from_pretrained(model_id).to("cuda")
# HuBERT models can use either processor or feature extractor depending on the specific modeltry:
processor=AutoProcessor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoProcessor")
except:
processor=AutoFeatureExtractor.from_pretrained(model_id)
print("Loaded Simba-SLIS_49 model with AutoFeatureExtractor")
# Optimize model for inferencemodel.eval()
audio_arrays= [] ### add your audio arraysample_rate=16000nputs=processor(audio_arrays, sampling_rate=sample_rate, return_tensors="pt", padding=True).to("cuda")
# Different models might have slightly different input formatstry:
logits=model(**inputs).logitsexceptExceptionase:
# Try alternative input format if the first attempt failsif"input_values"ininputs:
logits=model(input_values=inputs.input_values).logitselse:
raisee# Calculate softmax probabilitiesprobs=torch.nn.functional.softmax(logits, dim=-1)
# Get the maximum probability (confidence) for each predictionconfidence_values, pred_ids=torch.max(probs, dim=-1)
# Convert to Python listspred_ids=pred_ids.tolist()
confidence_values=confidence_values.cpu().tolist()
# Get labels from IDspred_labels= [model.config.id2label[i] foriinpred_ids]
print(pred_labels, confidence_values)

SibmaBench Data Release & Benchmarking

How to Use SimbaBench

To evaluate your model on SimbaBench across all supported tasks (ASR, TTS, and SLID), simply load the corresponding configuration for the task and language you wish to benchmark.

Each task is organized by configuration name (e.g., asr_test_afr, tts_test_wol, slid_61_test). Loading a configuration provides the standardized evaluation split for that specific benchmark.

Example:

fromdatasetsimportload_datasetdata=load_dataset("UBC-NLP/SimbaBench_dataset", "asr_test_afr")
DatasetDict({
test: Dataset({
features: ['split', 'benchmark_id', 'audio', 'text', 'duration_s', 'lang_iso3', 'lang_name'],
num_rows: 1000
})
})
data['test'][0]
{'split': 'test',
'benchmark_id': 'afr_Lwazi_afr_test_idx3889',
'audio': {'path': None,
'array': array([ 4.27246094e-04, 7.62939453e-04, 6.71386719e-04, ...,
-3.05175781e-04, -2.13623047e-04, -6.10351562e-05]),
'sampling_rate': 16000},
'text': 'watter, verontwaardiging sou daar, in ons binneste gewees het?',
'duration_s': 5.119999885559082,
'lang_iso3': 'afr',
'lang_name': 'Afrikaans'}

📌 ASR Evaluation Configurations

Config NameLanguageISO# Samples# Hours
asr_test_Akuapim-twiAkuapim-twiAkuapim-twi1,0001.35
asr_test_Asante-twiAsante-twiAsante-twi1,0000.97
asr_test_afrAfrikaansafr1,0000.87
asr_test_amhAmharicamh5811.12
asr_test_basBasaabas5820.76
asr_test_bemBembabem1,0002.15
asr_test_davTaitadav8781.17
asr_test_dyuDyuladyu590.10
asr_test_fatFantifat1,0001.38
asr_test_fonFonfon1,0000.66
asr_test_fucPulaarfuc1000.10
asr_test_fufPularfuf1290.03
asr_test_gaaGagaa1,0001.52
asr_test_hauHausahau6810.89
asr_test_iboIgboibo50.01
asr_test_kabKabylekab1,0001.05
asr_test_kinKinyarwandakin1,0001.50
asr_test_klnKalenjinkln1,0001.50
asr_test_lozLoziloz3990.91
asr_test_lugGandalug1,0001.65
asr_test_luoLuo (Kenya and Tanzania)luo1,0001.31
asr_test_mlqWestern Maninkakanmlq1820.04
asr_test_nblSouth Ndebelenbl1,0001.12
asr_test_nsoNorthern Sothonso1,0000.88
asr_test_nyaNyanjanya4281.31
asr_test_sotSouthern Sothosot1,0000.82
asr_test_srrSerersrr8992.84
asr_test_sswSwatissw1,0000.93
asr_test_susSususus2100.05
asr_test_swaSwahiliswa1,0001.23
asr_test_tigTigretig1850.33
asr_test_tirTigrinyatir70.01
asr_test_toiTonga (Zambia)toi4631.47
asr_test_tsnTswanatsn1,0000.82
asr_test_tsoTsongatso1,0000.99
asr_test_twiTwitwi120.02
asr_test_venVendaven1,0000.92
asr_test_wolWolofwol1,0001.19
asr_test_xhoXhosaxho1,0000.92
asr_test_yorYorubayor3590.42
asr_test_zghStandard Moroccan Tamazightzgh1970.22
asr_test_zulZuluzul1,0001.10

📌 TTS Evaluation Configurations

Config NameLanguageISO# Samples# Hours
tts_test_eweEweewe660.29
tts_test_kinKinyarwandakin1,0531.30
tts_test_Asante-twiAsante-twiAsante-twi640.18
tts_test_yorYorubayor400.13
tts_test_wolWolofwol4,0014.12
tts_test_hauHausahau1240.24
tts_test_linLingalalin630.28
tts_test_xhoXhosaxho2420.31
tts_test_tsnTswanatsn2380.36
tts_test_afrAfrikaansafr2930.34
tts_test_sotSouthern Sothosot2100.33
tts_test_Akuapim-twiAkuapim-twiAkuapim-twi830.22

📌 SLID Evaluation

Config NameLanguage Scope# Samples# Hours
slid_61_test61 Languages21,81734.36

Citation

If you use the Simba models or SimbaBench benchmark for your scientific publication, or if you find the resources in this website useful, please cite our paper.

@inproceedings{elmadany-etal-2025-voice,
title = "Voice of a Continent: Mapping {A}frica{'}s Speech Technology Frontier",
author = "Elmadany, AbdelRahim A. and Kwon, Sang Yun and Toyin, Hawau Olamide and Alcoba Inciarte, Alcides and Aldarmaki, Hanan and Abdul-Mageed, Muhammad",
editor = "Christodoulopoulos, Christos and Chakraborty, Tanmoy and Rose, Carolyn and Peng, Violet",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
month = nov,
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2025.emnlp-main.559/",
doi = "10.18653/v1/2025.emnlp-main.559",
pages = "11039--11061",
ISBN = "979-8-89176-332-6",
}

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages