| ---
|
| language: fr
|
| license: mit
|
| tags:
|
| - token-classification
|
| - named-entity-recognition
|
| - ner
|
| - french
|
| - camembert
|
| - distillation
|
| - pruning
|
| - quantization
|
| - fp16
|
| - social-work
|
| - medical-social
|
| datasets:
|
| - custom
|
| metrics:
|
| - f1
|
| - precision
|
| - recall
|
| model-index:
|
| - name: camembert-ner-distilled-pruned-fp16
|
| results:
|
| - task:
|
| type: token-classification
|
| name: Named Entity Recognition
|
| dataset:
|
| name: Rapports Sociaux FR
|
| type: custom
|
| metrics:
|
| - type: f1
|
| value: 85.9
|
| name: F1 Score
|
| - type: precision
|
| value: 86.1
|
| name: Precision
|
| - type: recall
|
| value: 85.8
|
| name: Recall
|
| ---
|
|
|
| # Model Card: CamemBERT-NER Distilled + Pruned + FP16
|
|
|
| ## Model Details
|
|
|
| ### Model Description
|
|
|
| Modèle CamemBERT optimisé triple pour reconnaissance d'entités nommées (NER) dans rapports sociaux français :
|
| - **Distillation** : 11 couches (de 12 du teacher) = -8.3% paramètres
|
| - **Pruning** : 20% magnitude-based = 15.14% sparsité effective
|
| - **Quantization** : FP16 = -50% taille mémoire
|
|
|
| **Développé par** : Jean-Michel Danto
|
| **Type** : Token Classification (NER)
|
| **Langue** : Français
|
| **License** : Apache 2.0
|
| **Modèle parent** : camembert-base
|
| **Repository** : [laplume](https://github.com/jeanmicheldanto-boop/laplume_test)
|
|
|
| ### Model Sources
|
|
|
| - **Repository** : https://github.com/jeanmicheldanto-boop/laplume_test
|
| - **Teacher Model** : titibongbong/CamemBERT-NER (12 layers, FP16, 210 MB)
|
| - **Base Model** : camembert-base
|
|
|
| ## Uses
|
|
|
| ### Direct Use
|
|
|
| Reconnaissance d'entités nommées dans documents médico-sociaux français (rapports sociaux, dossiers ASE, RSA, handicap).
|
|
|
| ### Downstream Use
|
|
|
| Pipeline de pseudonymisation automatique pour protection de données personnelles dans secteur social.
|
|
|
| ### Out-of-Scope Use
|
|
|
| - Domaines non médico-sociaux (textes génériques, littérature, etc.)
|
| - Langues autres que français
|
| - Tâches autres que NER (classification, QA, etc.)
|
|
|
| ## Bias, Risks, and Limitations
|
|
|
| ### Limitations techniques
|
|
|
| - **Domaine spécialisé** : Entraîné sur rapports sociaux, performances réduites hors domaine
|
| - **Trade-off qualité** : -1.3% F1 vs baseline pour gain taille/vitesse
|
| - **Faux positifs** : +11 FP vs baseline (validation humaine recommandée)
|
| - **Catégories rares** : Performance réduite sur LOC, DATE (peu d'exemples training)
|
|
|
| ### Biais identifiés
|
|
|
| - **Biais géographique** : Meilleure détection des grandes villes françaises
|
| - **Biais nominal** : Meilleure détection prénoms français courants
|
| - **Biais institutionnel** : Focus sur institutions françaises (ASE, CAF, MDPH)
|
|
|
| ### Recommendations
|
|
|
| - ✅ **Validation humaine** pour données sensibles (NIR, identifiants)
|
| - ✅ **Post-traitement** avec règles métier et gazetteers
|
| - ✅ **Monitoring** des faux positifs/négatifs en production
|
| - ⚠️ **Prudence** sur entités rares ou hors vocabulaire
|
|
|
| ## How to Get Started with the Model
|
|
|
| ```python
|
| from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
|
| import torch
|
|
|
| model_name = "jmdanto/titibongbong_camemBERT_NER"
|
| tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| model = AutoModelForTokenClassification.from_pretrained(
|
| model_name,
|
| torch_dtype=torch.float16
|
| )
|
|
|
| # Méthode 1 : Pipeline (recommandé)
|
| ner_pipeline = pipeline(
|
| "ner",
|
| model=model_name,
|
| aggregation_strategy="simple"
|
| )
|
|
|
| text = "Marie Dupont habite à Lyon et travaille au Centre Hospitalier."
|
| entities = ner_pipeline(text)
|
|
|
| for entity in entities:
|
| print(f"{entity['entity_group']}: {entity['word']} (score: {entity['score']:.2f})")
|
|
|
| # Résultat :
|
| # PER: Marie Dupont (score: 0.99)
|
| # LOC: Lyon (score: 0.98)
|
| # ORG: Centre Hospitalier (score: 0.92)
|
|
|
| # Méthode 2 : Inférence directe
|
| inputs = tokenizer(text, return_tensors="pt")
|
| with torch.no_grad():
|
| outputs = model(**inputs)
|
| predictions = torch.argmax(outputs.logits, dim=-1)
|
|
|
| # Les prédictions utilisent le format IOB2 :
|
| # B-PER, I-PER (Person)
|
| # B-LOC, I-LOC (Location)
|
| # B-ORG, I-ORG (Organization)
|
| # B-MISC, I-MISC (Miscellaneous)
|
| # O (Outside)
|
| ```
|
|
|
| ### 🏷️ Entités détectées
|
|
|
| Le modèle reconnaît **4 catégories principales** (format IOB2) :
|
|
|
| | Catégorie | Description | Exemples |
|
| |-----------|-------------|----------|
|
| | **PER** | Personnes | Marie Dupont, M. Bernard |
|
| | **LOC** | Lieux | Paris, Lyon, rue de la Paix |
|
| | **ORG** | Organisations | Hôpital Sainte-Anne, CCAS |
|
| | **MISC** | Divers | dates, événements |
|
|
|
| > **Note** : Pour des catégories fines (39 types comme `ETAB_MECS`, `ID_RSA`, `LOC_CITY`), utiliser le pipeline LaPlume complet avec post-traitement.
|
|
|
| ## Training Details
|
|
|
| ### Training Data
|
|
|
| - **Corpus d'entraînement** : **50 000 phrases** issues de trois sources :
|
| 1. **Contexte médico-social français** :
|
| - Rapports sociaux fictifs mais réalistes (générés pour l'entraînement)
|
| - Rapports publics sur l'organisation médico-sociale et bonnes pratiques
|
| 2. **Narratif littéraire** : Grands romans français du XXe siècle (dialogues, descriptions de personnages et lieux)
|
| 3. **Articles Wikipedia français** : Contenu encyclopédique général pour généralisation
|
| - **Domaines applicatifs** : Aide sociale à l'enfance, RSA, handicap, hébergement, personnes âgées
|
| - **Annotations** : 4 catégories principales (PER, LOC, ORG, MISC) au format IOB2
|
| - **Base model** : Jean-Baptiste/camembert-ner fine-tuné puis distillé
|
|
|
| **Important** : Aucune donnée confidentielle réelle (dossiers ASE/RSA réels) n'a été utilisée. Le corpus médico-social est composé de textes fictifs et de rapports publics uniquement.
|
|
|
| Cette diversité de sources (médico-social + littéraire + encyclopédique) permet au modèle de généraliser efficacement tout en conservant une spécialisation pour le domaine cible.
|
|
|
| > **Note** : Les 39 catégories fines du pipeline LaPlume (ETAB_*, ID_*, LOC_CITY, etc.) sont ajoutées par post-traitement (règles, gazetteers), pas par le modèle NER de base.
|
|
|
| ### Training Procedure
|
|
|
| #### Distillation
|
|
|
| ```
|
| Teacher: camembert-ner (12L, F1 87.3%)
|
| Student: 11 layers
|
| Loss: α * CE + (1-α) * KD
|
| Temperature: 2.0
|
| ```
|
|
|
| #### Pruning
|
|
|
| ```
|
| Method: Magnitude-based iterative
|
| Target: 20% sparsity
|
| Effective: 15.14% (15.6M params zeroed)
|
| Schedule: Progressive pendant distillation
|
| ```
|
|
|
| #### Quantization
|
|
|
| ```
|
| Method: torch.half() conversion
|
| Input: FP32 (392.71 MB)
|
| Output: FP16 (196.36 MB)
|
| Reduction: -50.0%
|
| ```
|
|
|
| #### Preprocessing
|
|
|
| - Tokenization : SentencePiece BPE (32k vocab)
|
| - Max length : 512 tokens
|
| - Padding : dynamic par batch
|
|
|
| #### Training Hyperparameters
|
|
|
| - **Learning rate** : 2e-5 (AdamW)
|
| - **Batch size** : 16
|
| - **Epochs** : 10
|
| - **Warmup** : 10% steps
|
| - **Weight decay** : 0.01
|
| - **Gradient clipping** : 1.0
|
|
|
| #### Speeds, Sizes, Times
|
|
|
| - **Training time** : ~12h (distillation + pruning)
|
| - **Quantization time** : ~2 min
|
| - **Final size** : 196.36 MB (FP16)
|
| - **Inference speed** : ~15-20% plus rapide que baseline
|
| - **Memory usage** : -50% RAM vs FP32
|
|
|
| ## Evaluation
|
|
|
| ### Testing Data, Factors & Metrics
|
|
|
| #### Testing Data
|
|
|
| - **Dataset** : train_original.txt + train_gold.txt
|
| - **Taille** : 447 entités gold standard
|
| - **Distribution** : CRIT (4%), HIGH (39%), MED (45%), LOW (11%)
|
|
|
| #### Metrics
|
|
|
| - F1 Score (macro et weighted)
|
| - Precision / Recall
|
| - Category accuracy
|
| - False positives / Missed entities
|
|
|
| ### Results
|
|
|
| #### Summary (Run 106)
|
|
|
| | Métrique | Score | vs Baseline |
|
| |----------|-------|-------------|
|
| | **F1 Score** | **85.9%** | -1.3% |
|
| | **Precision** | **86.1%** | -2.2% |
|
| | **Recall** | **85.8%** | -0.5% |
|
| | **Weighted Score** | **96.4%** | -0.2% |
|
| | **False Positives** | 64 | +11 |
|
| | **Missed** | 52 | +2 |
|
|
|
| #### Performance par criticité
|
|
|
| | Criticité | Rappel | Précision | F1 |
|
| |-----------|--------|-----------|-----|
|
| | **CRIT** (NIR, identifiants) | 96.8% | 100% | 98.4% |
|
| | **HIGH** (PER, ID_DOSSIER) | 93.0% | 95.7% | 94.4% |
|
| | **MED** (ORG, ETAB) | 81.4% | 77.4% | 79.3% |
|
| | **LOW** (LOC, DATE) | 69.4% | 74.5% | 71.9% |
|
|
|
| ## Bias, Risks, and Limitations
|
|
|
| ### Limitations techniques
|
|
|
| - **Domaine spécialisé** : Optimisé pour le médico-social français, performances réduites sur d'autres domaines
|
| - **Trade-off qualité/vitesse** : -1.3% F1 vs baseline pour +15-20% vitesse
|
| - **Entités rares** : Moins performant sur entités hors vocabulaire ou très rares
|
| - **Dépendance contextuelle** : Nécessite contexte suffisant (min 5-10 mots)
|
|
|
| ### Considérations éthiques
|
|
|
| - ✅ **Données d'entraînement** : **Aucune donnée confidentielle réelle utilisée**
|
| - Rapports sociaux : fictifs et réalistes (générés)
|
| - Rapports publics : documents publics d'organisation et bonnes pratiques
|
| - **Pas de dossiers ASE/RSA réels** (hautement confidentiels)
|
| - ✅ **Usage recommandé** : Outil d'assistance, pas de décision automatique
|
| - ✅ **Validation humaine** requise pour données sensibles
|
| - ⚠️ **RGPD** : Adapter selon contexte (pseudonymisation, consentement)
|
| - ⚠️ **Biais potentiels** : Sous-représentation de certains groupes dans corpus d'entraînement
|
|
|
| ### Recommendations
|
|
|
| - ✅ **Validation humaine** pour données sensibles (NIR, identifiants)
|
| - ✅ **Post-traitement** avec règles métier et gazetteers
|
| - ✅ **Monitoring** des faux positifs/négatifs en production
|
| - ⚠️ **Prudence** sur entités rares ou hors vocabulaire
|
| - ⚠️ **Ne jamais utiliser ce modèle sur des données confidentielles sans autorisation**
|
|
|
| ## Environmental Impact
|
|
|
| - **Hardware** : NVIDIA GPU (compute capability ≥ 6.0 for FP16)
|
| - **Training hours** : ~12h (distillation + pruning)
|
| - **Cloud provider** : N/A (local training)
|
| - **Carbon emitted** : ~2.5 kg CO2eq (estimation)
|
|
|
| **Optimizations réduisant l'empreinte** :
|
| - Distillation → -8% paramètres
|
| - Pruning → -15% poids actifs
|
| - FP16 → -50% mémoire et calculs
|
|
|
| ## Technical Specifications
|
|
|
| ### Model Architecture and Objective
|
|
|
| - **Architecture** : CamemBERT (RoBERTa français)
|
| - **Layers** : 11 (distilled from 12)
|
| - **Hidden size** : 768
|
| - **Attention heads** : 12 per layer
|
| - **Intermediate size** : 3072
|
| - **Vocabulary** : 32,000 tokens (SentencePiece)
|
| - **Max sequence** : 512 tokens
|
| - **Parameters** : 102,947,333 total (87,350,000 non-zero)
|
|
|
| ### Compute Infrastructure
|
|
|
| #### Hardware
|
|
|
| - **Training** : GPU NVIDIA (≥ 12GB VRAM)
|
| - **Inference** : CPU/GPU compatible FP16
|
|
|
| #### Software
|
|
|
| - Python 3.8+
|
| - PyTorch ≥ 2.0.0
|
| - Transformers ≥ 4.30.0
|
| - SafeTensors ≥ 0.3.0
|
|
|
| ## Citation
|
|
|
| ```bibtex
|
| @model{camembert-ner-distilled-pruned-fp16,
|
| title={CamemBERT-NER Distilled + Pruned + FP16},
|
| author={Danto, Patrick},
|
| year={2024},
|
| publisher={HuggingFace Hub},
|
| url={https://huggingface.co/jmdanto/titibongbong_camemBERT_NER},
|
| note={F1: 85.9%, Size: 196MB, Speed: +15-20%}
|
| }
|
|
|
| @model{camembert-ner-teacher,
|
| title={CamemBERT-NER: Fine-tuned CamemBERT for NER task},
|
| author={Pollé, Jean-Baptiste},
|
| year={2020},
|
| publisher={HuggingFace Hub},
|
| url={https://huggingface.co/Jean-Baptiste/camembert-ner}
|
| }
|
| ```
|
|
|
| ## Model Card Authors
|
|
|
| Patrick Danto
|
|
|
| ## Model Card Contact
|
|
|
| - Email : patrick.danto@outlook.fr
|
|
|
| ---
|
|
|
| **Note** : Ce modèle fait partie du projet **La Plume**, un pipeline de pseudonymisation pour documents médico-sociaux français. Le pipeline complet est un projet privé protégé au titre de la propriété intellectuelle, mais ce modèle est publié sous licence MIT.
|
|
|