I modelli di Intelligenza Artificiale che abbiamo nominato nelle lezioni precedenti hanno acquisito una nuova connotazione nel contesto dell'AI generativa (spesso detta GenAI). Si parla molto al giorno d'oggi di Large Language Model (tipicamente abbreviato in LLM) in cui il modello sintetizza il risultato dello studio di grandissime quantità di dati sviluppando la capacità di comprendere e produrre linguaggio umano.
I Large Language Model
Questo aspetto permette di rendere tali modelli particolarmente fruibili in quanto vi potremo direzionare richieste pervenute addirittura dall'input umano. Prendiamo uno degli esempi più eclatanti della storia dell'AI, il già citato ChatGPT. Si tratta della condivisione di GPT (Generative Pre-trained Transformer) - un LLM sviluppato da OpenAI - mediante funzionalità conversazionali (l'elemento Chat).
Quando a brevissimo inizieremo a sviluppare le nostre applicazioni con AI faremo in buona parte proprio questo. Raccoglieremo l'input utente, lo arricchiremo, integreremo e dirigeremo la richiesta verso un LLM che restituirà una risposta. Le architetture di cui parleremo saranno più evolute ma il loro costrutto seguirà questo flusso di interazione.
Per quanto riguarda l'aggettivo Large, questo non si riferisce tanto alle grandi quantità di dati studiati quanto alla gigantesca quantità di parametri di apprendimento su cui questi modelli si basano. Si passa da modelli "piccoli", che ragionano in termini di pochi miliardi di parametri, ai 175 miliardi di GPT 3 per proseguire con previsioni a breve nell'ordine di trilioni. A seconda del numero di parametri di apprendimento avremo dimensioni diverse per i modelli. Ciò, soprattutto per un loro uso in locale, assumerà una certa rilevanza.
Linguaggi e token
La AI generativa deve saper non solo interpretare ma anche generare il linguaggio umano. Un concetto dominante da un punto di vista sia teorico sia pratico (anche in termini di fatturazione) è quello di token. Elemento che identifica una parola intera o una sua porzione.
Generare linguaggio consiste proprio nel fare in modo che il modello sappia intuire di volta in volta qual è il token più adatto per proseguire una frase. Tutto ciò ruota attorno al concetto di self-attention una sorta di identificazione di quanto una parola conti in una determinata frase. Non solo per la sua forma in sé stessa ma per quello che il suo significato assume in uno specifico contesto.
I Transformer
Gli LLM si imperniano nel Deep Learning in quanto trovano fondamento nelle reti neurali ma la svolta vera e propria dell'Intelligenza Artificiale è più recente e coincide con l'ideazione dei Transformer. Delle strutture che non discuteremo nel dettaglio ma che possiamo immaginare basate sulla combinazione di componenti dette encoder che trasformano il testo di input in una struttura intermedia e decoder che portano dalla struttura intermedia al testo in uscita. In definitiva quindi, insieme, possono condurci dal testo immesso (input utente o altro) a quello generato in uscita che può consistere in traduzioni, trattazioni, testo colloquiale etc.
Non è detto che ogni LLM contempli sia encoder che decoder. Esistono infatti LLM encoder only specializzati più sulla comprensione del testo per lavori come il question answering. Tra questi possiamo citare quelli che appartengono alla famiglia BERT (Bidirectional Encoder Representations from Transformers). Esistono i decoder only il cui punto di forza è la generazione di testo tra cui troviamo GPT o Llama di Meta. Inoltre, vi sono versioni la cui architettura è costituita sia da encoder sia da decoder, dette encoder-decoder.
Scegliere un LLM
L'ambito degli LLM è piuttosto ricco di alternative e quale scegliere può dipendere da una serie di fattori. Vediamo i più determinanti che ci orienteranno durante la nostra guida.
Gli LLM possono essere disponibili in locale o da remoto. La seconda tipologia annovera tutti i principali modelli, soprattutto perché gestiti e alimentati dalle potenti strutture in Cloud dei provider più importanti.
Ad esempio, vedremo che per poter integrare le risorse offerte da OpenAI sarà sufficiente collegarci alle loro API dalle nostre applicazioni. Fare ciò con OpenAI o altri provider sarà un modo sorprendentemente comodo di mettere grande potenza a disposizione delle nostre applicazioni ma evidenzierà vari aspetti su cui porre attenzione tra cui, in primis:
- costi: trattandosi di un servizio offerto ci saranno dei costi da affrontare e la convenienza di ciò dovrà essere valutata in base al progetto che dovremo finanziare. Sebbene non procederemo ad una comparazione di prezzi, si consideri che il costo di tali provider rapportato alla potenza che offrono non è spesso così elevato. Soprattutto per richieste dati di modeste dimensioni finalizzate a studio o sperimentazione;
- riservatezza delle informazioni: lavorare con un modello in rete significa anche far viaggiare i propri dati e ciò, soprattutto per tematiche delicate, potrebbe non essere gradito da tutti gli operatori del settore.
Per tale motivo, il sogno di molte aziende e tecnici impegnati nella AI sarebbe quello di trovare modelli, caratterizzati da un buon connubio tra dimensioni e potenza, da poter usare in locale in modo da ridurre il traffico in rete, eliminare costi e mantenere la riservatezza delle informazioni. Come tutti i compromessi anche questo non è semplice da realizzare e di sicuro non si può puntare a replicare in casa la potenza di OpenAI. Tuttavia, proprio in questa ricerca di soluzioni ha riscontrato un grande successo il progetto Ollama che permette di scaricare in locale modelli di piccole dimensioni in maniera molto facile. Esiste anche in versione Docker: diamoci uno sguardo!
Il Large Language Model Ollama (con e senza Docker)
Ollama può essere installato in locale seguendo le indicazioni per il proprio sistema operativo. Una volta fatto, lo si potrà invocare richiedendo uno dei tanti modelli che mette a disposizione come Llama, Phi3 o Gemma 2 (tra i più gettonati da usare in locale) ed il sistema stesso si preoccuperà di scaricare tutto il necessario: da lì potremo iniziare con l'interazione.
In alternativa, si può procedere allo scaricamento della sua immagine Docker:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
per poi richiamare il modello interagendo direttamente con il container avviato:
docker exec -it ollama ollama run llama3
Parleremo di Ollama nelle prossime lezioni e capiremo come integrarlo nel nostro flusso di lavoro.