De meeste benchmarks voor detectie van persoonsgegevens stellen de verkeerde vraag. Ze tellen hoeveel spans een systeem markeerde en behandelen dat getal als kwaliteit.
Dat is het niet. Een pijplijn die elke URL, elke landvermelding, elke afdelingsnaam markeert, levert op een doorsnee contract 70+ valse positieven op die de beoordelaar met de hand moet afwijzen.
De juiste maatstaf is gebieden die de beoordelaar zou behouden versus gebieden die de beoordelaar zou afwijzen.
We bouwden een reproduceerbare benchmark tegen Microsoft Presidio op 14 PDF-documenten in 7 Europese talen (en, fr, de, es, it, nl, pt) — twee documenten per taal: één contract, één jaarrekening. Het script en de documenten zijn openbaar:{" "} github.com/promptshield-Inc/pii-detection-benchmarks .
De cijfers in het kort
Over alle 14 documenten samen:
Op het eerste gezicht vindt promptShield zo'n 62% minder spans. De naïeve lezing: Presidio vindt er meer, dus het is beter.
Maar die lezing stort in op het moment dat u opsplitst naar documentklasse.
De splitsing die ertoe doet: contracten versus jaarrekeningen
Op contracten — waar de gegevens echte persoonsgegevens over contractpartijen zijn — brengen beide systemen ruwweg dezelfde set gebieden uit.
De 209 spans met sterk signaal van promptShield over de 7 contracten in ons corpus komen één-op-één overeen met de vangsten van Presidio op de entiteiten die werkelijk tellen: namen, adressen, telefoons, e-mails, bedrijfsidentificatie.
Op jaarrekeningen explodeert het verschil. Het Franse document etats-financiers_beaumont alleen al: Presidio brengt 69 LOCATION-spans uit, waarvan er 73 vermeldingen zijn van Frankrijk, Parijs of land-/stadsnamen die voorkomen in jurisdictioneel proza (statutaire zetel, toepasselijk recht, adres accountantskantoor).
promptShield brengt 22 gebieden uit — elk daarvan een echte entiteit.
Het verschil van 414 spans tussen de twee systemen is geen capaciteit. Het is ruis die de standaardinstallatie van Presidio uitbrengt en die promptShield wegfiltert.
Wat wij wegfilteren en Presidio niet
Na het bouwen van de benchmark vonden we zes nette categorieën ruis waar standaard-Presidio + spaCy-small-modellen overdetecteren.
1. URL's in documentstoffering
De UrlRecognizer van Presidio markeert elke URL — link naar het privacybeleid in de voettekst, URL van de supportpagina, contactformulier. ~8–10 spans per contract die geen enkele beoordelaar wil redigeren.
2. Jurisdictionele landvermeldingen
"Deze overeenkomst wordt beheerst door het recht van Frankrijk" — Presidio markeert Frankrijk als LOCATION. Frankrijk in die zin is contractstoffering, geen persoonsgegeven over de betrokkene. We bouwden een meertalige filter_jurisdiction_boilerplate die 60+ jurisdictionele zinswendingen in 7 talen detecteert en elke LOCATION-/ORG-span laat vallen die binnen het overeenkomende venster valt.
3. PERSON-fragmenten
Transformer- en spaCy-entiteitsmodellen brengen routinematig dezelfde persoon uit als overlappende spans: Pierre, Dubois en Pierre Dubois worden alle drie afzonderlijke PERSON-entiteiten. In ons Italiaanse contract: Presidio brengt 26 PERSON-spans uit voor 10 verschillende genoemde partijen. De filter_span_coalescence van promptShield laat ingesloten spans vallen en behoudt per pagina de langste vorm.
4. ORG op basis van een generiek zelfstandig naamwoord
Marketing, Vorstand, Direction Générale, Board of Directors, Comitato di Direzione — de entiteitsdetectie van Presidio tagt deze als ORG. Het zijn geen organisaties die de beoordelaar wil redigeren. We leveren een stopwoordenlijst per taal van 60–90 vermeldingen (generic_orgs_<lang>.txt) die ze wegfiltert.
5. Functietitels getagd als PERSON
Met hoofdletters geschreven functienamen aan het begin van een regel (CEO, Directeur, Geschäftsführer) worden soms ten onrechte als PERSON getagd door transformer-/spaCy-modellen. Een meertalige stopset van 50 vermeldingen en één filter laten ze vallen.
6. Op zichzelf staand land/stad in niet-persoonlijke context
Parijs dat als adres van het accountantskantoor in de voettekst van het contract wordt genoemd, is geen persoonsgegeven over de betrokkene — hetzelfde woord in "geboren in Parijs" wel. We controleren het venster van 40 tekens vóór elke LOCATION-span op persoonlijke-contextzinnen (geboren in, woonachtig te, née à, geboren in, enz.) en laten de kale exemplaren vallen.
De eerlijke kanttekeningen
We beweren niet dat onze pijplijn universeel beter is. De kanttekeningen:
- Alleen standaardinstallatie. Een afgestelde Presidio-installatie (aangepaste herkenners, transformer-entiteitenbackend, bijgestelde betrouwbaarheidsdrempels) zou het grootste deel van het precisieverschil dichten. We meten wat de meeste Presidio-gebruikers in de eerste maand daadwerkelijk uitrollen — niet wat een Presidio-expert zou kunnen bereiken.
- Geen ground-truth-labels. De metriek "both / ours-only / presidio-only" is een precisie-benadering, geen strikte F1-meting. Het handmatig labelen van 14 PDF's in 7 talen is ~40 uur geconcentreerd werk door een moedertaalspreker; dat hebben we nog niet gedaan. PR's welkom.
- Twee documentklassen. Contracten + jaarrekeningen. Medische dossiers, HR-formulieren en immigratiepapieren zouden andere verschillen opleveren — waarschijnlijk kleinere, omdat die documenten een rijker PII-signaal hebben.
- Synthetisch corpus. Echte klantdocumenten hebben OCR-fouten, opmaak met meerdere kolommen en tabelzware financiële bijlagen die we hier niet meten.
Wanneer u in plaats daarvan Presidio moet gebruiken
Presidio is een geweldige toolkit. Het is de juiste keuze wanneer:
- u een aangepaste Python-DLP-pijplijn bouwt en controle op bibliotheekniveau wilt,
- u Azure AI Language of AWS Comprehend onder één PII-abstractie moet integreren, of
- u tekststromen verwerkt (geen afgebakende documenten).
De bovenstaande benchmark gaat specifiek over het gedrag van de standaardinstallatie op afgebakende PDF-documenten, wat in de praktijk is wat desktopanonimisering van documenten betekent.
We werden geïnspireerd door Presidio. We beweren niet het te vervangen.
We beweren dat voor het specifieke soort werk dat promptShield doet — desktopanonimisering van contracten, jaarrekeningen, medische dossiers, HR-documenten — onze pijplijn uitvoer levert die minder beoordelingswerk vergt, met verifieerbaar bewijs.
Draai de benchmark
De hele clou van dit bericht is het bewijsstuk:
{`git clone https://github.com/promptshield-Inc/pii-detection-benchmarks
cd pii-detection-benchmarks
pip install -r requirements.txt
python benchmark.py`}
Het Presidio-script is volledig op zichzelf staand — u hebt promptShield niet geïnstalleerd nodig om de Presidio-kant te verifiëren. De gepubliceerde CSV's in results/ zijn de cijfers die we hierboven aanhaalden.
Vindt u een methodologisch probleem, open dan een issue of PR.