Griot-MT

Griot-MT est le modèle de traduction automatique multilingue de Bivariant pour les langues africaines.

Il couvre 18 langues africaines en traduction bidirectionnelle avec le français, soit 36 directions de traduction.

Résultat principal : Griot-MT atteint 38.11 BLEU et 58.00 chrF++ sur l'ensemble des 36 directions, avec une couverture de 100 %.

Projet Griot · Collecte & alignement · GitHub · Bivariant


Langues couvertes

Baatonou (bba), Baoulé (bci), Dioula (dyu), Ewé (ewe), Ewondo (ewo), Fon (fon), Fulfulde (fub), Hausa (hau), Lingala (lin), Luganda (lug), Mooré (mos), Sar (mwm), Oromo (orm), Sango (sag), Shona (sna), Somali (som), Swahili (swh) et Wolof (wol).

Chaque langue est évaluée dans les deux directions :

  • langue africaine → français ;
  • français → langue africaine.

Architecture de la release

Griot-MT est distribué sous la forme :

  • d'un modèle multilingue partagé d'environ 1,394 milliard de paramètres ;
  • d'un adaptateur LoRA/RSLoRA par langue ;
  • d'environ 23,6 millions de paramètres entraînables, soit environ 1,69 % du modèle partagé ;
  • d'un tokenizer partagé.

Configuration LoRA de la release :

Les artefacts publics sont organisés sous adapters/<code>/.


Benchmark

Griot-MT est comparé à :

  • NLLB-200 1.3B ;
  • Google Cloud Translation.

Le benchmark contient :

3 systèmes × 18 langues × 2 directions = 108 unités d'évaluation.

Les métriques sont :

  • SacreBLEU BLEU, tokenize=13a ;
  • chrF++, word_order=2.

Pour le score global coverage-aware, une direction non supportée reçoit BLEU = 0 et chrF++ = 0.

Résultats globaux

Système BLEU chrF++ Directions supportées Couverture
Griot-MT 38.11 58.00 36/36 100.00%
NLLB-200 1.3B 16.13 33.53 26/36 72.22%
Google Cloud Translation 15.03 33.97 28/36 77.78%

BLEU global

chrF++ global

Couverture

Griot-MT couvre les 36/36 directions.

NLLB-200 1.3B couvre 26/36 directions.

Google Cloud Translation couvre 28/36 directions.

Couverture


Résultats selon la direction

Griot-MT obtient :

  • 48.01 BLEU / 64.20 chrF++ en langue africaine → français ;
  • 28.20 BLEU / 51.80 chrF++ en français → langue africaine.

BLEU par direction


Qualité sur les directions supportées

Ce tableau retire uniquement la pénalité liée aux directions non supportées.

Système BLEU chrF++ Directions évaluées
Griot-MT 38.11 58.00 36
NLLB-200 1.3B 22.34 46.43 26
Google Cloud Translation 19.33 43.68 28

Comparaison matched-support

Pour éviter qu'un avantage de couverture soit confondu avec un avantage de qualité, Griot-MT est également comparé aux baselines sur exactement les mêmes directions.

Griot-MT vs NLLB-200 1.3B

Sur les 26 directions supportées par NLLB :

Système BLEU chrF++
Griot-MT 40.63 60.41
NLLB-200 1.3B 22.34 46.43

Gain Griot-MT : +18.29 BLEU et +13.98 chrF++.

Griot-MT vs NLLB

Griot-MT vs Google Cloud Translation

Sur les 28 directions supportées par Google Cloud Translation :

Système BLEU chrF++
Griot-MT 39.59 59.58
Google Cloud Translation 19.33 43.68

Gain Griot-MT : +20.26 BLEU et +15.91 chrF++.

Griot-MT vs Google Cloud


Vue par langue

Les graphiques complets par langue et par direction sont disponibles dans benchmarks/visualizations/.

BLEU par langue


Inférence

Installation :

%pip uninstall -y torchao
%pip install -q \
  "transformers==5.16.1" \
  "peft==0.20.0" \
  "accelerate==1.14.0" \
  "sentencepiece==0.2.2" \
  "safetensors>=0.4.3" \
  "huggingface_hub>=0.34.0"
import torch

from transformers import (
    AutoTokenizer,
    AutoModelForSeq2SeqLM,
)

from peft import PeftModel


MODEL_ID = "bivariant/griot-mt"

LANGUAGE_TOKENS = {
    "bba": "bba_Latn",
    "bci": "bci_Latn",
    "dyu": "dyu_Latn",
    "ewe": "ewe_Latn",
    "ewo": "ewo_Latn",
    "fon": "fon_Latn",
    "fub": "fub_Latn",
    "hau": "hau_Latn",
    "lin": "lin_Latn",
    "lug": "lug_Latn",
    "mos": "mos_Latn",
    "mwm": "mwm_Latn",
    "orm": "gaz_Latn",
    "sag": "sag_Latn",
    "sna": "sna_Latn",
    "som": "som_Latn",
    "swh": "swh_Latn",
    "wol": "wol_Latn",
}

FRENCH_TOKEN = "fra_Latn"

device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32

language = "fon"

tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)

base_model = (
    AutoModelForSeq2SeqLM
    .from_pretrained(
        MODEL_ID,
        torch_dtype=dtype,
    )
    .to(device)
)

model = PeftModel.from_pretrained(
    base_model,
    MODEL_ID,
    subfolder=f"adapters/{language}",
)

model.eval()


def translate(
    text,
    source_token,
    target_token,
):
    tokenizer.src_lang = source_token

    inputs = tokenizer(
        text,
        return_tensors="pt",
        truncation=True,
    ).to(device)

    with torch.inference_mode():
        output_ids = model.generate(
            **inputs,
            forced_bos_token_id=(
                tokenizer.convert_tokens_to_ids(
                    target_token
                )
            ),
            num_beams=4,
            max_length=257,
            repetition_penalty=1.3,
            no_repeat_ngram_size=3,
        )

    return tokenizer.decode(
        output_ids[0],
        skip_special_tokens=True,
    )


# Français -> Fon
print(
    translate(
        "Bonjour, comment allez-vous ?",
        FRENCH_TOKEN,
        LANGUAGE_TOKENS["fon"],
    )
)

# Fon -> Français
print(
    translate(
        "Wɛzɔ.",
        LANGUAGE_TOKENS["fon"],
        FRENCH_TOKEN,
    )
)

Tokens de langue

Le français utilise fra_Latn.

Pour Oromo, Griot-MT utilise gaz_Latn.

Les autres langues utilisent leurs tokens Griot correspondants dans la release.


Décodage de référence

Les résultats publiés utilisent les paramètres suivants :

num_beams=4
max_length=257
repetition_penalty=1.3
no_repeat_ngram_size=3

Ces valeurs correspondent au protocole d'évaluation de référence et ne constituent pas une obligation pour tous les usages.


Interprétation des résultats

Les scores présentés sont spécifiques aux jeux de test utilisés dans cette évaluation.

Les performances peuvent varier selon :

  • le domaine ;
  • le dialecte ;
  • les conventions orthographiques ;
  • le code-switching ;
  • la terminologie spécialisée.

Les scores coverage-aware et matched-support répondent à deux questions différentes :

  • coverage-aware : quelle est la performance sur tout le portefeuille linguistique ciblé ?
  • matched-support : quelle est la qualité lorsque les deux systèmes supportent exactement les mêmes directions ?

Ressources


Griot — Open Multilingual Intelligence for African Languages.

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

Space using bivariant/Griot-MT-1.3B-ALL 1