Cosa sono i dati sintetici
Per addestrare un modello servono esempi, dati, token. Tanti. Se si vuole creare un assistente che risponde ai clienti ci vogliono migliaia di conversazioni, un sistema che legge contratti vuole migliaia di contratti. Non sempre questi dati da dare in pasto al modello esistono. Quando mancano, sono costosi o sono pieni di informazioni riservate, si ricorre ai dati sintetici.

Cosa sono i dati sintetici? Testi, conversazioni o codice generati da un LLM e costruiti per somigliare a quelli reali.
Ci sono pro e contro nell’utilizzare i dati sintetici. Tra i pro: costi contenuti, ampia copertura, varietà che si può controllare. Tra i contro: contenuti sbagliati, esempi che non somigliano abbastanza a quelli veri per stile e varietà, bias che si amplificano. Usare dati sintetici di bassa qualità porterà a creare un modello finale che “sbaglierà” il proprio compito più spesso del previsto. Quindi come mantenere alta la qualità dei dati sintetici?
Generare quantità è facile, qualità è più difficile
Chiedere a un modello di scrivere diecimila esempi richiede qualche minuto. Il risultato è una quantità enorme di dati dove convivono esempi ottimi, mediocri e completamente errati. Ma come facciamo a verificare le risposte? Farlo manualmente sarebbe troppo lungo e costoso.
Un paper del 2024 divide il lavoro in tre tempi: generazione, selezione e valutazione.
Link al paper: On LLMs-Driven Synthetic Data Generation, Curation, and Evaluation: A Survey
Generazione dei dati sintetici
Il metodo più ovvio è chiedere “Scrivimi cento conversazioni tra un cliente e l’assistenza”. Il modello restituisce 100 esempi, ma hanno un difetto: il prompt di partenza è sempre lo stesso, quindi i risultati saranno molto simili e il modello tenderà a ripetersi.
Vediamo di seguito una tecnica per risolvere il problema:
Il prompt va generato con:
- La descrizione del compito: il contesto in cui il modello deve muoversi. Studi dimostrano che funziona anche dargli un ruolo, ad es. “supponi di essere xxx”. Alcuni lavori usano knowledge graph per ricavare i temi di un dominio.
- Prompt condizionali/dinamici: coppie attributo-valore che obbligano il modello a variare, ad esempio tema, lunghezza e stile.
- Gli esempi: si mostrano al modello alcuni casi e lui ne produce di simili (in-context learning).
è più facile capirlo con un esempio:
1. Descrizione del compito (resta uguale)
Sei un operatore del servizio clienti di un’azienda che vende elettrodomestici. Devi scrivere una conversazione realistica tra un cliente e l’assistenza, in italiano, nel formato “Cliente: … / Operatore: …”. L’operatore risolve il problema oppure lo passa a un collega, senza inventare informazioni che non ha.
2. Condizioni (cambiano e ruotano ad ogni richiesta)
Tema: ritardo nella consegna
Tono del cliente: irritato ma educato
Lunghezza: 6 battute
Esito: il problema non viene risolto subito
3. Esempi (cambiano e ruotano ad a ogni richiesta)
Esempio di conversazione già approvata:
Cliente: Buongiorno, il lavaggio che ho ordinato dieci giorni fa non è ancora arrivato.
Operatore: Mi dispiace per l’attesa. Mi dà il numero d’ordine, così controllo subito lo stato della spedizione?
(…e così via per tutta la conversazione)
Condizioni ed esempi ruotano a ogni richiesta: in questo modo il prompt sarà sempre diverso.
Filtrare i dati sintentici
Come visto dare per scontato che i dati sintetici siano corretti è un grosso errore. I dati vanno quindi filtrati. Come? Vediamo alcuni esempi:
1. Filtrare attraverso regole definite: via gli esempi troppo corti, i doppioni (deduplicazione). Questi sono sistemi puramente algoritmici.
2. Sistemi più avanzati che prevedono classificatori o LLM: Probabilità di generazione (SuperGen), Voto di un LLM, LLM vs classificatore etc.
Valutazione
Lo step finale è la valutazione, per verificare se l’intero processo ha creato dei dati di qualità.
Ci sono 2 metodi: diretto e indiretto.
Il metodo diretto valida direttamente i dati generati e si può fare attraverso:
1. Controllo manuale: si prende un campione casuale ad es. 200 testi sintetici e si controlla manualmente quanti di questi sono corretti, quanti sono errati, quanto sono simili tra loro etc..
2. Controllo automatico: si fa fare lo stesso controllo manuale ad un LLM terzo
Il metodo indiretto invece non va a verificare i dati generati, ma come questi modificano il modello. Si va quindi a validare il modello dopo che è stato addestrato, attraverso dei benchmark per per vedere se performa meglio o peggio di prima e di quanto.
Se i risultati sono soddisfacenti e le percentuali di errore sono molto basse possiamo ritenere il lavoro concluso, se sono troppo alte va rivisto lo step di generazione o di selezione e filtraggio.