License: MIT Model size Python Transformers

titibongbong v2 — CamemBERT-NER 9L distillé

Distilled from titibongbong v1 (11L) → 9 layers | 169 MB FP16 | 5 classes NER.

Modèle de reconnaissance d'entités nommées (NER) optimisé pour les documents médico-sociaux français, avec un accent sur la pseudonymisation (RGPD). Version 9 couches obtenue par distillation avec KL divergence + cross-entropy, sans perte de qualité par rapport au teacher 11 couches.

📊 Résultats (pipeline hybride LaPlume)

Évalué sur 9 rapports médico-sociaux complets annotés manuellement (975 entités) via le pipeline complet : NER → règles regex → gazetteers Aho-Corasick → conflict resolver.

Métrique titibongbong v1 (11L) titibongbong v2 (9L) Δ
F1 Global 86.4% 86.8% +0.4 pt ✅
F1 Pondéré 89.6% 89.8% +0.2 pt ✅
Précision 83.2% 83.2%
Rappel 90.0% 90.8% +0.8 pt ✅
F1 CRIT 95.5% 95.5%
F1 ELEV 96.1% 96.4% +0.3 pt ✅
F1 MOY 94.8% 95.5% +0.7 pt ✅

Métriques excluant la catégorie FAIB (entités à faible risque de réidentification).

🏗️ Architecture

Propriété Valeur
Base CamemBERT (RoBERTa français)
Couches 9 (vs 12 pour Jean-Baptiste originel, 11 pour v1)
Paramètres 88.8M
Taille (FP16) 169 MB (vs 393 MB FP32 v1, 420 MB teacher 12L)
Labels 5 classes : O, I-LOC, I-PER, I-MISC, I-ORG
Précision FP16 (half precision)
Tokenization SentencePiece 32K vocab
Max sequence 512 tokens

🔬 Méthode de distillation

  • Teacher : jmdanto/titibongbong_camemBERT_NER (11 couches)
  • Student : copie du teacher avec retrait des couches 5 et 6
  • Loss : 0.5·CrossEntropy + 0.5·KL divergence (T=4), pas de CRF
  • Corpus : 1.28M tokens (670 chunks de rapports médico-sociaux + romans Zola/Maupassant pour robustesse)
  • Hardware : RunPod A100 80GB, bf16, 8 epochs, batch size 32
  • Framework : PyTorch 2.x + HuggingFace Transformers 4.57

🚀 Utilisation

from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline

model = AutoModelForTokenClassification.from_pretrained("jmdanto/titibongbong_9L_v2")
tokenizer = AutoTokenizer.from_pretrained("jmdanto/titibongbong_9L_v2")

ner = pipeline("token-classification", model=model, tokenizer=tokenizer,
               aggregation_strategy="simple")

# Exemple réel — rapport médico-social
text = "Madame Sophie BERNARD, née le 12/05/1978, est suivie par le CCAS de Lille."
results = ner(text)

for ent in results:
    print(f"{ent['entity_group']:>6}: {ent['word']}")

#    PER: Madame Sophie BERNARD
#    ORG: CCAS de Lille

⚡ Performance inférence

Mesuré avec torch.compile (reduce-overhead), texte ~1200 caractères.

Plateforme Temps NER (9L FP16) Gain vs v1 (11L FP32)
Apple M3 Max (16 cœurs) 0.044s ×1.0 (vitesse)
PC standard (i5, 8 Go, 4 threads) ~0.09s (estimé) ×1.2 (vitesse)

Le gain principal de v2 est la taille mémoire (169 MB FP16 vs 393 MB FP32) et la réduction du nombre de couches (9 vs 11), critique pour le déploiement local sur des machines à RAM limitée (8-16 Go). La vitesse d'inférence CPU est comparable parce que le goulot d'étranglement du pipeline complet n'est pas le NER mais les gazetteers (Aho-Corasick).

🏥 Domaine d'application

Entraîné et évalué sur un corpus varié de documents du secteur social et médico-social français :

  • Rapports éducatifs et notes sociales
  • Courriers institutionnels (MDPH, CAF, ASE, PJJ)
  • Signalisements et informations préoccupantes
  • Projets personnalisés et contrats de séjour
  • Rapports de gestion budgétaire
  • Extraits de romans (Zola, Maupassant) pour robustesse hors-domaine

📁 Versions

Version Méthode Couches Taille F1 HuggingFace
v1 Fine-tune + pruning 11L 393 MB FP32 86.4% titibongbong_camemBERT_NER
v2 Distillation 9L 169 MB FP16 86.8% Ce modèle

⚠️ Limitations

  • Entraîné exclusivement sur du français → performances non garanties sur d'autres langues
  • Domaine médico-social → peut ne pas généraliser à d'autres domaines (juridique, littéraire général)
  • Labels I-* uniquement (pas de distinction B-/I-) comme le teacher Jean-Baptiste
  • Classe MISC conservée pour compatibilité mais peu utilisée dans le pipeline cible
  • Labels vs taxonomie : ce modèle expose 5 labels NER agrégés (O, PER, LOC, ORG, MISC) pour compatibilité avec l'écosystème CamemBERT. Le pipeline LaPlume complet utilise une taxonomie de 101 catégories — la granularité fine est obtenue par règles regex, gazetteers et post-traitement, pas par le NER seul.

⚖️ Cadre réglementaire et positionnement

Le secteur médico-social produit des documents à haute densité de données personnelles : identités, dates, adresses, numéros de dossier, organisations impliquées, parcours de soins. Leur traitement par des LLM externes expose à des risques de réidentification que le cadre juridique actuel appréhende avec une exigence croissante.

La jurisprudence récente est sans ambiguïté : la qualification juridique des données ne dépend pas de la technique utilisée, mais repose uniquement sur l'appréciation objective du risque effectif de réidentification (Conseil d'État, n°498628, 13 février 2026, confirmant CJUE, OC c/ Commission, 7 mars 2024). La pseudonymisation ne saurait être assimilée à une anonymisation, sauf à démontrer concrètement que la réidentification est, en pratique, irréalisable — et la charge de cette démonstration pèse sur le responsable de traitement.

LaPlume adopte une logique de pseudonymisation dense, conçue précisément pour atteindre ce seuil d'irréalisabilité pratique. La taxonomie 101 catégories ne se limite pas aux identifiants directs (NIR, nom, date de naissance) : elle couvre systématiquement les vecteurs de réidentification indirecte — organisations nommées, établissements, services, dates et heures, codes et références institutionnelles. Même sans identification directe, la possibilité de réidentification indirecte suffit à qualifier les informations de données personnelles de santé : c'est exactement ce risque que la profondeur de la taxonomie vise à neutraliser.

Deux usages cibles, une même exigence :

  • Sas LLM : les documents sont pseudonymisés localement avant tout appel à un modèle externe (Anthropic, Gemini…), traités avec des tokens typés, puis dépseudonymisés localement. Aucune donnée nominative ne transite vers l'infrastructure tierce.
  • Sas RAG : avant indexation dans une base vectorielle, les documents sont pseudonymisés pour constituer une mémoire vivante des pratiques professionnelles et des organisations — comptes rendus, notes sociales, rapports éducatifs. Cette mémoire peut être interrogée, enrichie et maintenue dans le temps sans exposer les personnes concernées, tout en conservant la richesse sémantique et organisationnelle des documents.

Ce que LaPlume ne prétend pas : la pseudonymisation dense reste une mesure de sécurisation, pas une anonymisation au sens juridique. La responsabilité du traitement demeure entière — LaPlume réduit le risque d'exposition, elle ne le supprime pas.

Une évaluation inter-annotateurs avec deux codeurs indépendants sur 20 rapports (~3 000 entités) est en cours et fera l'objet d'une publication dédiée.

📜 Citation

@misc{titibongbong_v2_2026,
  author = {Danto, Patrick},
  title = {titibongbong v2: CamemBERT-NER 9L distillé pour la pseudonymisation de documents médico-sociaux},
  year = {2026},
  publisher = {HuggingFace},
  url = {https://huggingface.co/jmdanto/titibongbong_9L_v2}
}

🔗 Projet LaPlume

Ce modèle est un composant du pipeline LaPlume de pseudonymisation RGPD pour le secteur social et médico-social.

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

Model tree for jmdanto/titibongbong_9L_v2

Finetuned
(1)
this model

Evaluation results

  • F1 (pipeline global) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.868
  • F1 weighted (CRIT+ELEV+MOY) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.898
  • Precision on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.832
  • Recall on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.908
  • F1 CRIT (direct identifiers) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.955
  • F1 ELEV (high risk) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.964
  • F1 MOY (moderate risk) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
    self-reported
    0.955