La maggior parte dei benchmark di rilevamento dei dati personali pone la domanda sbagliata. Conta quante rilevazioni un sistema ha segnalato e tratta quel numero come qualità.
Non lo è. Un flusso che segnala ogni URL, ogni menzione di paese, ogni nome di reparto produce più di 70 falsi positivi che il revisore deve scartare a mano su un contratto tipico.
La metrica giusta è il rapporto tra le aree che il revisore terrebbe e quelle che il revisore scarterebbe.
Abbiamo costruito un benchmark riproducibile contro Microsoft Presidio su 14 documenti PDF in 7 lingue europee (en, fr, de, es, it, nl, pt) — due documenti per lingua: un contratto e un bilancio. Lo script e i documenti sono pubblici:{" "} github.com/promptshield-Inc/pii-detection-benchmarks .
I numeri principali
Sull'insieme dei 14 documenti combinati:
A prima vista promptShield trova circa il 62% di rilevazioni in meno. La lettura ingenua: Presidio ne trova di più, quindi è migliore.
Ma quella lettura crolla nell'istante in cui si distingue per classe di documento.
La distinzione che conta: contratti contro bilanci
Sui contratti — dove i dati sono dati personali reali relativi alle parti contraenti — entrambi i sistemi emettono all'incirca lo stesso insieme di aree.
Le 209 rilevazioni ad alto segnale di promptShield sui 7 contratti del nostro corpus combaciano una a una con quelle di Presidio sulle entità che contano davvero: nomi, indirizzi, telefoni, email, partite IVA.
Sui bilanci, lo scarto esplode. Il solo documento francese etats-financiers_beaumont: Presidio emette 69 rilevazioni LOCATION, di cui 73 sono menzioni di Francia, Parigi o nomi di paesi e città che compaiono in prosa giurisdizionale (sede legale, legge applicabile, indirizzo della società di revisione).
promptShield ne emette 22 — ognuna delle quali è un'entità reale.
Lo scarto di 414 rilevazioni tra i due sistemi non è capacità. È rumore che l'installazione di default di Presidio emette e che promptShield filtra.
Cosa filtriamo che Presidio non filtra
Dopo aver costruito il benchmark abbiamo trovato sei categorie nette di rumore in cui Presidio di default + modelli spaCy small sovra-emettono.
1. URL negli elementi accessori del documento
Il UrlRecognizer di Presidio segnala ogni URL — link all'informativa sulla privacy nel piè di pagina, URL della pagina di supporto, modulo di contatto. Circa 8-10 rilevazioni per contratto che nessun revisore vuole oscurare.
2. Menzioni di paesi nelle clausole giurisdizionali
«Il presente contratto è regolato dalle leggi della Francia» — Presidio segnala Francia come LOCATION. In quella frase Francia è un elemento accessorio del contratto, non un dato personale relativo all'interessato. Abbiamo costruito un filter_jurisdiction_boilerplate multilingue che rileva oltre 60 formule giurisdizionali in 7 lingue e scarta qualsiasi rilevazione LOCATION/ORG che ricada all'interno della finestra individuata.
3. Frammenti di PERSON
I modelli di entità basati su transformer e spaCy emettono regolarmente la stessa persona come rilevazioni sovrapposte: Pierre, Dubois e Pierre Dubois diventano tre entità PERSON distinte. Nel nostro contratto italiano: Presidio emette 26 rilevazioni PERSON per 10 parti nominate distinte. Il filter_span_coalescence di promptShield scarta le rilevazioni contenute in un'altra e tiene, per pagina, solo la forma più lunga.
4. Sostantivi generici classificati come ORG
Marketing, Vorstand, Direction Générale, Board of Directors, Comitato di Direzione — il rilevamento delle entità di Presidio li etichetta come ORG. Non sono organizzazioni che il revisore vuole oscurare. Forniamo una lista di stopword per lingua da 60-90 voci (generic_orgs_<lang>.txt) che le filtra.
5. Titoli di funzione etichettati come PERSON
I sostantivi di ruolo in maiuscolo a inizio riga (CEO, Directeur, Geschäftsführer) a volte vengono etichettati erroneamente come PERSON dal rilevamento basato su transformer o spaCy. Un set di stopword multilingue di 50 voci e un singolo filtro li scartano.
6. Paese o città isolati in contesto non personale
Parigi menzionata come indirizzo della società di revisione nel piè di pagina del contratto non è un dato personale relativo all'interessato — la stessa parola in «nato a Parigi» lo è. Controlliamo la finestra di 40 caratteri prima di ogni rilevazione LOCATION alla ricerca di formule a connotazione personale (born in, resident of, née à, geboren in, ecc.) e scartiamo quelle nude.
Le riserve oneste
Non sosteniamo che il nostro flusso sia universalmente migliore. Le riserve:
- Solo installazione di default. Un Presidio finemente messo a punto (riconoscitori personalizzati, motore di entità basato su transformer, soglie di confidenza aggiustate) colmerebbe gran parte dello scarto di precisione. Misuriamo ciò che la maggior parte degli utenti di Presidio distribuisce davvero nel primo mese — non ciò che un esperto di Presidio potrebbe ottenere.
- Nessuna etichetta di verità di base. La metrica «both / ours-only / presidio-only» è un indicatore di precisione, non una misurazione F1 rigorosa. Annotare a mano 14 PDF in 7 lingue richiede circa 40 ore di lavoro concentrato da parte di un madrelingua; non l'abbiamo ancora fatto. Le PR sono benvenute.
- Due classi di documenti. Contratti + bilanci. Cartelle cliniche, moduli HR, pratiche di immigrazione produrrebbero scarti diversi — probabilmente minori, perché quei documenti hanno un segnale PII più ricco.
- Corpus sintetico. I documenti reali dei clienti hanno errori di OCR, impaginazioni multi-colonna e appendici finanziarie ricche di tabelle che qui non misuriamo.
Quando usare invece Presidio
Presidio è un'ottima cassetta degli attrezzi. È la scelta giusta quando:
- state costruendo una pipeline DLP Python su misura e volete un controllo a livello di libreria,
- dovete integrare Azure AI Language o AWS Comprehend sotto un'unica astrazione PII, oppure
- state elaborando flussi di testo (non documenti delimitati).
Il benchmark qui sopra riguarda specificamente il comportamento dell'installazione di default su documenti PDF delimitati, che è ciò che l'anonimizzazione di documenti su desktop significa in pratica.
Ci ha ispirato Presidio. Non sosteniamo di sostituirlo.
Sosteniamo che per la forma specifica di lavoro che promptShield svolge — anonimizzazione su desktop di contratti, bilanci, cartelle cliniche, documenti HR — il nostro flusso produce un risultato che richiede meno lavoro di revisione, con prove verificabili.
Eseguire il benchmark
Tutto il senso di questo articolo è la prova:
{`git clone https://github.com/promptshield-Inc/pii-detection-benchmarks
cd pii-detection-benchmarks
pip install -r requirements.txt
python benchmark.py`}
Lo script Presidio è completamente autonomo — non vi serve installare promptShield per verificare il lato Presidio. I CSV pubblicati in results/ sono i numeri che abbiamo citato sopra.
Se trovate un problema metodologico, aprite una issue o una PR.