Indice

Generare dati sintetici per rizzo-pii

1. Cosa sono i dati sintetici e perché sono importanti

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:

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.

2. Il progetto: rizzo-pii

Local, reversible PII anonymization for Italian legal text — use frontier models without giving up your data.

Le due modalità di anonimizzazione

I dati sintetici che genero alimentano il dataset community del progetto: rizzoaiacademy/anonimizzazione-testi-italiano su Hugging Face.

3. Hardware e modello per la generazione

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.

4. Mini guida: contribuire da casa

Prerequisiti

1. Clona il repository

git clone https://github.com/Rizzo-AI-Academy/rizzo-pii
cd rizzo-pii

2. Ambiente virtuale e dipendenze

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

3. Avvia llama.cpp con il modello

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.

4. Imposta le variabili d'ambiente (da non committare)

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=…).

5. Prova locale senza caricare nulla

python src/data_pipeline/contribute_dataset.py --n 300 --handle iltuonome --no-upload

Controlla l'output (distribuzione dei tag) prima del batch vero.

6. Genera il batch e apri la Pull Request

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

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.