🌍 Langues cibles & Feuille de route
Le projet couvre un total de 18 langues africaines. La mise à disposition des adaptateurs suit un déploiement progressif : plusieurs modèles optimisés sont déjà disponibles, accompagnés de versions Preview régulièrement enrichies, tandis que les langues restantes intègrent le dépôt au fil des validations.
Table with columns: Code ISO, Langue, Statut du déploiement| Code ISO | Langue | Statut du déploiement |
|---|
bba | Baatonou | Disponible |
ewe | Ewé | Disponible |
fon | Fon | Disponible |
fub | Fulfulde / Peul | Disponible |
lin | Lingala | Disponible |
som | Somali | Disponible |
bci | Baoulé | Preview (améliorations continues) |
dyu | Dioula | Preview (améliorations continues) |
mos | Mooré / Mossi | Preview (améliorations continues) |
sag | Sango | Preview (améliorations continues) |
swh | Swahili | Preview (améliorations continues) |
ewo | Ewondo | Arrivée progressive |
hau | Hausa | Arrivée progressive |
lug | Luganda | Arrivée progressive |
mwm | Sar | Arrivée progressive |
orm | Oromo | Arrivée progressive |
sna | Shona | Arrivée progressive |
wol | Wolof | Arrivée progressive |
💡 Note : Les modèles marqués en Preview sont pleinement fonctionnels pour l'inférence et reçoivent des mises à jour itératives pour affiner leurs performances. Les adaptateurs restants seront poussés au fur et à mesure pour compléter l'écosystème des 18 langues.
✨ Points clés
- Gestion avancée des diacritiques : conservation stricte des signes diacritiques sur les langues validées.
- Transcription naturelle : optimisé pour capturer le parler courant, au-delà de la lecture isolée de phrases.
- Architecture modulaire : un modèle Whisper partagé, couplé à des adaptateurs légers par langue.
- Compatibilité Whisper native : certaines langues (marquées +wh ci-dessous) sont déjà partiellement reconnues par Whisper en zero-shot ; Griot-ASR améliore ces résultats via le fine-tuning par adaptateur.
📊 Benchmarks par langue
Les métriques ci-dessous concernent les langues Disponibles, mesurées sur des jeux de test dédiés par langue.
Table with columns: Code, Langue, Échantillons (test), CER, WER| Code | Langue | Échantillons (test) | CER | WER |
|---|
lin +wh | Lingala | 2 906 | 11.67% | 32.36% |
bba | Baatonou | — | 9.09% | 22.16% |
fub | Peul / Fulfulde |
+wh : langue déjà supportée nativement par Whisper en zero-shot.
Les métriques des langues en Preview et de celles en arrivée progressive ne sont pas encore communiquées publiquement ; elles seront publiées au moment de leur passage au statut Disponible.
- L'adaptateur Ewé est entraîné sur un corpus combiné et évalué séparément sur deux jeux de test (Waxal v2 et Nelver28) : Nelver28 provient de la même source de données que celle déjà utilisée pour d'autres langues du dépôt. Les deux scores ne sont pas directement comparables entre eux.
- Les scores restent spécifiques aux jeux de test utilisés et peuvent varier selon le domaine, le dialecte, les conventions orthographiques et la présence de code-switching.
💻 Inférence
Installation
pip install transformers==5.12.1 peft==0.20.0 torchao==0.18.0
Exemple d'utilisation
from transformers import (
AutoModelForSpeechSeq2Seq,
WhisperProcessor,
WhisperTokenizer,
WhisperFeatureExtractor,
)
import librosa
REPO = "bivariant/Griot-ASR-W-0.8-ALL"
AUDIO_PATH = "path/to/your/audio.wav"
feature_extractor = WhisperFeatureExtractor.from_pretrained(REPO)
model_base = AutoModelForSpeechSeq2Seq.from_pretrained(REPO, trust_remote_code=True)
tokenizer_base = WhisperTokenizer.from_pretrained(REPO)
processor_base = WhisperProcessor(feature_extractor=feature_extractor, tokenizer=tokenizer_base)
model_fon = AutoModelForSpeechSeq2Seq.from_pretrained(REPO, trust_remote_code=True, language="fon")
tokenizer_fon = WhisperTokenizer.from_pretrained(REPO, subfolder="fon")
processor_fon = WhisperProcessor(feature_extractor=feature_extractor, tokenizer=tokenizer_fon)
audio, sr = librosa.load(AUDIO_PATH, sr=16000)
inputs = processor_fon(audio, sampling_rate=16000, return_tensors="pt")
generated_ids = model_fon.generate(inputs["input_features"],num_beams=4, repetition_penalty=1.0, no_repeat_ngram_size=14,
max_new_tokens=440, length_penalty=1.2,return_dict_in_generate=True, output_scores=True)
print("FON:", processor_fon.batch_decode(generated_ids.sequences[0], skip_special_tokens=True)[0])
model_baatonu = AutoModelForSpeechSeq2Seq.from_pretrained(REPO, trust_remote_code=True, language="baatonu")
tokenizer_baatonu = WhisperTokenizer.from_pretrained(REPO, subfolder="baatonu")
processor_baatonu = WhisperProcessor(feature_extractor=feature_extractor, tokenizer=tokenizer_baatonu)
generated_ids = model_baatonu.generate(inputs["input_features"],num_beams=4, repetition_penalty=1.0, no_repeat_ngram_size=14,
max_new_tokens=440, length_penalty=1.2,return_dict_in_generate=True, output_scores=True)
print("BAATONU:", processor_baatonu.batch_decode(generated_ids.sequences[0], skip_special_tokens=True)[0])
Pour changer de langue, il faut recharger le modèle avec from_pretrained(..., language="<lang>") et le tokenizer correspondant via subfolder="<lang>" — il n'existe pas de méthode permettant de changer la langue d'un modèle déjà chargé.
🗺️ Feuille de route
Les adaptateurs pour Ewondo, Hausa, Luganda, Sar, Oromo, Shona et Wolof seront publiés au fur et à mesure de leur validation, à mesure que la collecte de données progresse. Les langues déjà en Preview (Baoulé, Dioula, Mossi, Sango, Swahili) continueront d'être affinées jusqu'à obtention d'un statut Disponible.
Ressources
Griot — Open Multilingual Intelligence for African Languages.