MMS Fongbe Fine-tuned V4 — ASR avec KenLM augmenté

Modèle de reconnaissance automatique de la parole (ASR) pour le Fongbe (fon), une langue Gbe parlée au Bénin par ~2 millions de locuteurs.

Description

Ce modèle est basé sur facebook/mms-1b-all (Meta's Massively Multilingual Speech), fine-tuné avec adapter training sur des données audio Fongbe, et augmenté d'un modèle de langue KenLM 5-gram pour le décodage CTC beam search.

Pipeline

  1. Modèle acoustique : Wav2Vec2ForCTC (MMS-1B-ALL) fine-tuné avec adapter layers
  2. Décodage : CTC beam search via pyctcdecode
  3. Modèle de langue : KenLM 5-gram entraîné sur 130K phrases Fongbe (α=0.5, β=0.0)
  4. Post-traitement : correction des voyelles nasales Fongbe (en→ɛn, on→ɔn)

Performances

Version WER global CER global WER ALFFA WER ilovelanguage
V1 (baseline) 64.43% 24.64% 46.46% 70.17%
V2 (data+reg) 49.01% 17.47% 45.74% 50.23%
V3b (+LM 44K) 39.43% 14.94% 34.71% 41.59%
V4 (+LM 130K) 36.81% 14.18% 21.74% 43.72%

Gains V1 → V4 : WER 64.43% → 36.81% (-27.62 pts, réduction relative de 42.9%)

Corpus LM (130K phrases)

Source Phrases
ALFFA LM text 31,566
FFR v1/v2 (Fon-Français) ~52K
FFR Daily Dialogues 1,964
Wikipedia Fon (3,785 articles) 29,129
Transcriptions train 8,930
Total unique 130,334

Utilisation

Transcription simple (greedy)

from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
import torch
import librosa

processor = Wav2Vec2Processor.from_pretrained("asrDIL/mms-fongbe-finetuned-v4")
model = Wav2Vec2ForCTC.from_pretrained("asrDIL/mms-fongbe-finetuned-v4")

audio, sr = librosa.load("audio.wav", sr=16000)
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")

with torch.no_grad():
    logits = model(**inputs).logits

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

Avec KenLM beam search (recommandé)

from pyctcdecode import build_ctcdecoder
import numpy as np

# Charger le vocabulaire
vocab_dict = processor.tokenizer.get_vocab()
sorted_vocab = sorted(vocab_dict.items(), key=lambda x: x[1])
labels = [k for k, v in sorted_vocab]

# Adapter les labels pour pyctcdecode
labels_for_decoder = []
for label in labels:
    if label == processor.tokenizer.pad_token:
        labels_for_decoder.append("")
    elif label == "|":
        labels_for_decoder.append(" ")
    else:
        labels_for_decoder.append(label)

# Construire le décodeur
decoder = build_ctcdecoder(
    labels=labels_for_decoder,
    kenlm_model_path="language_model/fongbe_5gram_v2_correct.arpa",
    alpha=0.5,
    beta=0.0,
)

# Décoder
logits_np = logits.cpu().numpy()[0]
transcription = decoder.decode(logits_np, beam_width=100)
print(transcription)

Structure du dépôt

├── config.json                    # Configuration du modèle
├── model.safetensors              # Poids du modèle (3.6 GB)
├── preprocessor_config.json       # Config du feature extractor
├── processor_config.json          # Config du processor
├── tokenizer_config.json          # Config du tokenizer
├── vocab.json                     # Vocabulaire Fongbe (57 tokens)
├── added_tokens.json              # Tokens additionnels
├── language_model/
│   ├── fongbe_5gram_v2_correct.arpa  # KenLM 5-gram (156 MB)
│   └── fongbe_lm_corpus_v2.txt      # Corpus LM (10.2 MB)
├── eval_results_v4.json           # Métriques détaillées
└── README.md                      # Ce fichier

Données d'entraînement

  • ALFFA Fongbe : ~8h d'audio transcrit (parole lue)
  • ilovelanguage Fongbe : ~4h d'audio transcrit (parole spontanée)
  • Corpus textuel LM : 130K phrases Fongbe (FFR, Wikipedia, ALFFA LM)

Entraînement

  • Base : facebook/mms-1b-all
  • Fine-tuning : adapter training, cosine scheduler, lr=5e-4, early stopping
  • Augmentation : speed perturbation (0.9-1.1) + bruit gaussien (SNR 15-30dB)
  • KenLM : 5-gram, lissage Kneser-Ney, --discount_fallback
  • Grid search : α ∈ {0.1, 0.3, 0.5, 0.7, 1.0, 1.5, 2.0}, β ∈ {0.0, 0.5, 1.0, 1.5, 2.0}

Limitations

  • Biais de domaine : le LM favorise le style ALFFA (WER 21.74%) au détriment de ilovelanguage (WER 43.72%)
  • Confusions tonales : certains accents/diacritiques restent incorrects
  • Données limitées : ~12h audio total, corpus LM de 130K phrases

Citation

Si vous utilisez ce modèle, merci de citer :

@misc{asrdil2026fongbe,
  title={MMS Fongbe Fine-tuned V4: ASR with Augmented KenLM},
  author={asrDIL},
  year={2026},
  url={https://huggingface.co/asrDIL/mms-fongbe-finetuned-v4}
}

Références

Downloads last month
9
Safetensors
Model size
1.0B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for asrDIL/mms-fongbe-finetuned-v4

Evaluation results

  • WER (global) on ALFFA + ilovelanguage Fongbe
    self-reported
    36.810
  • CER (global) on ALFFA + ilovelanguage Fongbe
    self-reported
    14.180
  • WER (ALFFA) on ALFFA + ilovelanguage Fongbe
    self-reported
    21.740
  • WER (ilovelanguage) on ALFFA + ilovelanguage Fongbe
    self-reported
    43.720