lexform · Mesure

Qualité de détection

Dernière exécution : 2026-08-08 (exécution quotidienne) · 100 actes juridiques traités en 193 s · environnement dev

Page interne. Non indexée, réservée aux administrateurs le temps de valider les chiffres. Le contenu est déjà rédigé pour un lecteur externe.
98,46 %rappel sur le périmètre couvert
97,74 %précision — pièges évités
92,80 %rappel brut (barème du corpus)
29fuites sur 1 885 entités
Deux rappels, et ce n’est pas du maquillage. lexform ne masque aucune date, dates de naissance comprises : en matière juridique les dates portent le raisonnement — prescription, ancienneté, préavis, calcul d’âge — et les masquer rendrait le document inexploitable par l’IA, ce qui est précisément le service. Le corpus, lui, les compte comme des données à pseudonymiser. Ses 115 dates de naissance pèsent donc 7,20 % de rappel brut sans qu’il y ait rien à corriger. Le chiffre à lire est le premier ; le brut reste affiché pour que la comparaison avec un autre moteur reste possible.

Évolution quotidienne

Le banc tourne tous les matins à 6 h sur le corpus de référence. Chaque point est une exécution ; l’empreinte du prompt permet de rattacher une variation à sa cause.

2026-08-03 — 97,51 %2026-08-04 — 98,46 %2026-08-05 — 97,61 %2026-08-06 — 98,25 %2026-08-07 — 98,30 %2026-08-08 — 98,41 %100,00 %95,00 %
JourRappel hors datesPrécisionFuitesPrompt
2026-08-0898,41 %99,52 %30bf077c2b499b
2026-08-0798,30 %99,52 %32bf077c2b499b
2026-08-0698,25 %99,62 %33bf077c2b499b
2026-08-0597,61 %99,67 %45bf077c2b499b
2026-08-0498,46 %99,36 %29bf077c2b499b
2026-08-0397,51 %99,73 %47bf077c2b499b

Le modèle échantillonne : deux exécutions identiques ne rendent pas exactement le même chiffre. Une variation de quelques dixièmes de point est du bruit, pas un signal — c’est un décrochage net, ou une dérive tenue sur plusieurs jours, qui mérite qu’on regarde.

Évolution

CampagneRappel hors datesPrécisionFuites hors dates
Référence98,14 %97,88 %35
Prompt corrigé + double passage98,46 %97,74 %29

Le gain est réel mais modeste : 6 fuites en moins. Quand le premier passage attrape déjà 98 % des entités, un second n’a presque plus rien à trouver — l’intuition selon laquelle « deux fois vaut mieux qu’une » se vérifie surtout sur un moteur qui part de plus bas. La précision, elle, n’a pas bougé : les exclusions ajoutées à la consigne (organismes publics, logiciels grand public) sont restées sans effet, ce qui reste à comprendre plutôt qu’à réécrire au jugé.

Ce que ces deux chiffres veulent dire

Le rappel est le seul qui compte pour un pare-feu : c’est la part des données identifiantes effectivement masquées avant l’envoi. 98,46 % signifie que 29 occurrences sur 1 885 sont sorties en clair, sur le périmètre que lexform couvre réellement.

Mais un rappel élevé ne prouve rien tout seul : un moteur qui masquerait tout afficherait 100 %, en rendant le document inutilisable par l’IA. C’est pourquoi le corpus contient 1 055 pièges — dates d’audience, montants, articles de loi, juridictions, personnes déjà pseudonymisées — qui ne doivent PAS être masqués. La précision mesure cette retenue : 43 pièges masqués à tort sur 1 055.

Les deux ne s’arbitrent pas à égalité. En cas de doute, notre moteur masque : un mot masqué de trop se corrige, un nom parti chez un tiers ne revient pas.

Par catégorie de donnée

Trié du moins bon au meilleur : ce sont les premières lignes qui indiquent quoi corriger.

CatégorieOccurrencesFuitesRappel
Dates de naissance — hors périmètre, jamais masqué115115n/a
Plaques d’immatriculation15473,33 %
Références de dossier (RG, Portalis…)1551292,26 %
Personnes morales230697,39 %
Lieux de naissance95297,89 %
Personnes physiques645599,22 %
Adresses postales300100,00 %
Adresses e-mail115100,00 %
Téléphones100100,00 %
IBAN65100,00 %
Numéros de sécurité sociale35100,00 %
SIREN80100,00 %
SIRET20100,00 %
Pièces d’identité10100,00 %
Adresses web20100,00 %

Pièges : ce qui a été masqué à tort

PiègeOccurrencesMasquées à tort
Logiciels et marques2517
Juridictions9511
Organismes publics6011
Jurisprudence303
Parties déjà pseudonymisées151
Dates d’acte, d’audience, d’échéance360
Montants315
Articles de loi125
Noms communs homographes15
Personnes déjà pseudonymisées15

Un choix assumé apparaît ici : la ville d’une juridiction (« Tribunal judiciaire de Bordeaux ») est masquée, alors que le corpus la compte comme une erreur. Un tribunal nommé restreint le champ des parties possibles ; nous préférons perdre des points sur ce banc.

Méthode

Le corpus compte 100 actes couvrant 20 types — contrats de travail, assignations, baux, statuts, conventions de divorce, plaintes pénales, mises en demeure —, soit 47 805 mots dont 5 888 à masquer. Toutes les données sont fictives, mais les clés de contrôle sont mathématiquement valides (Luhn pour les SIREN, modulo 97 pour les NIR et IBAN) afin que les validateurs se déclenchent réellement.

Un cinquième des documents est volontairement difficile : particules et noms à préposition, patronymes étrangers, et bruit de numérisation — O remplacé par 0, l par 1, accents perdus, nom coupé par une césure en fin de ligne. S’y ajoutent des pièges structurels : un patronyme homographe d’un nom commun présent dans le même acte (« M. Boulanger » qui exerce la profession de boulanger), un patronyme homographe d’une ville, deux personnes portant le même nom, un patronyme reconstituable depuis une adresse e-mail.

Chaque document traverse la chaîne complète, celle-là même que l’extension emprunte. Le scoring vérifie, pour chaque entité annotée, si sa chaîne figure encore dans la sortie. Une entité partiellement masquée compte comme détectée : le rappel affiché est donc une borne haute, ce qui est le bon critère ici — ce qui importe est qu’aucune chaîne identifiante ne parte intacte.

Limites

  • Corpus synthétique : il reproduit la structure d’actes réels, pas leur désordre. Un vrai scan est plus sale.
  • Corpus public : un moteur peut être réglé dessus. Le générateur est déterministe (graine 20260730) ; changer la graine produit 100 nouveaux documents de même structure, ce qui permet de vérifier qu’un moteur n’a pas été ajusté sur ce jeu précis.
  • Mesure faite sur l’environnement dev, en 193 secondes pour 100 documents.
  • Le périmètre annoté exclut civilités et formes sociales : « Monsieur Jean Delacourt » est annoté sur « Jean Delacourt ». Un moteur qui masque aussi la civilité n’est pas pénalisé.

Reproduire la mesure

Le corpus, sa vérité terrain et le script de scoring sont téléchargeables : corpus-test-pseudonymisation.zip (100 documents, 2 000 entités annotées, 1 055 pièges).

Nos propres chiffres sont produits par scripts/eval-corpus.ts puis par le scorer fourni avec le corpus. Ils sont figés dans le dépôt : cette page ne relance rien au chargement.