I dati sintetici sono dati generati da un modello (in questo caso un LLM) che ne riproducono struttura, linguaggio e distribuzione, ma non contengono informazioni reali. Qui si tratta di esempi “PII” in prosa legale italiana: testi con etichette BIO esatte e checksum matematicamente validi per codice fiscale, partita IVA e IBAN — ma nessun dato personale vero.
Perché sono importanti:
rizzo-pii:0.3B viene addestrato e testato su 22 categorie di dati personali, inclusi identificativi specifici del diritto italiano (CF, PIVA, dati catastali) che nessun modello open copre.Il principio del progetto è: “LLM autore, codice etichettatore” — l'LLM scrive solo la prosa con segnaposto; il codice inietta i valori, le etichette BIO esatte e i checksum validi.
Local, reversible PII anonymization for Italian legal text — use frontier models without giving up your data.
rizzo-pii:0.3B, un modello di token-classification italiano-first (backbone mmBERT/ModernBERT, ~0.3B parametri, ~0.5 GB di RAM, CPU-friendly) che rileva 22 categorie di dati personali, inclusi gli identificativi del diritto italiano: codice fiscale, partita IVA, dati catastali.Le due modalità di anonimizzazione
I dati sintetici che genero alimentano il dataset community del progetto: rizzoaiacademy/anonimizzazione-testi-italiano su Hugging Face.
| Componente | Scelta |
|---|---|
| GPU | NVIDIA GeForce RTX 3090 (24 GB VRAM) |
| Motore di inference | llama.cpp, server in modalità OpenAI-compatibile |
| Modello | Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp (variante quantizzata, MTP) |
Un modello ~27B in quantizzazione a 3 bit sta comodo nei 24 GB della 3090 e viene servito in locale: nessuna chiave API, nessun prompt che lascia la macchina — coerente con un progetto sulla privacy.
piphf auth login oppure HF_TOKEN)git clone https://github.com/Rizzo-AI-Academy/rizzo-pii cd rizzo-pii
python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt # include huggingface_hub; per i dati NON serve torch
llama-server -m Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp.gguf --port 8080
Va bene qualsiasi endpoint OpenAI-compatibile: llama.cpp, Ollama, vLLM, LM Studio.
export HF_TOKEN="hf_xxx" export LLM_BASE_URL="http://localhost:8080/v1" export LLM_MODEL="Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp" export OPENAI_MODEL="Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp" export MODEL="Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp"
Se usi Gemini al posto del modello locale: export GEMINI_API_KEY=… (PowerShell: $env:GEMINI_API_KEY=…).
python src/data_pipeline/contribute_dataset.py --n 300 --handle iltuonome --no-upload
Controlla l'output (distribuzione dei tag) prima del batch vero.
python src/data_pipeline/contribute_dataset.py --n 5000 --handle iltuonome \ --per-type 3 --boost ORG=6 IBAN=4 CF=4 CATASTO=3 DOCID=3
–per-type N — quanti nuovi template per tipo di documento far scrivere all'LLM (default 2)–boost TAG=N — rinforza i tag più deboli del dataset–no-upload — solo locale, per vedere cosa verrebbe inviato–offline — usa solo i template built-in (dati meno “nuovi”: da evitare se si può)
Lo script apre una Pull Request sul dataset rizzoaiacademy/anonimizzazione-testi-italiano; un maintainer la revisiona prima del merge.
Scritto da ugo formattato in docuwiki syntax da ai.