KenLM-V1 — six-language decoding bundle
This repository publishes the frozen language-model assets used by the Afri Voices ASR experiments for Swahili, Kikuyu, Kalenjin, Dholuo, Somali and Maasai.
Profiles
profiles/best_public_036529.json: historical decoding profile associated with the best known public leaderboard macro-WER 0.36529. That historical pipeline also used specialist acoustic checkpoints; this profile alone cannot reproduce 0.36529 and is not the default for the published single acoustic model.profiles/current_model_036878.json: exact decoding profile compatible with VynoDePal/omniASR-fine-tuning-6languageKenya, whose complete public submission scored 0.36878.active_profile.jsonrecords both roles explicitly.
Assets
Seven content-unique binary/unigram pairs are included because the two profiles share most assets while Somali uses an additional historical model in one route.
| Asset | Language | Family | Binary MiB | Unigrams | SHA256 prefix |
|---|---|---|---|---|---|
kik-kenlm_models_v4-b2979f155a94 |
kik | kenlm_models_v4 | 64.02 | 96473 | b2979f155a94759b |
kln-kenlm_models_v5-b654dccc79bf |
kln | kenlm_models_v5 | 42.28 | 91478 | b654dccc79bf04fb |
luo-kenlm_models_v5-701684aaa158 |
luo | kenlm_models_v5 | 40.07 | 37115 | 701684aaa158af62 |
mas-kenlm_models_v5-a562424b56ae |
mas | kenlm_models_v5 | 46.45 | 72739 | a562424b56ae1f7d |
som-kenlm_models_v5-50c18b7de9c5 |
som | kenlm_models_v5 | 30.59 | 52441 | 50c18b7de9c56386 |
sw-kenlm_models_v4-e0b4f79037e6 |
sw | kenlm_models_v4 | 420.41 | 200000 | e0b4f79037e65488 |
som-v1_train-4e71a0461cb4 |
som | v1_train | 16.12 | 23090 | 4e71a0461cb4ca9b |
Each profile defines 12 routes (language|scripted and language|unscripted) with exact alpha, beta and beam width. Assets are content-addressed and deduplicated by SHA256.
Usage
import importlib.util
from pathlib import Path
from huggingface_hub import snapshot_download
repo = snapshot_download("VynoDePal/KenLM-V1", revision="v1.0.0")
spec = importlib.util.spec_from_file_location("kenlm_v1", Path(repo) / "load_decoder.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
load_decoder = module.load_decoder
# labels must be the exact omniASR CTC label list, with blank at index 0.
decoder, beam, route = load_decoder(
repo, labels, language="kln", domain="unscripted",
profile="current_model_036878",
)
hypothesis = decoder.decode(log_probs, beam_width=beam)
Important compatibility rules
- Use the exact CTC tokenizer/labels from the acoustic model.
- Select the correct language and scripted/spontaneous domain.
- Keep only one decoder resident at a time for the edge-memory target.
- Apply the same Unicode/text normalization used by the ASR pipeline.
- These LMs are not language-identification or domain-classification models.
Evaluation and limitations
Leaderboard WER cannot isolate KenLM gains because acoustic checkpoints and decoding settings are coupled. Local held-out audits were used for selection, and some groups prefer historical settings. Language models can hallucinate frequent phrases or suppress rare names and code-switching.
Data and license
No raw training corpus or complete transcript collection is included. Derived unigram vocabularies and compiled n-gram weights are included and may preserve words or names observed in training. See ATTRIBUTION.md and license_audit.json; verify upstream terms for your intended use.
Future V6 update
The candidate produced by 20.K3/20.K4 is not included until it passes acoustic WER audit. A validated update will be committed to this same repository and tagged as a new version; tag v1.0.0 will remain immutable.