jmdanto commited on
Commit
adc2f4a
·
verified ·
1 Parent(s): 34978e4

docs: add badges, widget examples, legal disclaimer — production-ready model card

Browse files
Files changed (1) hide show
  1. README.md +51 -36
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 (medical-social)
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
- 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é.
66
 
67
- ## 📊 Métriques (gold standard LaPlume)
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
- Évalué sur 975 entités annotées manuellement (9 rapports médico-sociaux complets), via le pipeline hybride LaPlume (NER + règles regex + gazetteers Aho-Corasick). Les métriques excluent la catégorie FAIB (entités à faible risque de réidentification).
80
 
81
  ## 🏗️ Architecture
82
 
83
- | Propriété | Valeur |
84
- | ----------------- | ---------------------------------------------------- |
85
- | **Base** | CamemBERT (RoBERTa français) |
86
- | **Couches** | **9** (vs 12 pour le teacher originel, 11 pour v1) |
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), sans CRF
99
- - **Corpus** : 1.28M tokens (670 chunks de rapports médico-sociaux + romans français)
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
- text = "Jean Dupont, le 15/03/1985, réside au 12 rue des Lilas à Paris."
 
115
  results = ner(text)
116
- # [{'entity_group': 'PER', 'word': 'Jean Dupont', ...},
117
- # {'entity_group': 'LOC', 'word': 'Paris', ...}]
 
 
 
 
118
  ```
119
 
120
- ## ⚡ Performance
121
 
122
- Mesuré sur le pipeline LaPlume complet (NER + règles + gazetteers Aho-Corasick), texte ~1200 caractères.
123
 
124
- | Plateforme | Temps NER seul (9L FP16) |
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 par rapport à v1 est la **taille mémoire** (169 MB FP16 vs 393 MB FP32) et le 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 car le goulot d'étranglement du pipeline n'est pas le NER mais les gazetteers.
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 | Taille | F1 | HuggingFace |
146
- | ------- | ------------------ | --------------- | --------- | --------------------------------------------------------------------------------------- |
147
- | v1 | 11L (1 pruned) | 393 MB FP32 | 86.4% | [titibongbong_camemBERT_NER](https://huggingface.co/jmdanto/titibongbong_camemBERT_NER) |
148
- | **v2** | **9L (distilled)** | **169 MB FP16** | **86.8%** | Ce modèle |
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
- - **Granularité des labels** : 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** (identifiants directs, indirects, contextuels) — la granularité fine est obtenue par règles regex, gazetteers et post-traitement, pas par le NER seul.
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 (noms d'établissements remplacés par leurs types, dates décalées mais conservées comme marqueurs temporels relatifs, etc.).
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 annotateurs indépendants sur 20 rapports (~3 000 entités) est en cours et fera l'objet d'une publication dédiée.
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
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
66
+ [![Model size](https://img.shields.io/badge/Size-169%20MB-blue)](https://huggingface.co/jmdanto/titibongbong_9L_v2)
67
+ [![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://python.org)
68
+ [![Transformers](https://img.shields.io/badge/Transformers-4.57+-orange.svg)](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