200 documents médicaux français, dont deux tiers de scans
Les jeux de données publics sont du texte brut ; le problème d'un hôpital, c'est un Cerfa scanné avec de l'écriture manuscrite en travers. Nous avons donc construit le corpus : vingt patients, dix documents chacun, chaque identifiant annoté jusqu'à son cadre sur la page, et deux tiers rescannés avec inclinaison, bruit et un tampon sur le texte. Puis nous avons envoyé les 200 dans l'API en une seule tâche et noté ce qui est revenu.
Construit et exécuté par Hexagone AI, septembre 2026. Contenu clinique issu de PARHAF, Health Data Hub / AP-HP, CC BY 4.0 ; tous les identifiants y sont inventés.
Un corpus qui n'existait pas
Les jeux de données publics sur les données personnelles sont du texte brut. Le problème d'un hôpital, c'est un Cerfa scanné avec l'écriture d'un médecin en travers, un tampon sur le nom du patient et un en-tête de fax sur le côté. Nous avons donc fabriqué ces documents, à partir de comptes rendus rédigés par des cliniciens, et annoté chaque identifiant jusqu'à sa position sur la page.
Regarder les documents| Niveau | Docs | Livré sous forme de |
|---|---|---|
| facile | 67 | PDF numérique, saisi, propre |
| moyen | 86 | scan à 200 dpi, écriture soignée |
| difficile | 47 | photocopie ou fax, écriture hâtive, tamponné |
Récupérer le jeu de données
Tous les documents, et pour chacun une vérité terrain JSON donnant à chaque identifiant son étiquette, son propriétaire et son cadre sur la page. Le contenu clinique est sous CC BY 4.0 (PARHAF) ; tout ce qui identifie y est inventé.
Télécharger medical-dataset-v1Comment le corpus a été construit, en quatre étapes
- 1Partir d'écrits cliniques réelsPARHAF (Health Data Hub / AP-HP, CC BY 4.0) réunit des comptes rendus fictifs rédigés par des cliniciens. Une langue clinique réelle, sans mise en page et presque sans identifiants.
- 2Fabriquer une identité cohérenteChaque patient reçoit un nom, une adresse, un NIR, un IPP et une équipe médicale, identiques sur ses dix documents. Les numéros de téléphone proviennent des plages réservées à la fiction par l'ARCEP ; les identifiants à clé de contrôle sont valides mais inventés.
- 3Mettre en page comme en vraiDes Cerfa fidèles, des ordonnances sur bloc, des tableaux de biologie, des lettres d'adressage. Le générateur sait où il a écrit chaque valeur, ce qui rend possible le cadre sur la page.
- 4Puis l'abîmer, délibérémentDeux tiers sont rescannés en images : écriture manuscrite avec du tremblé lettre à lettre, jusqu'à 2,8 degrés d'inclinaison, bruit JPEG, photocopie en niveaux de gris, un tampon par-dessus le texte. La couche texte a disparu ; il reste ce que donnerait un scanner.
Ce qui est revenu
Deux questions, tenues séparées. L'API a-t-elle signalé une valeur couvrant chaque identifiant annoté, ce à quoi répond son propre registre d'audit. Et la valeur d'origine reste-t-elle lisible dans le document livré, ce à quoi seul le PDF livré répond. La seconde est celle qui compte, et elle se mesure sur le fichier, pas sur la déclaration.
Ce qui a été trouvé, par type d'identifiant
| Identifiant | Sur les pages | Trouvés | Encore lisibles |
|---|---|---|---|
| Noms | 2 385 | 99,1 % | aucun |
| Adresses | 1 370 | 98,6 % | aucun |
| Dates | 1 251 | 99,4 % | aucun |
| Numéros de santé et administratifs | 729 | 97,3 % | aucun |
| Organisations | 319 | 99,4 % | aucun |
| Coordonnées | 549 | 97,6 % | aucun |
Voir les 23 étiquettes
L'âge y obtient un mauvais score, délibérément. C'est un quasi-identifiant que le jeu de données annote sans exiger son retrait, et la politique par défaut le conserve : il est rapporté plutôt que discrètement exclu pour embellir la moyenne.
| Identifiant | Sur les pages | Trouvés | Encore lisibles |
|---|---|---|---|
| NomSURNAME | 1 199 | 98,8 % | — |
| PrénomGIVEN_NAME | 1 186 | 99,3 % | — |
| DateDATE | 838 | 99,5 % | — |
| VilleCITY | 549 | 98,9 % | — |
| Code postalPOSTAL_CODE | 401 | 99,0 % | — |
| RueSTREET | 360 | 97,5 % | — |
| TéléphonePHONE | 323 | 96,0 % | — |
| ÉtablissementESTABLISHMENT | 307 | 99,4 % | — |
| Date de naissanceBIRTH_DATE | 286 | 99,7 % | — |
| Identifiant patient (IPP)IPP | 225 | 98,7 % | — |
| Identifiant médecin (RPPS)RPPS | 182 | 98,9 % | — |
| HeureTIME | 127 | 98,4 % | — |
| URLURL | 106 | 100,0 % | — |
| Numéro d'établissement (FINESS)FINESS | 101 | 86,1 % | — |
| Identité nationale de santé (INS)INS | 101 | 99,0 % | — |
| ÂgeAGE | 75 | 28,0 % | — |
| FaxFAX | 60 | 100,0 % | — |
| CourrielEMAIL | 60 | 100,0 % | — |
| Numéro de séjour (NDA)NDA | 60 | 100,0 % | — |
| Lieu de naissanceBIRTH_PLACE | 60 | 100,0 % | — |
| Numéro d'assuréAM_NUMBER | 60 | 100,0 % | — |
| Référence laboratoireLAB_ID | 40 | 100,0 % | 2 |
| EmployeurEMPLOYER | 12 | 100,0 % | — |
Et selon la difficulté de lecture de la page
| Difficulté | Identifiants | Trouvés | Encore lisibles après |
|---|---|---|---|
| facilenumérique, saisi | 2 185 | 98,9 % | aucun |
| moyenscanné, manuscrit | 2 540 | 99,6 % | aucun |
| difficilephotocopié, tamponné | 953 | 95,6 % | 2 · 0,2 % |
Les documents les plus difficiles trouvent le moins d'identifiants et en laissent fuir le moins, et ces deux faits ont la même cause. Une page photocopiée passe par l'OCR, et là où l'OCR lit mal une valeur le pipeline ne la voit jamais : c'est un défaut de détection. Mais la lecture erronée n'est pas la valeur non plus, et la page livrée est reconstruite à partir de ce que l'OCR a lu : l'original y survit donc rarement. Un faible taux de fuite sur un scan est ainsi une affirmation plus faible que le même taux sur un PDF numérique, et cela mérite d'être dit.
Regarder les documents
Chaque document de l'exécution, l'original et ce que l'API a livré, avec les annotations du jeu de données à leur place. Faites glisser la poignée sur la page pour voir l'un devenir l'autre. Les chiffres ci-dessus sont une moyenne de tout ceci ; voici comment en vérifier un.
- Aucun résultat.
Les images de page sont des rendus des PDF réels, ceux que le jeu de données fournit et ceux que l'API a renvoyés. Rien n'est ressaisi d'un côté ou de l'autre.
Comment lire ces résultats
Quels documents sont notés
Les 200 : tous les documents ont été envoyés, y compris ceux qui contiennent un exposant, et tous ont été livrés.
Ce qui compte comme trouvé
L'API a signalé une valeur couvrant celle qui est annotée. Un nom complet signalé une fois répond à deux étiquettes, et une valeur légèrement mal lue par l'OCR compte quand même : un benchmark qui punit un scanner d'être un scanner mesure le scanner.
Ce qui compte comme une fuite
La valeur d'origine est encore dans le texte du PDF livré, sur une frontière de mot, ou ses chiffres y figurent encore avec seulement des séparateurs entre eux. Lu depuis le fichier, jamais depuis le registre d'audit.
Ce qui n'a pas été mesuré
La ré-identification. Tous les identifiants peuvent avoir disparu, un diagnostic rare dans une petite ville désigne encore quelqu'un ; c'est une autre étude et cette page ne la revendique pas. L'écriture manuscrite est en outre synthétique : convaincante, mais ce n'est pas une vraie main.
Les autres études
- Évaluation sur benchmark completPrivacyBench v2Voir les résultats
- Évaluation sur jeu completPII-INDEXBENCHVoir les résultats
- Évaluation sur jeu completAI4Privacy, six languesVoir les résultats
- Benchmark indépendantRAT-BenchVoir les résultats
- Évaluation interne, 2024Face à face avec PresidioVoir les résultats
Testez-le sur vos propres documents.
Un benchmark, ce sont les données de quelqu'un d'autre. Une semaine gratuite, sans carte bancaire, et les fichiers ne quittent jamais votre machine : vous ne risquez rien à vérifier vous-même.