/ Модель

Характеристики

Параметры
403 млн
Лицензия
Apache 2.0
Архитектура
wav2vec2-bert · dense
Базовая модель
w2v-bert-2.0
Опубликована
25 июл 2026

w2v-bert-2.0-luganda-main-best

Распознавание речиАудио → текст

Модель на основе Wav2Vec2-BERT распознаёт речь на луганда и выдаёт транскрипцию с регистром и пунктуацией.

11скачиваний за 30 дней0лайковвеса обновлены10 авг 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Распознавание речи» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Модель keystats/w2v-bert-2.0-luganda-main-best — система автоматического распознавания речи на языке луганда, разработанная keystats на основе facebook/w2v-bert-2.0. Это дообученная архитектура Wav2Vec2-BERT с CTC-головой на уровне символов; размер составляет 402,8 млн параметров. Модель преобразует аудио в текст с сохранением регистра, пунктуации и диакритических знаков в соответствии с обучающими транскрипциями и ориентирована на оценивание без нормализации текста, как в конкурсе WAXAL/Zindi.

Обучение проводилось на объединённых корпусах Google WaxalNLP, FarmerlineML/luganda_dataset_2.0 и Bateesa/luganda-tts-toby. Модель предназначена для транскрибирования речи на луганда; для повышения точности можно использовать совместимую языковую модель KenLM keystats/waxal-kenlm-models-best. Распространяется по лицензии Apache-2.0.

Модель рассчитана на речь одного говорящего и не обрабатывает перекрывающуюся речь нескольких людей. Качество зависит от акустических условий, качества записи и диалектного охвата данных; WER/CER с учётом регистра и пунктуации может быть выше, чем при сравнении нормализованного текста.

Сценарии применения

  • транскрибирование записей на луганда
  • расшифровка аудио для оценки WER/CER без нормализации
  • подготовка текстовых субтитров к речи на луганда

Ограничения

Модель рассчитана на речь одного говорящего и не умеет разбирать перекрывающуюся речь нескольких людей. Диалектный охват и устойчивость к разным акустическим условиям ограничены обучающими корпусами; регистр и пунктуация учитываются в метриках ошибок.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

w2v-bert-2.0-luganda-main-best

A Luganda automatic speech recognition (ASR) model, fine-tuned from facebook/w2v-bert-2.0 on a combined Luganda speech corpus. This is the raw-text (cased, punctuated) checkpoint in a two-model pair — see Related checkpoints for the normalized-text sibling.

Model description

facebook/w2v-bert-2.0 — a large-scale, multilingual self-supervised speech encoder pretrained with a BERT-style masked prediction objective — is used as the backbone, with a from-scratch character-level CTC (Connectionist Temporal Classification) head fine-tuned specifically for Luganda.

Text casing note: unlike the -main sibling checkpoint (which lowercases training text), this model's vocabulary was built with NFKC-only normalization — case, punctuation, and diacritics from the source transcriptions are preserved as-is. This matches how the WAXAL competition (Zindi) actually scores submissions: raw, unnormalized WER/CER, where case and punctuation mismatches count as errors. Practical effect: this model's output can include uppercase letters and punctuation marks, to whatever extent those appeared in its training transcriptions — it has not been artificially restricted to lowercase-only output the way -main has.

Training data

Training pool (train split only from each source, deduplicated by audio hash and by transcription-within-source):

SourceRole
google/WaxalNLP (lug_asr config)Benchmark dataset — train split pooled into training, validation split held out untouched as the fixed evaluation benchmark
FarmerlineML/luganda_dataset_2.0All splits pooled into training
Bateesa/luganda-tts-tobyAll splits pooled into training

Note: keystats/luganda_asr_dataset (~230k rows, used in the -main sibling's training) was deliberately excluded for faster training Dropping it makes it easier to train more epochs.

None of the additional sources overlap with WAXAL's own train/validation/test split boundaries, so pooling every split from them carries no evaluation leakage risk. WAXAL's validation split is the only data used for evaluation, and it was never included in training.

Training procedure

  • Base model: facebook/w2v-bert-2.0
  • Architecture: Wav2Vec2BertForCTC, add_adapter=True
  • Processor: Wav2Vec2BertProcessor — SeamlessM4TFeatureExtractor for audio features + a Wav2Vec2CTCTokenizer built from scratch on the combined training + validation transcriptions (character-level vocabulary, case and punctuation preserved, NFKC Unicode normalization only, | as the word delimiter, [PAD] doubling as the CTC blank token)
  • Sample rate: 16 kHz mono
  • Hardware: single RTX PRO 6000
  • Epochs: 10 (with early stopping, patience 5, on validation WER)
HyperparameterValueRationale
Learning rate3e-5A much higher rate (e.g. 1e-3) is too aggressive for full fine-tuning of a model this size
Effective batch size32 (per-device 4 × grad-accum 8)Batch size 1 gives very noisy gradients at this model scale
Checkpoint selectionbest-by-WERload_best_model_at_end + early stopping
Dropout0.05 (attention / hidden / feature-projection)Non-zero regularization appropriate for this dataset size
Weight decay0.01Standard AdamW regularization
LR schedulecosine, 10% warmupGentler decay than linear, avoids an abrupt ramp-down
Precisionfp16, gradient checkpointingMemory efficiency
  • Data filtering: clips whose transcript is too long for CTC to align within the available encoder output length ("CTC-impossible" clips, roughly output_steps < 2 * label_length) are dropped from both train and validation before training
  • Seed: 42 (deterministic — same seed for Python/NumPy/PyTorch/CUDA)

Evaluation results

Training-time validation metrics (final checkpoint, step 2670, WAXAL Luganda validation split, raw/cased scoring since this model's vocabulary preserves case and punctuation):

MetricValue
WER21.62%
CER4.01%
Eval loss0.1477

Separate post-training evaluation (greedy vs. KLM-assisted decoding,Full WAXAL Luganda test/validation splits):

DecodingSplitWERCER
Greedy (no LM)test19.11%3.68%
Greedy (no LM)validation18.97%3.64%
+ KLM (keystats/waxal-kenlm-models-best)test18.43%3.69%
+ KLM (keystats/waxal-kenlm-models-best)validation18.25%3.71%

(n=638 test, n=664 validation, 0 skipped)

Note on the two tables above: the training-time metric (21.62% WER) and the separate evaluation run (18.97% WER greedy) were computed by different scripts-one on ctc incompatible plus other messy audios excluded and the other on the full dataset.

Pairing this model with its matching KLM gives a consistent WER improvement over greedy decoding alone (see Using this model with a KenLM language model below).

How to use

Two ways to use this model, depending on your needs:

  • Option 1 — model alone (greedy decoding): faster, no extra dependencies, slightly lower accuracy.
  • Option 2 — model + KLM (recommended): requires pyctcdecode + KenLM, noticeably higher accuracy via beam-search decoding with a matching language model.

Option 1 — model alone (greedy decoding)

import torch
import librosa
from transformers import Wav2Vec2BertForCTC, Wav2Vec2BertProcessor

MODEL_ID = "keystats/w2v-bert-2.0-luganda-main-best"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

processor = Wav2Vec2BertProcessor.from_pretrained(MODEL_ID)
model = Wav2Vec2BertForCTC.from_pretrained(MODEL_ID).to(DEVICE).eval()

audio_array, sr = librosa.load("path/to/audio.wav", sr=16000, mono=True)
inputs = processor(audio_array, sampling_rate=16000, return_tensors="pt")
with torch.no_grad():
    logits = model(input_features=inputs.input_features.to(DEVICE)).logits

predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)[0]

print(transcription)  # cased, punctuated Luganda text (to whatever extent seen in training)

Option 2 — model + KLM (recommended, higher accuracy)

A companion n-gram KenLM language model, trained on the same raw (cased, punctuated) text convention as this ASR model, is available at keystats/waxal-kenlm-models-best (luganda/luganda_5gram_correct-best.arpa).

Important: use the matching KLM variant for whichever ASR checkpoint you're using — this -main-best model pairs with keystats/waxal-kenlm-models-best (raw/cased text), while the -main sibling checkpoint pairs with the separate keystats/waxal-kenlm-models repo (normalized/lowercase text). Mixing a raw-text ASR model with a normalized-text KLM (or vice versa) will cause a vocabulary mismatch during decoding.

# pip install pyctcdecode
# pip install https://github.com/kpu/kenlm/archive/master.zip

import torch
import librosa
from huggingface_hub import hf_hub_download
from transformers import Wav2Vec2BertForCTC, Wav2Vec2BertProcessor
from pyctcdecode import build_ctcdecoder

MODEL_ID = "keystats/w2v-bert-2.0-luganda-main-best"
KLM_REPO_ID = "keystats/waxal-kenlm-models-best"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

processor = Wav2Vec2BertProcessor.from_pretrained(MODEL_ID)
model = Wav2Vec2BertForCTC.from_pretrained(MODEL_ID).to(DEVICE).eval()

klm_path = hf_hub_download(repo_id=KLM_REPO_ID, repo_type="dataset",
                            filename="luganda/luganda_5gram_correct-best.arpa")

def build_vocab_list(tokenizer, vocab_size):
    vocab_dict = tokenizer.get_vocab()
    vocab_list = [None] * vocab_size
    for tok, idx in sorted(vocab_dict.items(), key=lambda kv: kv[1]):
        if idx < vocab_size:
            vocab_list[idx] = tok
    pad_id = tokenizer.pad_token_id
    if pad_id is not None and pad_id < len(vocab_list):
        vocab_list[pad_id] = ""
    word_delim = getattr(tokenizer, "word_delimiter_token", None)
    if word_delim:
        delim_id = vocab_dict.get(word_delim)
        if delim_id is not None:
            vocab_list[delim_id] = " "
    return vocab_list

vocab_list = build_vocab_list(processor.tokenizer, model.config.vocab_size)
decoder = build_ctcdecoder(
    vocab_list,
    kenlm_model_path=klm_path,
    alpha=0.5,   # LM weight -- tune against your own validation set
    beta=0.7,    # word insertion bonus -- tune against your own validation set
)

audio_array, sr = librosa.load("path/to/audio.wav", sr=16000, mono=True)
inputs = processor(audio_array, sampling_rate=16000, return_tensors="pt")
with torch.no_grad():
    logits = model(input_features=inputs.input_features.to(DEVICE)).logits

transcription = decoder.decode(logits.cpu().numpy()[0], beam_width=100)
print(transcription)

Note on alpha/beta: the values above are starting points, not universal defaults — grid-search them against your own labeled validation set, since optimal weights depend on your specific audio domain.

Intended uses & limitations

  • Intended for transcribing spoken Luganda audio into cased, punctuated text (to whatever extent case/punctuation exist in the training transcriptions).
  • As a CTC-based model, it assumes single-speaker, forward-only audio and has no mechanism for overlapping speech from multiple speakers.
  • Trained on a mix of WAXAL and two community-contributed Luganda datasets; acoustic conditions, recording quality, and dialectal coverage reflect that combined pool, not any single controlled source.
  • Raw-text WER/CER (with case and punctuation counted as errors) will read higher than a normalized-text comparison of the same underlying transcription quality — this is expected and matches how the source competition (Zindi/WAXAL) actually scores submissions.

Related checkpoints

  • keystats/w2v-bert-2.0-luganda-main — same base model and general training procedure, trained on lowercased text instead, and additionally includes keystats/luganda_asr_dataset in its training pool

Citation

If you use this model, please cite the training/fine-tuning work and the underlying datasets:

@misc{keystats_wav2vec2bert_luganda_best,
  title={w2v-bert-2.0-luganda-main-best: A Luganda ASR model fine-tuned from facebook/w2v-bert-2.0 on raw text},
  author={keystats},
  year={2026},
  howpublished={\url{https://huggingface.co/keystats/w2v-bert-2.0-luganda-main-best}}
}

@misc{waxal,
  title={WAXAL: A Multilingual African Speech Dataset},
  author={Google},
  howpublished={\url{https://huggingface.co/datasets/google/WaxalNLP}}
}

@misc{farmerline_luganda,
  title={luganda\_dataset\_2.0},
  author={FarmerlineML},
  howpublished={\url{https://huggingface.co/datasets/FarmerlineML/luganda_dataset_2.0}}
}

@misc{bateesa_luganda_tts,
  title={luganda-tts-toby},
  author={Bateesa},
  howpublished={\url{https://huggingface.co/datasets/Bateesa/luganda-tts-toby}}
}

@inproceedings{w2vbert2,
  title={Seamless: Multilingual Expressive and Streaming Speech Translation},
  author={Seamless Communication and others},
  year={2023},
  howpublished={\url{https://huggingface.co/facebook/w2v-bert-2.0}}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Можно запустить

Подбираем GPU…

Класс архитектуры
Wav2Vec2BertForCTC
Ревизия весов
eff60a5

0 моделей