Token Classification
Transformers
Safetensors
French
camembert
named-entity-recognition
french
distillation
fp16
medical
social-work
ner
Eval Results (legacy)
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", device_map="auto") - Notebooks
- Google Colab
- Kaggle
docs: add badges, widget examples, legal disclaimer — production-ready model card
Browse files
README.md
CHANGED
|
@@ -16,6 +16,10 @@ tags:
|
|
| 16 |
- ner
|
| 17 |
library_name: transformers
|
| 18 |
base_model: jmdanto/titibongbong_camemBERT_NER
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
model-index:
|
| 20 |
- name: titibongbong v2 — 9L distilled NER for French medical-social documents
|
| 21 |
results:
|
|
@@ -23,7 +27,7 @@ model-index:
|
|
| 23 |
type: token-classification
|
| 24 |
name: Named Entity Recognition
|
| 25 |
dataset:
|
| 26 |
-
name: LaPlume Gold Standard (
|
| 27 |
type: custom
|
| 28 |
metrics:
|
| 29 |
- name: F1 (pipeline global)
|
|
@@ -58,13 +62,20 @@ datasets:
|
|
| 58 |
- custom-medical-social-corpus
|
| 59 |
---
|
| 60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
# titibongbong v2 — CamemBERT-NER 9L distillé
|
| 62 |
|
| 63 |
-
**Distilled from [titibongbong v1](https://huggingface.co/jmdanto/titibongbong_camemBERT_NER) (11L) → 9 layers.**
|
|
|
|
|
|
|
| 64 |
|
| 65 |
-
|
| 66 |
|
| 67 |
-
|
| 68 |
|
| 69 |
| Métrique | titibongbong v1 (11L) | **titibongbong v2 (9L)** | Δ |
|
| 70 |
| ---------- | --------------------- | ------------------------ | ---------- |
|
|
@@ -76,27 +87,27 @@ Modèle de reconnaissance d'entités nommées (NER) optimisé pour les documents
|
|
| 76 |
| F1 ELEV | 96.1% | **96.4%** | +0.3 pt ✅ |
|
| 77 |
| F1 MOY | 94.8% | **95.5%** | +0.7 pt ✅ |
|
| 78 |
|
| 79 |
-
|
| 80 |
|
| 81 |
## 🏗️ Architecture
|
| 82 |
|
| 83 |
-
| Propriété | Valeur
|
| 84 |
-
| ----------------- | ---------------------------------------------------- |
|
| 85 |
-
| **Base** | CamemBERT (RoBERTa français)
|
| 86 |
-
| **Couches** | **9** (vs 12 pour
|
| 87 |
-
| **Paramètres** | **88.8M**
|
| 88 |
-
| **Taille (FP16)** | **169 MB** (vs 393 MB FP32 v1, 420 MB teacher)
|
| 89 |
-
| **Labels** | 5 classes : `O`, `I-LOC`, `I-PER`, `I-MISC`, `I-ORG`
|
| 90 |
-
| **Précision** | FP16 (half precision)
|
| 91 |
-
| **Tokenization** | SentencePiece 32K vocab
|
| 92 |
-
| **Max sequence** | 512 tokens
|
| 93 |
|
| 94 |
## 🔬 Méthode de distillation
|
| 95 |
|
| 96 |
- **Teacher** : `jmdanto/titibongbong_camemBERT_NER` (11 couches)
|
| 97 |
- **Student** : copie du teacher avec retrait des couches 5 et 6
|
| 98 |
-
- **Loss** : 0.5·CrossEntropy + 0.5·KL divergence (T=4),
|
| 99 |
-
- **Corpus** : 1.28M tokens (670 chunks de rapports médico-sociaux + romans
|
| 100 |
- **Hardware** : RunPod A100 80GB, bf16, 8 epochs, batch size 32
|
| 101 |
- **Framework** : PyTorch 2.x + HuggingFace Transformers 4.57
|
| 102 |
|
|
@@ -111,30 +122,34 @@ tokenizer = AutoTokenizer.from_pretrained("jmdanto/titibongbong_9L_v2")
|
|
| 111 |
ner = pipeline("token-classification", model=model, tokenizer=tokenizer,
|
| 112 |
aggregation_strategy="simple")
|
| 113 |
|
| 114 |
-
|
|
|
|
| 115 |
results = ner(text)
|
| 116 |
-
|
| 117 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
```
|
| 119 |
|
| 120 |
-
## ⚡ Performance
|
| 121 |
|
| 122 |
-
Mesuré
|
| 123 |
|
| 124 |
-
| Plateforme | Temps NER
|
| 125 |
-
| --------------------------------- | ------------------------ |
|
| 126 |
-
| Apple M3 Max (16 cœurs) | 0.044s
|
| 127 |
-
| PC standard (i5, 8 Go, 4 threads) | ~0.09s (estimé)
|
| 128 |
|
| 129 |
-
Le gain principal de v2
|
| 130 |
-
</replace_in_file>
|
| 131 |
|
| 132 |
## 🏥 Domaine d'application
|
| 133 |
|
| 134 |
Entraîné et évalué sur un corpus varié de documents du secteur social et médico-social français :
|
| 135 |
|
| 136 |
- Rapports éducatifs et notes sociales
|
| 137 |
-
- Courriers institutionnels (MDPH, CAF, ASE)
|
| 138 |
- Signalisements et informations préoccupantes
|
| 139 |
- Projets personnalisés et contrats de séjour
|
| 140 |
- Rapports de gestion budgétaire
|
|
@@ -142,10 +157,10 @@ Entraîné et évalué sur un corpus varié de documents du secteur social et m
|
|
| 142 |
|
| 143 |
## 📁 Versions
|
| 144 |
|
| 145 |
-
| Version | Couches
|
| 146 |
-
| ------- | ------------------ | --------------- | --------- | --------------------------------------------------------------------------------------- |
|
| 147 |
-
| v1 |
|
| 148 |
-
| **v2** | **
|
| 149 |
|
| 150 |
## ⚠️ Limitations
|
| 151 |
|
|
@@ -153,7 +168,7 @@ Entraîné et évalué sur un corpus varié de documents du secteur social et m
|
|
| 153 |
- Domaine médico-social → peut ne pas généraliser à d'autres domaines (juridique, littéraire général)
|
| 154 |
- Labels I-\* uniquement (pas de distinction B-/I-) comme le teacher Jean-Baptiste
|
| 155 |
- Classe MISC conservée pour compatibilité mais peu utilisée dans le pipeline cible
|
| 156 |
-
- **
|
| 157 |
|
| 158 |
## ⚖️ Cadre réglementaire et positionnement
|
| 159 |
|
|
@@ -166,11 +181,11 @@ LaPlume adopte une logique de pseudonymisation dense, conçue précisément pour
|
|
| 166 |
**Deux usages cibles, une même exigence :**
|
| 167 |
|
| 168 |
- **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.
|
| 169 |
-
- **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
|
| 170 |
|
| 171 |
**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.
|
| 172 |
|
| 173 |
-
Une évaluation avec deux
|
| 174 |
|
| 175 |
## 📜 Citation
|
| 176 |
|
|
|
|
| 16 |
- ner
|
| 17 |
library_name: transformers
|
| 18 |
base_model: jmdanto/titibongbong_camemBERT_NER
|
| 19 |
+
widget:
|
| 20 |
+
- text: "Madame Sophie BERNARD, née le 12/05/1978, est suivie par le CCAS de Lille et la MDPH du Nord."
|
| 21 |
+
- text: "EHPAD Les Jardins du Lac, 45 avenue du Général De Gaulle 74000 Annecy. Dossier 74012-8C31."
|
| 22 |
+
- text: "Le Dr Jean-Marc PETIT, médecin coordinateur au CMPP René Zazzo de Bordeaux, a reçu Mme DURAND le 15 juin."
|
| 23 |
model-index:
|
| 24 |
- name: titibongbong v2 — 9L distilled NER for French medical-social documents
|
| 25 |
results:
|
|
|
|
| 27 |
type: token-classification
|
| 28 |
name: Named Entity Recognition
|
| 29 |
dataset:
|
| 30 |
+
name: LaPlume Gold Standard (9 rapports médico-sociaux, 975 entités)
|
| 31 |
type: custom
|
| 32 |
metrics:
|
| 33 |
- name: F1 (pipeline global)
|
|
|
|
| 62 |
- custom-medical-social-corpus
|
| 63 |
---
|
| 64 |
|
| 65 |
+
[](https://opensource.org/licenses/MIT)
|
| 66 |
+
[](https://huggingface.co/jmdanto/titibongbong_9L_v2)
|
| 67 |
+
[](https://python.org)
|
| 68 |
+
[](https://github.com/huggingface/transformers)
|
| 69 |
+
|
| 70 |
# titibongbong v2 — CamemBERT-NER 9L distillé
|
| 71 |
|
| 72 |
+
**Distilled from [titibongbong v1](https://huggingface.co/jmdanto/titibongbong_camemBERT_NER) (11L) → 9 layers | 169 MB FP16 | 5 classes NER.**
|
| 73 |
+
|
| 74 |
+
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.
|
| 75 |
|
| 76 |
+
## 📊 Résultats (pipeline hybride LaPlume)
|
| 77 |
|
| 78 |
+
É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.
|
| 79 |
|
| 80 |
| Métrique | titibongbong v1 (11L) | **titibongbong v2 (9L)** | Δ |
|
| 81 |
| ---------- | --------------------- | ------------------------ | ---------- |
|
|
|
|
| 87 |
| F1 ELEV | 96.1% | **96.4%** | +0.3 pt ✅ |
|
| 88 |
| F1 MOY | 94.8% | **95.5%** | +0.7 pt ✅ |
|
| 89 |
|
| 90 |
+
_Métriques excluant la catégorie FAIB (entités à faible risque de réidentification)._
|
| 91 |
|
| 92 |
## 🏗️ Architecture
|
| 93 |
|
| 94 |
+
| Propriété | Valeur |
|
| 95 |
+
| ----------------- | ----------------------------------------------------- |
|
| 96 |
+
| **Base** | CamemBERT (RoBERTa français) |
|
| 97 |
+
| **Couches** | **9** (vs 12 pour Jean-Baptiste originel, 11 pour v1) |
|
| 98 |
+
| **Paramètres** | **88.8M** |
|
| 99 |
+
| **Taille (FP16)** | **169 MB** (vs 393 MB FP32 v1, 420 MB teacher 12L) |
|
| 100 |
+
| **Labels** | 5 classes : `O`, `I-LOC`, `I-PER`, `I-MISC`, `I-ORG` |
|
| 101 |
+
| **Précision** | FP16 (half precision) |
|
| 102 |
+
| **Tokenization** | SentencePiece 32K vocab |
|
| 103 |
+
| **Max sequence** | 512 tokens |
|
| 104 |
|
| 105 |
## 🔬 Méthode de distillation
|
| 106 |
|
| 107 |
- **Teacher** : `jmdanto/titibongbong_camemBERT_NER` (11 couches)
|
| 108 |
- **Student** : copie du teacher avec retrait des couches 5 et 6
|
| 109 |
+
- **Loss** : 0.5·CrossEntropy + 0.5·KL divergence (T=4), pas de CRF
|
| 110 |
+
- **Corpus** : 1.28M tokens (670 chunks de rapports médico-sociaux + romans Zola/Maupassant pour robustesse)
|
| 111 |
- **Hardware** : RunPod A100 80GB, bf16, 8 epochs, batch size 32
|
| 112 |
- **Framework** : PyTorch 2.x + HuggingFace Transformers 4.57
|
| 113 |
|
|
|
|
| 122 |
ner = pipeline("token-classification", model=model, tokenizer=tokenizer,
|
| 123 |
aggregation_strategy="simple")
|
| 124 |
|
| 125 |
+
# Exemple réel — rapport médico-social
|
| 126 |
+
text = "Madame Sophie BERNARD, née le 12/05/1978, est suivie par le CCAS de Lille."
|
| 127 |
results = ner(text)
|
| 128 |
+
|
| 129 |
+
for ent in results:
|
| 130 |
+
print(f"{ent['entity_group']:>6}: {ent['word']}")
|
| 131 |
+
|
| 132 |
+
# PER: Madame Sophie BERNARD
|
| 133 |
+
# ORG: CCAS de Lille
|
| 134 |
```
|
| 135 |
|
| 136 |
+
## ⚡ Performance inférence
|
| 137 |
|
| 138 |
+
Mesuré avec `torch.compile` (`reduce-overhead`), texte ~1200 caractères.
|
| 139 |
|
| 140 |
+
| Plateforme | Temps NER (9L FP16) | Gain vs v1 (11L FP32) |
|
| 141 |
+
| --------------------------------- | ------------------- | --------------------- |
|
| 142 |
+
| Apple M3 Max (16 cœurs) | 0.044s | ×1.0 (vitesse) |
|
| 143 |
+
| PC standard (i5, 8 Go, 4 threads) | ~0.09s (estimé) | ×1.2 (vitesse) |
|
| 144 |
|
| 145 |
+
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).
|
|
|
|
| 146 |
|
| 147 |
## 🏥 Domaine d'application
|
| 148 |
|
| 149 |
Entraîné et évalué sur un corpus varié de documents du secteur social et médico-social français :
|
| 150 |
|
| 151 |
- Rapports éducatifs et notes sociales
|
| 152 |
+
- Courriers institutionnels (MDPH, CAF, ASE, PJJ)
|
| 153 |
- Signalisements et informations préoccupantes
|
| 154 |
- Projets personnalisés et contrats de séjour
|
| 155 |
- Rapports de gestion budgétaire
|
|
|
|
| 157 |
|
| 158 |
## 📁 Versions
|
| 159 |
|
| 160 |
+
| Version | Méthode | Couches | Taille | F1 | HuggingFace |
|
| 161 |
+
| ------- | ------------------- | ------- | --------------- | --------- | --------------------------------------------------------------------------------------- |
|
| 162 |
+
| v1 | Fine-tune + pruning | 11L | 393 MB FP32 | 86.4% | [titibongbong_camemBERT_NER](https://huggingface.co/jmdanto/titibongbong_camemBERT_NER) |
|
| 163 |
+
| **v2** | **Distillation** | **9L** | **169 MB FP16** | **86.8%** | Ce modèle |
|
| 164 |
|
| 165 |
## ⚠️ Limitations
|
| 166 |
|
|
|
|
| 168 |
- Domaine médico-social → peut ne pas généraliser à d'autres domaines (juridique, littéraire général)
|
| 169 |
- Labels I-\* uniquement (pas de distinction B-/I-) comme le teacher Jean-Baptiste
|
| 170 |
- Classe MISC conservée pour compatibilité mais peu utilisée dans le pipeline cible
|
| 171 |
+
- **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.
|
| 172 |
|
| 173 |
## ⚖️ Cadre réglementaire et positionnement
|
| 174 |
|
|
|
|
| 181 |
**Deux usages cibles, une même exigence :**
|
| 182 |
|
| 183 |
- **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.
|
| 184 |
+
- **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.
|
| 185 |
|
| 186 |
**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.
|
| 187 |
|
| 188 |
+
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.
|
| 189 |
|
| 190 |
## 📜 Citation
|
| 191 |
|