asrDIL/mms-fongbe-finetuned-v4
046
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
- Modèle acoustique :
Wav2Vec2ForCTC(MMS-1B-ALL) fine-tuné avec adapter layers - Décodage : CTC beam search via
pyctcdecode - Modèle de langue : KenLM 5-gram entraîné sur 130K phrases Fongbe (α=0.5, β=0.0)
- Post-traitement : correction des voyelles nasales Fongbe (en→ɛn, on→ɔn)
Performances
Gains V1 → V4 : WER 64.43% → 36.81% (-27.62 pts, réduction relative de 42.9%)
Corpus LM (130K phrases)
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 fichierDonné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
- MMS: Scaling Speech Technology to 1000+ Languages
- FFR Dataset — Dossou & Emezue, 2021
- KenLM — Heafield, 2011
- pyctcdecode
