
Reverso del filtro de privacidad de OpenAI: mismo modelo de 1.5B, devuelve PII como segmentos estructurados en lugar de enmascararla.
OpenAI publicó Privacy Filter — un modelo que oculta la PII en el texto. Los defensores lo usan para que los datos no se filtren.
Pero toda defensa tiene una segunda cara. Los atacantes también necesitan PII. De registros, volcados, buckets de S3 abandonados, bandejas de entrada robadas. La misma tarea: encontrar todo lo personal en un montón de texto.
Privacy Filter enmascara. Privacy Parser extrae.
El mismo modelo, la misma taxonomía de etiquetas, los mismos pesos. En lugar de <REDACTED> obtienes spans estructurados — qué, dónde, qué tipo.
Defensa: audita tus datos antes de que se filtren. Ataque: analiza los de otros después de que se filtraran.
La herramienta no sabe de qué lado está. Es solo un buen parser.
uv venv
uv pip install -e ./privacy-filter
uv pip install -e ./pii_parser
La primera ejecución descarga el checkpoint opf 1.5B (~3 GB) en ~/.opf/privacy_filter/.
from pii_parser.hybrid import HybridPIIParser
parser = HybridPIIParser(device="cpu")
result = parser.parse(
"Hi Quindle Testwick ([email protected] / +1-415-555-0102), "
"account 40702810500001234567, 14 Beautiful Ct, Anytown USA, "
"password Priv4cy-Filt3r-2026."
)
for s in result.spans:
print(f"{s.label:18} {s.text}")
private_person Quindle Testwick
private_email [email protected]
private_phone +1-415-555-0102
account_number 40702810500001234567
private_address 14 Beautiful Ct, Anytown USA
secret Priv4cy-Filt3r-2026
python -m pii_parser.cli_model "Alice paid 40702810500001234567 on 2026-05-17."
Hybrid = modelo + span-merge + regex backstop. Usa este.
Taxonomía opf v2 — 8 categorías:
private_person · private_email · private_phone · private_address ·
private_url · private_date · account_number · secret
text
↓
opf 1.5B → BIOES logits → Viterbi (tuned) → char spans
↓
span-merge (glues Quindle + Testwick)
↓
regex backstop (URL, secret, account — where the model misses)
↓
spans[]
python pii_parser/tests/test_hybrid.py
Fixture F1: 0.929
Scenarios: 8/8 passed
Latency: ~600 ms CPU
Apache-2.0.
| Backend | Pesos | Velocidad | F1 |
|---|
PIIParser | ninguno | µs | 1.000 |
ModelPIIParser | 1.5B | 500 ms CPU | 0.733 |
HybridPIIParser | 1.5B | 600 ms CPU | 0.929 |