NER Juridique Tunisien (FR + AR) — v2

Modèle de Reconnaissance d'Entités Nommées spécialisé pour les documents juridiques tunisiens bilingues (français + arabe). Fine-tuné depuis xlm-roberta-base sur un corpus FAKC (Ferchiou & Associés Knowledge Center) de ~9 500 chunks annotés.

Entités reconnues (14)

Tag Description Exemples
PER Personne Mohamed Ghannouchi, محمد الغنوشي
ORG Organisation / institution Ministère des Finances, وزارة التربية
LOC Lieu Tunis, القيروان
DATE Date 23 février 2011, 16 جويلية 2011
MONEY Montant 50.000 dinars, عشرة آلاف دينار
REF_LOI Référence à une loi loi n° 2021-34 du 19 juillet 2021, قانون عدد 18 لسنة 1963
REF_DECR Référence à un décret décret n° 2010-3152 du 1er décembre 2010, الأمر عدد 38 لسنة 2011
REF_ART Référence à un article article premier, الفصل الأول
REF_JORT Journal Officiel Journal Officiel de la République Tunisienne, الرائد الرسمي للجمهورية التونسية
TRIBUNAL Juridiction Tribunal de Première Instance de Tunis, محكمة التعقيب
NUM_AFF Numéro d'affaire 2024-1547
PARTIE Partie au litige la société demanderesse
CLAUSE Clause contractuelle clause de non-concurrence
STATUT Statut juridique SARL, شركة محدودة المسؤولية

Performances

  • F1 (bronze test set) : 98.25%
  • Précision vs rule annotator (20 docs réels OOD) : 92.6%
  • Recall vs rule annotator (20 docs réels OOD) : 93.4%
  • Évalué sur 264 docs FR + 153 docs AR extraits du corpus FAKC

Le modèle généralise au-delà des règles : il trouve par exemple décret gouvernemental n° 2020-210 que les patterns regex n'attrapent pas.

Utilisation

from transformers import AutoTokenizer, AutoModelForTokenClassification
import torch

model_id = "maloukafer/ner-juridique-tunisien-v2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForTokenClassification.from_pretrained(model_id)

text = "Vu la loi n° 2021-34 du 19 juillet 2021, le Tribunal de Première Instance de Tunis..."

inputs = tokenizer(text, return_tensors="pt", return_offsets_mapping=True)
offsets = inputs.pop("offset_mapping")[0].tolist()

with torch.no_grad():
    logits = model(**inputs).logits[0]

pred_ids = logits.argmax(-1).tolist()
labels = [model.config.id2label[p] for p in pred_ids]

for tok, lbl, (s, e) in zip(tokenizer.convert_ids_to_tokens(inputs["input_ids"][0]), labels, offsets):
    if lbl != "O" and s != e:
        print(f"{text[s:e]:30s}{lbl}")

Pour une inférence production-ready (sliding window long doc, alignement subword→caractère, strip ponctuation, support FR+AR), voir le NERPipeline du dépôt source.

Détails d'entraînement

  • Base : xlm-roberta-base (277M params)
  • Données : 9 472 chunks bronze rule-annotés à partir de 422 documents FAKC réels (PDF natifs + scannés OCR Tesseract)
  • Tagging : IOB2, 29 labels
  • Hyperparamètres : lr=2e-5, batch=16, epochs=10, max_length=256
  • Hardware : 1× GPU CUDA, ~43 min
  • Langue : ~60% français, ~40% arabe

Limitations

  • Bronze (rule-annotated) : le modèle apprend largement les patterns regex de l'annotateur ; les boundaries et certaines entités rares peuvent être imparfaites.
  • Pour ORG / PER complexes (noms multi-mots ambigus), le rappel est plus faible.
  • Phase suivante prévue : 500 chunks human-reviewed (Label Studio) → silver dataset → re-fine-tuning visant >95% F1 réel.

Crédits

Développé pour Ferchiou & Associés (cabinet d'avocats, Tunis) dans le cadre d'une plateforme IA juridique on-premise.

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

Model tree for maloukafer/ner-juridique-tunisien-v2

Finetuned
(3912)
this model