Scaling Speech Technology to 1,000+ Languages
Paper • 2305.13516 • Published • 12
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.
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.
Wav2Vec2ForCTC (MMS-1B-ALL) fine-tuné avec adapter layerspyctcdecode| 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%)
| 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 |
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)
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)
├── 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
facebook/mms-1b-all--discount_fallbackSi 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}
}