Si può creare una versione personalizzata di ChatGPT? E' possibile creare un modello, addestrarlo con i dati privati di un'azienda ed usarlo per creare un ChatBOT personalizzato?
Fino a qualche tempo fa la risposta sarebbe stata “si, ma con molte limitazioni …“, da Agosto 2024 invece la situazione è cambiata: OpenAI ha introdotto il fine-tuning per i nuovi modelli GPT-4o e GPT-4o-mini, rendendo semplice e conveniente creare una versione personalizzata del modello GPT-4o, istruito su un dataset proprietario.
E' infatti grazie al fine-tuning di un modello di intelligenza artificiale che si possono ottenere risultati precisi e su misura.
I contenuti dell'articolo
Cos'è il Fine-Tuning
Nel campo dell'intelligenza artificiale (AI) e del machine learning, il fine-tuning rappresenta una delle tecniche più avanzate per ottenere modelli specifici che rispondono con precisione a particolari esigenze aziendali e settoriali.
Consente infatti di prendere modelli già pre-addestrati (Es GPT-4o) e migliorare ulteriormente la loro capacità su nuovi set di dati, ottimizzando così il tempo e le risorse necessarie per la personalizzazione.
Con questa tecnica quindi avrai la possibilità di sfruttare tutte le funzionalità dei nuovissimi modelli GPT-4o addestrato sui dati in tuo possesso e quindi customizzati sulla base delle tue esigenze.
La cosa davvero importante è che il nuovo modello sarà disponibile e visibile solo a te ad alla tua organizzazione, per cui i dati utilizzati per l'addestramento non andranno in alcun modo a modificare il modello standard di ChatGPT.
Quali modelli possono essere “affinati”
La scelta del modello da affinare (fine-tuning) dipende dallo scopo dell'applicazione che dovrai implementare.
I modelli di linguaggio naturale, come quelli della serie GPT di OpenAI, sono ideali per compiti che richiedono comprensione e generazione di testo, infatti sono progettati per comprendere contesti complessi e generare risposte articolate.
Possono essere adattati per settori specifici come quello medico, legale, ingegneristico o finanziario, rendendoli strumenti potenti per chatbot specializzati, sistemi di ricerca avanzata e assistenti virtuali.
Nel momento in cui scrivo l'articolo i modelli di OpenAI che possono essere affinati con un addestramento specifico sono i seguenti:
- gpt-4o-2024-08-06
- gpt-4o-mini-2024-07-18
- gpt-4-0613
- gpt-3.5-turbo-0125
- gpt-3.5-turbo-1106
- gpt-3.5-turbo-0613
In questo momento il modello gpt-4o-mini è considerato il migliore per la maggior parte degli utenti, grazie al bilanciamento tra prestazioni, costi e facilità d'uso.
Sembrerebbe un controsenso, ma quando dobbiamo fare il fine-tuning di un modello per usarlo in una applicazione dedicata, è consigliabile utilizzare un modello che non sia troppo “intelligente” (esempio GPT-4o) proprio perché vogliamo istruirlo noi e indurlo a ragionare in modo relativamente semplice e solo uno specifico set di dati.
È possibile anche effettuare il fine-tuning su un modello già raffinato, questa operazione è utile quando si acquisiscono nuovi dati e si desidera evitare di ripetere i passaggi di addestramento precedenti.
Non esiste un limite specifico al numero di volte in cui un modello già affinato può essere ulteriormente raffinato. Tuttavia, è importante considerare che ogni ulteriore fine-tuning potrebbe ridurre la generalizzabilità del modello, portando a un sovra-adattamento ai dati aggiuntivi e, quindi, a una perdita di prestazioni su dati generici.
L'ideale è pertanto monitorare le prestazioni del modello dopo ogni fase di fine-tuning per garantire che continui a rispondere in modo efficace alle nuove esigenze.
L'inferenza
Nell'articolo spesso parlo di inferenza, ma cos'è l'inferenza?
L'inferenza in ambito di intelligenza artificiale si riferisce al processo attraverso il quale un modello pre-addestrato utilizza le informazioni apprese durante la fase di addestramento per generare risposte o fare previsioni basate su nuovi input.
In altre parole è la fase operativa in cui il modello applica le sue conoscenze per rispondere a domande, analizzare dati o eseguire compiti specifici.
Questo processo è fondamentale per l'uso pratico di modelli di machine learning, poiché permette di trarre valore dalle capacità del modello in situazioni reali.
Quando usare il fine-tuning
Il fine-tuning diventa particolarmente rilevante quando un modello generico non riesce a gestire con sufficiente precisione i dati particolari di un'organizzazione.
Per esempio, una banca potrebbe desiderare un assistente AI capace di rispondere a domande sui regolamenti finanziari locali o uno studio di ingegneria potrebbe richiedere informazioni tecniche per rispondere in modo efficace ai bandi di gara.
Anche in quelle situazioni in cui la precisione è cruciale, come la diagnostica medica o l'analisi legale, il fine-tuning può fare la differenza, migliorando la capacità di comprensione di un modello e riducendo errori legati all'ambiguità o alla generalità delle risposte.
Fine tuning vs GPTs
In questo articolo ho parlato dei GPTs personalizzati di ChatGPT versione plus.
I GPT personalizzati rappresentano una soluzione rapida e intuitiva per creare versioni personalizzate di ChatGPT, arricchite con dati specifici forniti tramite API Rest o file, e sono accessibili al pubblico.
Il fine-tuning, invece, è un processo più approfondito e mirato, pensato per aziende e professionisti, che permette di adattare un modello di AI per specifiche esigenze aziendali. Questa opzione, seppur a pagamento e privata, offre un controllo più dettagliato e personalizzato, ideale per integrare l'AI in un'infrastruttura aziendale.
Mentre i GPT personalizzati sono perfetti per chi vuole condividere versioni custom di ChatGPT con la comunità, il fine-tuning è indispensabile per progetti più sofisticati e integrati in contesti professionali.
Come fare il fine-tuning con Pyton e le API OpenAI
Con gli ultimi rilasci fatti da OpenAI effettuare il fine tuning di un modello è diventata un'operazione relativamente semplice, è possibile farla in vari modi, i principali sono
- tramite pyton
- tramite node.js
- da interfaccia web di OpenAI (dashboard)
Una volta fatto il fine tuning e creato il modello custom poi potrai utilizzarlo anche tramite API Rest, esattamente come faresti per i modelli standard di OpenAI.
In questo articolo vedremo come fare il fine tuning usando le librerie ufficiali di pyton e poi come usare il nuovo modello tramite API REST e playground web
Gli step da seguire per creare un modello custom con il fine-tuning sono i seguenti:
- Preparare i dati di addestramento.
- Caricare i dati di addestramento.
- Addestrare un nuovo modello affinato.
- Valutare i risultati e tornare al passaggio 1, se necessario.
- Utilizzare il modello affinato.
Iniziamo quindi ad analizzare ogni singolo step.
Preparare i dati di addestramento
Preparare un dataset di qualità è fondamentale per un fine-tuning efficace. La qualità dei dati influisce direttamente sulla capacità del modello di comprendere e rispondere correttamente ai nuovi input.
È importante che i dati siano rappresentativi del contesto in cui il modello opererà e devono essere accuratamente etichettati, completi e privi di ambiguità per garantire un addestramento efficace.
Limiti e tokens
I modelli AI sono limitati nel numero di tokens che possono elaborare in una singola esecuzione. Un token rappresenta una porzione di testo e può essere una parola, un carattere o una parte di parola. Questi limiti possono influenzare la dimensione dei dati utilizzabili e il modo in cui il modello gestisce le richieste, specialmente in applicazioni con testi lunghi.
Costi
I costi del fine-tuning variano in base alla complessità del modello e al volume di dati utilizzati. È cruciale valutare attentamente questi costi per determinare la fattibilità del progetto e pianificare il budget necessario. Investire in un fine-tuning di qualità può portare a benefici significativi in termini di precisione ed efficienza del modello.
A questa pagina trovi i dettagli dei costi relativi all'uso di modelli generati con il fine-tuning.
La struttura dei file
I file da caricare per effettuare il fine tuning devono avere tutti una struttura standard, del tutto simile al json che viene generato dalle API Rest “completion” usate per creare chat simili a ChatGPT
Il file da caricare deve essere con estensione .jsonl (lista json) e deve avere questo formato:
{“messages”: [{“role”: “system”, “content”: “Marv is a factual chatbot that is also sarcastic.”}, {“role”: “user”, “content”: “What's the capital of France?”}, {“role”: “assistant”, “content”: “Paris, as if everyone doesn't know that already.”}]}
{“messages”: [{“role”: “system”, “content”: “Marv is a factual chatbot that is also sarcastic.”}, {“role”: “user”, “content”: “Who wrote ‘Romeo and Juliet'?”}, {“role”: “assistant”, “content”: “Oh, just some guy named William Shakespeare. Ever heard of him?”}]}
In questo articolo farò un esempio concreto per dimostrare le potenzialità del fine-tuning, cercherò infatti di creare un modello che contenga informazioni su un evento inesistente, da me inventato.
L'evento di test sarà una fantomatica “sagra della porchetta della Tuscia”, per cui andrò a caricare 10 messaggi nel file .jsonl contenenti informazioni inventate su questo evento fittizio.
Considera che il numero minimo di messaggi accettato da OpenAI è proprio 10, per cui non puoi caricare un file che contenga meno di 10 messaggi.
Predisporre l'ambiente Pyton per OpenAI
In questo articolo sto dando per scontato che tu abbia già installato pyton nel tuo sistema, in caso contrario procedi con l'installazione, ci vorranno pochi minuti.
Ora che hai configurato pyton dovrai creare una nuova API KEY OpenAI, ti consiglio di usare una API Key di progetto e non la API Key generale, cosi da rendere il processo più sicuro e controllato.
Nella sezione “SETTINGS > ORGANIZATION > API keys” della developer dashboard di OpenAI potrai creare una nuova api key di progetto.
Ora che hai installato pyton e creato la tua chiave inseriscila tra le variabili d'ambiente, per evitare di inserirla direttamente nel codice.
Questi i comandi per linux/macos e Windows
#macos/linux export OPENAI_API_KEY="your_api_key_here"
#windows setx OPENAI_API_KEY "your_api_key_here"
Come ultimo step installa le librerie pyton di OpenAI tramite questo comando
pip install openai
Ora hai completato la configurazione dell'ambiente di sviluppo e sei pronto per iniziare il processo di fine-tuning.
Caricare i dati di addestramento (Python)
Il caricamento dei dati per il fine-tuning richiede una conoscenza base di Python e delle API di OpenAI. Questo passaggio prevede la formattazione del dataset e la sua configurazione per l'addestramento. Il processo include l'uso di librerie per la gestione e l'invio dei dati al server, garantendo che il dataset sia accettato e ben elaborato.
Come prima cosa dovrai creare un nuovo progetto Pyton (io utilizzo VSCode) e creare il file dataset.jsonl all'interno del quale inserire le 10 domande e risposte da caricare su OpenAI.
Una volta creato il file jsonl con i 10 messaggi da utilizzare sei pronto per inviare il file nello storage di OpenAI dedicato proprio ai dati da usare per il fine tuning.
Crea quindi un nuovo file pyton e chiamalo “upload.py” ed inserisci il seguente codice:
Se analizzi bene il codice puoi notare come la funzione client.files.create:
myfile = client.files.create( file=open("dataset.jsonl", "rb"), purpose="fine-tune" )
Riceva come input il file dataset.jsonl con le domande e risposte ed il motivo del caricamento ossia “fine-tune“.
Al termine del caricamento in output riceverai una risposta simile alla seguente:
FileObject(id='file-Kw47hn4QvS4oTV2k6L9oB55J', bytes=3935, created_at=1730722674,
filename='dataset.jsonl', object='file', purpose='fine-tune',
status='processed', status_details=None)
Il campo fondamentale è l'id (file-Kw47hn4QvS4oTV2k6L9oB55J), che andrà usato nel successivo step.
Puoi verificare che il caricamento sia andato a buon fine anche accedendo alla dashboard sviluppatore di OpenAI, sezione Storage, dovresti trovare il file appena caricato nello stato Ready.
Ora che hai caricato i dati sei pronto per addestrare in fine tuning il modello.
Addestrare un nuovo modello affinato (Python)
Una volta caricati i dati, si procede con l'addestramento vero e proprio. In Python, l'interfaccia delle API consente di avviare il processo con script ben strutturati. Durante questa fase, il modello apprende dai dati specifici forniti e adatta le sue risposte alle esigenze definite.
Procedi quindi in questo modo, crea un nuovo file e chiamalo “batch.py” con le seguenti informazioni
La funzione fondamentale è la seguente:
batch = client.fine_tuning.jobs.create( training_file="file-Kw47hn4QvS4oTV2k6L9oB55J", model="gpt-4o-mini-2024-07-18" )
con la quale hai la possibilità di avviare un nuovo batch (asincrono) di fine tuning usando il file appena caricato (file-Kw47hn4QvS4oTV2k6L9oB55J) ed il modello da te scelto (es gpt-4o-mini-2024-07-18)
Il processo potrà richiedere qualche minuto per il completamento, puoi monitorare lo stato di avanzamento sempre dalla dashboard alla sezione fine-tuning
Verificando ogni singolo step e messaggio ricevuto
Qualora ci fosse qualche problema potrai verificare il motivo sempre da questa dashboard
Al termine del processo potrai utilizzare il nuovo modello addestrato con i dati caricati, il nome del nuovo modello lo trovi in testa alla pagina
Valutare i risultati (Playground)
Ora che il processo di fine tuning è completato potrai valutare i risultati usando il playground di OpenAI. Accedi quindi alla sezione “Playground > Chat” e seleziona il modello standard “gpt-4o-mini”
Ora usando i dati caricati prova a fare una domanda al ChatBOT e verifica che la risposta sia sbagliata.
Se la risposta è sbagliata alla voce Model seleziona il nuovo modello appena generato
Rifai la stessa domanda al modello e questa volta verifica che la risposta sia corretta, se la risposta è corretta allora il processo è andato a buon fine.
Potrai verificare la bontà del processo di fine tuning nella fase di inferenza ovvero nella fase in cui l'AI applica le sue conoscenze per rispondere a domande, analizzare dati o eseguire compiti specifici.
In caso contrario dovrai fornire ulteriori dati e procedere nuovamente con il fine tuning fino a che la risposta non sia corretta, cosi come tutte le altre risposte relative ai dati forniti in fase di upload.
Utilizzare il modello affinato (Playground – API)
Il modello affinato è ora pronto per essere integrato in applicazioni tramite chiamate API. Questo passaggio permette agli sviluppatori di testare le prestazioni del modello e di implementarlo in soluzioni pratiche come chatbot, sistemi di ricerca, e assistenti virtuali, sfruttando la nuova capacità di risposta specifica.
Per integrare il nuovo modello all'interno della tua applicazione potrai tranquillamente utilizzarlo come se fosse un normale modello standard, puoi testare le API Rest usando Postman ed invocando l'endpoint “completions” ovvero l'endpoint che simula un ChatBOT tipo ChatGPT
In questo esempio puoi notare come la risposta fornisca dati esatti sull'evento inventato di sana pianta, la risposta alla domanda “Quando si svolge la sagra della Porchetta della Tuscia?” attinge alle informazioni inviate nel dataset:
{“messages”: [{“role”: “system”, “content”: “Porky è un chatbot che fornisce risposte sulla sagra della Porchetta della Tuscia.”}, {“role”: “user”, “content”: “Quando ci sarà la sagra della Porchetta della Tuscia?”}, {“role”: “assistant”, “content”: “La sagra della porchetta della Tuscia si terrà dal 1 Dicembre al 15 Dicembre”}]}
La stessa domanda fatta con il modello gpt-4o fornisce informazioni prese dall'addestramento standard di ChatGPT ovvero
Trattandosi di un evento inventato cerca di fornire una risposta generica ed incerta, a differenza del modello addestrato.
Il video completo sul mio canale You Tube
Se vuoi approfondire ulteriormente il concetto di fine tuning allora ti consiglio il video che ho rilasciato sul mio canale You Tube
Conclusioni
Il fine-tuning è una tecnica potente che consente di trasformare un modello generico in uno strumento specializzato e altamente performante. Non solo migliora la capacità di comprensione di un modello, ma lo rende anche più utile per applicazioni specifiche. Con un'attenta preparazione e un'adeguata pianificazione, il fine-tuning rappresenta un investimento efficace per chi vuole ottenere il massimo dalle tecnologie AI.
In questo articolo ti ho mostrato passo passo come creare un nuovo modello istruito con i dati in tuo possesso ed usarlo poi all'interno della tua applicazione.
E' importante utilizzare dei dati che siano i più dettagliati possibili e valutare bene quale modello usare per il fine tuning, tenendo in considerazione anche il costo dell'affinamento ed il relativo utilizzo.
E tu? Hai mai utilizzato un modello con la tecnica del fine tuning? Se l'articolo ti è piaciuto dimmi cosa ne pensi nei commenti!
Riferimenti
https://openai.com/index/gpt-4o-fine-tuning/
1 commento
Pingback: I Sistemi RAG - Retrieval-Augmented Generation