🏥

Med-Anonymizer

De-identificazione clinica AI · OpenMed

🏥 Med-Anonymizer

Servizio REST open source per la de-identificazione automatica di informazioni personali sensibili (PII) da testi clinici italiani, risorse FHIR e messaggi HL7 v2, basato sui modelli AI italiani di OpenMed.

⚡ Veloce — 110M params 🌍 Multi-arch AMD64 + ARM64 🐳 Docker · Kubernetes ready 🔒 HIPAA · GDPR 📄 Apache 2.0

⚙️ Come funziona

  1. 1
    Invio del testo — il client invia il documento tramite REST (JSON, testo libero, FHIR o HL7).
  2. 2
    Chunking automatico — per documenti lunghi (>1 200 char) il testo viene diviso in segmenti ai confini di paragrafo/frase.
  3. 3
    NER con OpenMed — il modello BERT token-classification rileva le entità PII con posizione e score di confidenza.
  4. 4
    Redazione — le entità vengono sostituite con [ENTITY_TYPE] o [REDACTED] preservando offset e struttura.
  5. 5
    Risposta — il testo anonimizzato, le entità rilevate e i metadati vengono restituiti in JSON.

🤖 Modelli OpenMed disponibili

Chiave Modello HuggingFace Params F1 Micro Note
italian-superclinical-base OpenMed-PII-Italian-SuperClinical-Base-184M-v1 184M 0.960 default DeBERTa-v3-base · veloce
italian-bigmed-large OpenMed-PII-Italian-BigMed-Large-560M-v1 560M 0.967 XLM-RoBERTa-large · note cliniche
italian-superclinical-large OpenMed-PII-Italian-SuperClinical-Large-434M-v1 434M 0.973 DeBERTa-v3-large · #1 IT

Tutti i modelli sono ottimizzati per l'italiano e valutati sul dataset AI4Privacy PII Masking 400k (subset italiano).

🔌 Endpoint REST

GET
/api/v1/health — health check e modelli caricati
GET
/api/v1/models — lista modelli disponibili e metriche
POST
/api/v1/anonymize/text

Anonimizza testo clinico libero. Chunking automatico per testi lunghi.

POST
/api/v1/anonymize/fhir

Anonimizza una risorsa FHIR R4 (JSON) ricorsivamente.

POST
/api/v1/anonymize/hl7

Anonimizza messaggi HL7 v2.x preservando la struttura a segmenti.

POST
/api/v1/detect

Solo rilevamento NER (senza redazione). Restituisce entità con posizione e score.

GET
/docs — Swagger UI interattivo · /redoc — ReDoc

🏷️ Categorie PII rilevabili (54 tipi)

👤 Identità personale

name date_of_birth age gender race_ethnicity nationality religion marital_status occupation education disability sexuality

🆔 Identificatori

ssn medical_record_number health_plan_beneficiary_number tax_id passport_number drivers_license national_id biometric_identifier account_number credit_debit_card vehicle_id device_id license_plate certificate_license_number unique_identifier bank_account

📍 Localizzazione

address city state country zip_code geographic_coordinates

📞 Contatti & Rete

phone_number fax_number email url ip_address mac_address username

📅 Temporale

date time date_time

🏢 Organizzazione

organization political_affiliation language

🚀 Quick start

Anonimizza con curl:

curl -X POST http://localhost:8000/api/v1/anonymize/text \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Paziente Mario Rossi, SSN: 123-45-6789",
    "model": "biomedbert-base"
  }'

🏗️ Architettura

FastAPI — framework ASGI ad alte prestazioni
🤗
HuggingFace Transformers — pipeline NER token-classification
🧠
OpenMed PII models — BERT fine-tuned su Nemotron-PII (54 entità)
🐳
Docker multi-arch — immagine linux/amd64 + linux/arm64
☸️
Kubernetes — Deployment, Service, Ingress pronti

🔒 Conformità

  • HIPAA Safe Harbor — rileva tutte le 18 categorie PHI
  • GDPR Art. 4(5) — pseudonimizzazione dei dati personali
  • Strumento assistivo: per applicazioni critiche verificare sempre il risultato