A maioria dos benchmarks de deteção de dados pessoais faz a pergunta errada. Conta quantas deteções um sistema assinalou e trata esse número como qualidade.
Não é. Um pipeline que assinala cada URL, cada menção a um país, cada nome de departamento produz mais de 70 falsos positivos que o revisor tem de descartar à mão num contrato típico.
O indicador certo é o rácio entre as regiões que o revisor manteria e as que o revisor descartaria.
Construímos um benchmark reproduzível contra o Microsoft Presidio sobre 14 documentos PDF em 7 línguas europeias (en, fr, de, es, it, nl, pt) — dois documentos por língua: um contrato e uma demonstração financeira. O script e os documentos são públicos:{" "} github.com/promptshield-Inc/pii-detection-benchmarks .
Os números principais
No conjunto dos 14 documentos:
À primeira vista, isto é o promptShield a encontrar cerca de 62% menos deteções. A leitura ingénua: o Presidio encontra mais, logo é melhor.
Mas essa leitura desmorona-se no momento em que se separa por classe de documento.
A distinção que importa: contratos vs demonstrações financeiras
Nos contratos — onde os dados são verdadeiros dados pessoais sobre as partes contratantes — ambos os sistemas emitem aproximadamente o mesmo conjunto de regiões.
As 209 deteções de sinal forte do promptShield ao longo dos 7 contratos do nosso corpus coincidem uma a uma com as do Presidio nas entidades que realmente importam: nomes, moradas, telefones, e-mails, identificadores de empresa.
Nas demonstrações financeiras, a diferença explode. Só o documento francês etats-financiers_beaumont: o Presidio emite 69 deteções LOCATION, das quais 73 são menções a França, Paris ou nomes de países/cidades que aparecem em prosa jurisdicional (sede social, lei aplicável, morada do gabinete de auditoria).
O promptShield emite 22 regiões — todas elas uma entidade real.
A diferença de 414 deteções entre os dois sistemas não é capacidade. É ruído que a instalação por defeito do Presidio emite e o promptShield filtra.
O que filtramos e o Presidio não
Depois de construir o benchmark, encontrámos seis categorias bem definidas de ruído onde o Presidio por defeito + modelos spaCy small sobre-emitem.
1. URLs nos elementos acessórios do documento
O UrlRecognizer do Presidio assinala cada URL — ligação à política de privacidade no rodapé, URL da página de apoio, formulário de contacto. Cerca de 8 a 10 deteções por contrato que nenhum revisor quer ocultar.
2. Menções a países em cláusulas jurisdicionais
«O presente contrato é regido pelas leis de França» — o Presidio assinala França como LOCATION. França nessa frase é elemento acessório do contrato, não um dado pessoal sobre o titular dos dados. Construímos um filter_jurisdiction_boilerplate multilíngue que deteta mais de 60 expressões jurisdicionais em 7 línguas e descarta qualquer deteção LOCATION/ORG que caia dentro da janela correspondente.
3. Fragmentos de PERSON
Os modelos de entidades por transformador e spaCy emitem rotineiramente a mesma pessoa como deteções sobrepostas: Pierre, Dubois e Pierre Dubois tornam-se entidades PERSON distintas. No nosso contrato italiano: o Presidio emite 26 deteções PERSON para 10 partes nomeadas distintas. O filter_span_coalescence do promptShield descarta as deteções contidas noutra e mantém, por página, a forma mais longa.
4. ORG de substantivo genérico
Marketing, Vorstand, Direction Générale, Board of Directors, Comitato di Direzione — a deteção de entidades do Presidio etiqueta-os como ORG. Não são organizações que o revisor queira ocultar. Fornecemos, por língua, uma lista de 60 a 90 termos a excluir (generic_orgs_<lang>.txt) que os filtra.
5. Títulos de cargo etiquetados como PERSON
Substantivos de cargo em maiúsculas no início da linha (CEO, Directeur, Geschäftsführer) são por vezes etiquetados erradamente como PERSON pelo transformador/spaCy. Uma lista multilíngue de uma cinquentena de entradas e um único filtro descartam-nos.
6. País/cidade isolados em contexto não pessoal
Paris mencionado como morada do gabinete de auditoria no rodapé do contrato não é um dado pessoal sobre o titular dos dados — já a mesma palavra em «nascido em Paris» é. Examinamos a janela de 40 caracteres antes de cada deteção LOCATION em busca de expressões de contexto pessoal (born in, resident of, née à, geboren in, etc.) e descartamos as isoladas.
As ressalvas honestas
Não afirmamos que o nosso pipeline é universalmente melhor. As ressalvas:
- Apenas a instalação por defeito. Um Presidio afinado (reconhecedores personalizados, motor de entidades por transformador, limiares de confiança ajustados) fecharia a maior parte da diferença de precisão. Medimos o que a maioria dos utilizadores do Presidio realmente implementa no primeiro mês — não o que um especialista de Presidio conseguiria alcançar.
- Sem rótulos de verdade-terreno. A métrica «both / ours-only / presidio-only» é um indicador de precisão, não uma medição F1 rigorosa. Rotular à mão 14 PDFs em 7 línguas representa cerca de 40 horas de trabalho concentrado de um falante nativo; ainda não o fizemos. As contribuições são bem-vindas.
- Duas classes de documentos. Contratos + demonstrações financeiras. Registos médicos, formulários de Recursos Humanos e documentação de imigração produziriam diferenças distintas — provavelmente menores, porque esses documentos têm um sinal de dados pessoais mais rico.
- Corpus sintético. Os documentos reais de clientes têm erros de OCR, disposições em várias colunas e anexos financeiros densos em tabelas que não medimos aqui.
Quando usar antes o Presidio
O Presidio é um excelente conjunto de ferramentas. É a escolha certa quando:
- está a construir um pipeline DLP em Python à medida e quer controlo ao nível de biblioteca,
- precisa de integrar o Azure AI Language ou o AWS Comprehend sob uma única abstração de PII, ou
- está a processar fluxos de texto (não documentos delimitados).
O benchmark acima trata especificamente do comportamento da instalação por defeito sobre documentos PDF delimitados, que é o que a anonimização de documentos na secretária significa, na prática.
O Presidio inspirou-nos. Não pretendemos substituí-lo.
O que afirmamos é que, para a forma específica de trabalho que o promptShield faz — anonimização na secretária de contratos, demonstrações financeiras, registos médicos e documentos de Recursos Humanos — o nosso pipeline produz um resultado que exige menos trabalho de revisão, com provas verificáveis.
Execute o benchmark
Todo o sentido deste artigo é o comprovativo:
{`git clone https://github.com/promptshield-Inc/pii-detection-benchmarks
cd pii-detection-benchmarks
pip install -r requirements.txt
python benchmark.py`}
O script do Presidio é totalmente autónomo — não precisa de ter o promptShield instalado para verificar o lado do Presidio. Os CSVs publicados em results/ são os números que citámos acima.
Se encontrar um problema de metodologia, abra uma issue ou um PR.