| --- |
| language: fr |
| license: mit |
| library_name: onnx |
| tags: |
| - token-classification |
| - pii |
| - anonymization |
| - french |
| - camembert |
| base_model: almanach/camembert-base |
| --- |
| |
| # Noirci — détection de données personnelles en français |
|
|
| Modèle de reconnaissance d'entités entraîné pour **pseudonymiser de la |
| correspondance professionnelle française** avant de l'envoyer à un LLM. |
| Exporté en ONNX quantifié int8 : 186 Mo, tourne sur CPU. |
|
|
| Développé par **[5000.dev](https://5000.dev)**. |
|
|
| Le moteur complet et le protocole de mesure sont publiés avec le benchmark : |
| [5000dev/noirci-bench](https://huggingface.co/datasets/5000dev/noirci-bench). |
|
|
| ## La métrique compte autant que le modèle |
|
|
| Une entité n'est protégée que si **100 % de ses caractères significatifs |
| sont masqués**. Masquer « Jean » dans « Jean Dupont » est compté comme une |
| fuite, pas comme un demi-succès : le nom de famille est parti chez le |
| fournisseur du LLM. Les scores F1 par token, usuels dans la littérature, |
| récompensent ces demi-succès et surestiment fortement la protection réelle. |
|
|
| On mesure donc deux choses séparément : le **taux de fuite** (l'entité |
| a-t-elle été entièrement masquée) et le **taux de sur-masquage** (combien de |
| texte inutile a été masqué au passage). |
|
|
| ## Résultats |
|
|
| Sur de la correspondance professionnelle française authentique, annotée à la |
| main. Le modèle n'est qu'une couche du pipeline complet ; les chiffres |
| ci-dessous sont ceux du pipeline `lite2`. |
|
|
| | Jeu | Documents | Entités | Fuite | Sur-masquage | |
| |---|---|---|---|---| |
| | Validation (tenu à l'écart) | 72 | 555 | 3,96 % | 17,7 % | |
| | Entraînement | 407 | 3 576 | 3,30 % | 11,2 % | |
| | Aveugle (annoté avant exécution) | 7 | 55 | 5,45 % | 8,0 % | |
|
|
| Par type sur le jeu le plus large : PERSON 0,00 %, URL 0,60 %, CITY 1,47 %, |
| ADDRESS 1,74 %, PHONE 2,59 %, DATE 3,58 %, AMOUNT 4,58 %, COMPANY 5,70 %. |
| Les identifiants à somme de contrôle (SIREN, SIRET, TVA, IBAN, NIR) sont à |
| 0,00 % : ils sont traités par la couche déterministe, pas par le modèle. |
|
|
| ## Ce que le modèle a appris, et pourquoi |
|
|
| Le corpus d'entraînement mélange du synthétique métier (juridique, compta, |
| RH, immobilier, administratif), du WikiNER français, et de la **prose réelle |
| à valeurs substituées** : de vrais documents dont chaque entité a été |
| remplacée par une autre valeur réelle du même type, tirée de sources |
| publiques (BODACC, INSEE). La structure vient du réel, aucune donnée client |
| ne subsiste. |
|
|
| Un point non évident : la **forme de surface** des sociétés a été réalignée |
| sur la distribution observée. Les pools BODACC et SIRENE stockent les |
| raisons sociales en capitales, ce qui donnait un corpus à 65 % de |
| majuscules contre 17 % dans la vraie correspondance. Le modèle apprenait |
| qu'« une société, c'est un mot en capitales » et ratait 40 % des marques |
| écrites normalement, en simple capitale initiale. Corriger cette seule |
| distribution a fait passer les sociétés de 9,7 % à 6,7 % de fuite. |
|
|
| ## Contenu du dépôt |
|
|
| | Fichier | | |
| |---|---| |
| | `model.safetensors` | les poids en float32, pour réentraîner ou réexporter | |
| | `onnx/model_int8.onnx` | l'export quantifié, 186 Mo, tourne sur processeur | |
| | `tokenizer.json` | **sans troncature**. Le fichier sauvé après entraînement en embarquait une, silencieuse, à 192 tokens : la fin de tout document long n'était jamais analysée. Si vous repartez d'un autre export, vérifiez ce point. | |
|
|
| ## Utilisation |
|
|
| Le modèle seul n'est pas suffisant. Il est conçu comme une couche d'un |
| pipeline qui comprend aussi des regex à checksums, des gazetteers (communes |
| INSEE, dénominations SIRENE) et une passe de propagation document entier. |
| Voir le dépôt GitHub. |
|
|
| ```python |
| from bench.detect.run import DETECTORS |
| spans = DETECTORS["lite2"]("Bonjour, je suis Claire Baudry de la Verrerie Delaunay.") |
| ``` |
|
|
| ## Limites |
|
|
| - **Français uniquement.** Quelques formats anglo-saxons sont couverts parce |
| qu'ils apparaissent dans de la correspondance française, mais ce n'est pas |
| un modèle multilingue. |
| - **Le sur-masquage est réel**, entre 8 et 15 %. Environ un mot masqué sur |
| sept l'est inutilement. |
| - **Les benchmarks synthétiques sont saturés** (0,04 % de fuite) et ne |
| discriminent plus rien. Ne jugez pas ce modèle dessus. |
| - **Le périmètre exclut les plateformes grand public** (Zoom, Excel, Stripe, |
| Figma). Ce sont des noms de produits, pas des données personnelles, et les |
| masquer dégrade la réponse du LLM sans rien protéger. |
|
|
| ## Licence et attributions |
|
|
| MIT. Modèle de base : `almanach/camembert-base` (MIT). Données |
| d'entraînement dérivées de WikiNER (CC-BY), BODACC et INSEE SIRENE (Licence |
| Ouverte), Wikidata (CC0). Voir `NOTICE` dans le dépôt. |
|
|