CoolFace
Modelpublic

asrDIL/mms-fongbe-finetuned-v4

sourceHugging Faceapache-2.0updated 6mo agoView on Hugging Face
0likes46downloads
Model Card

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

Performances

VersionWER globalCER globalWER ALFFAWER 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)

SourcePhrases
ALFFA LM text31,566
FFR v1/v2 (Fon-Français)~52K
FFR Daily Dialogues1,964
Wikipedia Fon (3,785 articles)29,129
Transcriptions train8,930
Total unique130,334

Utilisation

Transcription simple (greedy)

python
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é)

python
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 :

bibtex
@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