Instructions to use jmdanto/titibongbong_9L_v2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use jmdanto/titibongbong_9L_v2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="jmdanto/titibongbong_9L_v2")# Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("jmdanto/titibongbong_9L_v2") model = AutoModelForTokenClassification.from_pretrained("jmdanto/titibongbong_9L_v2") - Notebooks
- Google Colab
- Kaggle
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.
- Code source : github.com/confidensia-lab
- Teacher v1 : titibongbong_camemBERT_NER
- Teacher originel : Jean-Baptiste/camembert-ner
- Downloads last month
- 25
Model tree for jmdanto/titibongbong_9L_v2
Base model
Jean-Baptiste/camembert-nerEvaluation results
- F1 (pipeline global) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.868
- F1 weighted (CRIT+ELEV+MOY) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.898
- Precision on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.832
- Recall on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.908
- F1 CRIT (direct identifiers) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.955
- F1 ELEV (high risk) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.964
- F1 MOY (moderate risk) on LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)self-reported0.955