Sôtêr mini — lemmatiseur de grec ancien, 1,9 M de paramètres

1 871 000 paramètres. 2,1 Mo en int8. Assez petit pour se charger instantanément dans un navigateur, et pourtant au niveau des lemmatiseurs de l'état de l'art sur les treebanks UD grec ancien.

Architecture T5 entraînée from scratch (aucun poids ByT5 repris) : encodeur/décodeur 3+3 couches, d_model 128, d_ff 512, 4 têtes. Entrée au niveau de l'octet, vocabulaire de 387 — donc aucun problème de segmentation, d'OOV, ni de graphie inhabituelle.

Démo : https://lucpommeret.com/soter/ · Grand frère 60× plus gros : Zual/soter-megas

Usage

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tok = AutoTokenizer.from_pretrained("Zual/soter-mini")
model = AutoModelForSeq2SeqLM.from_pretrained("Zual/soter-mini")

def build_input(formes, i, ctx=8):
    lo, hi = max(0, i - ctx), min(len(formes), i + 1 + ctx)
    return (f"{' '.join(formes[i])} <sep> {' '.join(formes[lo:i])} "
            f"<tgt> {formes[i]} </tgt> {' '.join(formes[i+1:hi])}").strip()

formes = "Ἀλέξανδρος ἐγένετο βασιλεύς".split()
enc = tok(build_input(formes, 1), return_tensors="pt")
print(tok.decode(model.generate(**enc, max_length=48)[0], skip_special_tokens=True))
# γίγνομαι

La forme cible est épelée lettre à lettre en tête, puis vient un contexte de ±8 mots avec la cible balisée. Le texte doit être en NFC : le modèle travaille sur les octets, et du NFD (accents décomposés, fréquent au copier-coller depuis macOS ou un PDF) produit du charabia.

Exports ONNX dans onnx/, fp32 et int8. La quantification int8 est gratuite ici : 0,01 point d'écart sur les benchmarks.

Une seule convention, et des tables pour les autres

Contrairement aux versions précédentes, ce modèle n'a pas de tag de treebank en entrée. Il produit toujours la convention Perseus/AGDT, celle qui s'aligne sur les vedettes du LSJ — donc celle qu'attend quelqu'un qui lemmatise pour consulter un dictionnaire.

Les conventions PROIEL et PTNK sont restituées après coup par une table de correspondance, fournie dans tables/. Clé "forme\tlemme_perseus", valeur : le lemme de la convention cible.

import json
conv = {tuple(k.split("\t")): v for k, v in json.load(open("tables/proiel.json")).items()}
lemme_proiel = conv.get((forme, lemme_perseus), lemme_perseus)

Ce découpage est délibéré et mesuré. Les conventions de lemmatisation sont des décisions arbitraires — PROIEL lemmatise εἶπεν en λέγω et ὑμῖν en ὑμεῖς, Perseus en εἶπον et σύ — qu'un modèle de 1,9 M n'a aucune raison de mémoriser. Externalisées, elles deviennent auditables et corrigeables, et la capacité du modèle va à la lemmatisation elle-même. Les tables couvrent 3 521 conversions pour PROIEL et 366 pour PTNK ; elles sont apprises sur les trains UD uniquement, jamais sur dev ni test.

Mesure de l'apport : à taille et budget égaux, l'entraînement mono-convention gagne +2,7 à +2,9 points sur PROIEL par rapport au même modèle entraîné avec les trois conventions et un tag, pour un effet nul ailleurs.

Résultats

Tests UD complets (conll18_ud_eval, colonne Lemmas, segmentation gold, NFC)

PROIEL Perseus PTNK
Sôtêr mini (1,9 M) 97.41 ¹ 92.75 98.59 ¹
Sôtêr 9,6 M (multi-convention) 94.43 93.06 98.18
Sōtēr Megas (581 M) 96.99 92.91 98.40
meilleur publié 97.48 (GreTa+Chars, R&F ACL 2023) 91.14 (idem)

¹ après application de la table de conversion fournie. Sans elle, la sortie est en convention Perseus et vaut 92.06 sur PROIEL et 94.64 sur PTNK — ces colonnes évaluent la convention cible, pas la qualité de lemmatisation.

Perseus : +1,61 sur le meilleur publié. PROIEL : 97.41 contre 97.48, une égalité. Avec 1,9 M de paramètres contre les centaines de millions des systèmes comparés.

DBBE — grec byzantin non édité, zéro-shot (Swaelens et al., 10k tokens)

exact = 79.28   (sans diacritiques 83.89)

Références : MTL_lemma (SOTA supervisé sur ce domaine, ACL Findings 2025) 79.31 · CLTK back-off 71.69 · GLEM 70.82 · Stanza 64.99.

79.28 contre 79.31 : égalité, à trois centièmes sur 9 982 tokens, pour une erreur-type binomiale de 0,41. La formulation défendable est égale un SOTA supervisé sur ce domaine, en zéro-shot, avec 1,9 M de paramètres — pas « dépasse ».

Entraînement

Distillation en deux étages : un LLM généraliste (DeepSeek V4-Flash, few-shot 128-512 exemples, sortie TSV contrainte, T=0) annote les treebanks UD ; un ByT5-base est distillé dessus (Sōtēr Megas) ; ce ByT5 réannote un corpus large, sur lequel ce modèle est entraîné.

  • 49 379 934 exemples (1 exemple = 1 token à lemmatiser), 8,3 milliards de sous-tokens par epoch, tous en convention Perseus.
  • 150 000 steps, batch effectif 512, Adafactor, LR 1e-3 avec warmup 5 % puis décroissance linéaire jusqu'à zéro. Le recuit compte : il apporte +0,3 de score composite (t = 7,8 sur blocs pré-déclarés), et l'essentiel arrive quand le LR passe sous 60 % du pic.
  • Contexte ±8 mots, entrées ≤ 384 octets.

Limites

  • PROIEL et PTNK exigent la table. Sans elle, la sortie reste correcte mais dans une autre convention que celle attendue par ces treebanks.
  • Les treebanks UD grc sont publics et ont pu être vus au pré-entraînement des LLM annotateurs. Les phrases de dev et test ont été retirées du corpus d'entraînement, mais le NT existe en plusieurs éditions et l'exclusion exacte ne suffit pas toujours.
  • Le protocole DBBE reconstruit les frontières de phrases par coupe sur la ponctuation forte ; à vérifier contre celui de Swaelens et al. avant toute comparaison fine.
  • Les évaluations internes du projet utilisent aussi un « gold corrigé » qui n'est pas publiable en l'état : l'adjudication n'y porte que sur les divergences d'un seul système, ce qui l'avantage. Tous les chiffres ci-dessus sont sur gold brut.

Données et licences

Annotations produites par DeepSeek V4-Flash sur les trains UD grc et un échantillon de GLAUx/Diorisis. Corpus sources en CC BY-SA / CC BY ; treebanks UD grc (CC BY-NC-SA) utilisés pour l'évaluation uniquement. Poids sous Apache 2.0.

Citation

Article en préparation. Auteur : Luc Pommeret (LISN/CNRS).

Downloads last month
-
Safetensors
Model size
1.87M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support