Ultima parte, almeno per ora, dedicata ai token e come si usano per creare i testi con ChatGPT, Gemini e gli altri LLM.
Se non avete idea di cosa siano i token e come vengono usati vi invito a leggere gli articoli precedenti:
Esplorando il Mondo dei Token nei LLM: Cosa sono i Token
Esplorando il Mondo dei Token nei LLM: Tokenizzazione
Esplorando il Mondo dei Token nei LLM: Comprendere i Testi
Come i token vengono usati per creare i testi
La possibilità di riconoscere il testo e avere i token e le sequenze ben catalogate nello spazio vettoriale permette non solo di riconoscere il testo.
Ma permette anche di prendere i token simili e ricombinarli per produrre una versione diversa dello stesso testo.
Vediamo come funziona, a grandi linee, come i token sono l’elemento fondamentale per creare i testi in maniera efficace, e come hanno permesso questa rivoluzione informatica.
Migliore è l’addestramento migliore sarà il risultato
La fase di addestramento è cruciale per dotare un LLM della capacità di creare i testi.
In questa fase, il modello viene esposto a enormi quantità di testo provenienti da diverse fonti, e migliori saranno questi testi migliore sarà il risultato finale.
Durante l’addestramento, il modello analizza queste sequenze di token e impara le relazioni statistiche tra di essi. Quindi più combinazioni di token vengono prodotte per lo stesso concetto, più sarà in grado di creare del testo sempre diverso.
In particolare, il modello cerca di prevedere, dato un certo numero di token precedenti in una sequenza, quale sarà il token successivo più probabile.
Dato che questa previsione si basa sulla frequenza con cui determinati token compaiono insieme o in contesti simili nel set di dati di addestramento, più ampio è il campione e più token hanno la possibilità di essere scelti.
É chiaro che se si prendono i post dei social network rischiamo di avere risultati tipo “ieri i figli mii anno mangiato gli amburgher”?
E questo renderebbe il tutto una inutile perdita di tempo e denaro.
Fare la scelta giusta
Il modello, avendo appreso le relazioni tra i token durante l’addestramento, utilizza questa sequenza di input per stimare un valore vettoriale per il token successivo più appropriato, statisticamente parlando.
In pratica se il modello deve finire la frase
"A chi sta abbaiando il mio..."
e ha tra l'elenco dei token:
"cane", "chihuahua", "leone" e "coccodrillo"
andrà a pescare quelli con una percentuale più alta e se è addestrato bene sceglierà "chihuahua" e non "coccodrillo".
Questo perché le statistiche con i vettori "abbai"+"ando" sono:
"chihuahua": 50%
"can"+"e": 30%
"cagn"+"olino": 18%
"leon"+"e": 1%
"coccodrill"+"o":1%
Questo valore vettoriale è il risultato dell’elaborazione della sequenza di input attraverso le architetture interne del modello, come i meccanismi di attenzione presenti nel Transformer di Google.
Calcolare correttamente la probabilità
Dopo aver stimato il valore vettoriale per il token successivo, il modello utilizza questo vettore per selezionare un token dal suo vocabolario.
La scelta non è casuale, ma si basa sul calcolo di una distribuzione di probabilità su tutti i token del vocabolario o di una specifica zona dello stesso.
Ricordiamoci che parole dal significato simile nello spazio dei vettori si trovano più o meno vicine tra loro.
Questo permette di confrontare il valore vettoriale stimato con i vettori embedding di tutti i token presenti nel vocabolario.
Il modello quindi seleziona il token con la probabilità più alta.
Se ci avete fatto caso i modelli LLM usati tramite API chiedono la “temperatura” a cui si vuole il risultato.
La temperatura è una specie di rotellina che indica al modello quanto può “allargare” la percentuale per la scelta.
Semplificando, se la temperatura è 0 la percentuale sarà prossima al 100%, se la temperatura è 2, il massimo per ChatGPT, allora sceglierà (tiro a indovinare) una percentuale tra il 97% e il 100%.
Magari in quel 3% per quella fase di generazione del testo vanno a cadere 50 parole diverse.
Iterazioni
La generazione di testo da parte di un LLM è un processo iterativo. Una volta che il modello ha selezionato il token successivo, questo token viene aggiunto alla fine della sequenza di input esistente. Questa nuova sequenza, ora più lunga, viene quindi re-immessa nel modello come input per prevedere il token successivo.
Questo ciclo si ripete un token alla volta.
Che è anche il motivo per cui tutte le UX fanno vedere che scrive una parola alla volta, e non una frase o un modello alla volta.
A ogni iterazione, il modello considera l’intero contesto della sequenza generata fino a quel punto per stimare il token successivo più probabile. Cosa che ha perfettamente senso se vuoi evitare di leggere di gatti che abbaiano e di sottomarini che volano a stormi.
Il processo continua fino a quando viene raggiunto un criterio di arresto, come il raggiungimento di una lunghezza massima specificata per il testo generato o la generazione di uno speciale token di “fine testo”.
Questo approccio iterativo permette al modello di generare testi di lunghezza variabile e di mantenere una coerenza contestuale nel tempo.
Creare i testi per traduzioni e riassunti
Abbiamo visto, a grandi linee, come viene “compreso” il significato di un testo, abbiamo visto anche come viene generato un nuovo testo.
Se ci avete fatto caso in tutto l’articolo non ho mai parlato di “lingua” o “idioma”.
É un processo matematico, che senso ha parlare di “lingua”?
Vien da se che se io posso addestrare il mio modello con testi in lingue diverse il mio modello avrà i token in queste lingue, e il mio spazio vettoriale con i token vedrà molto vicini tra loro “dog”, “cane” e “perro”.
Se metto un’etichetta a ogni token che indica la lingua posso chiedere di produrre il testo in italiano, anche se le fonti di addestramento di quell’argomento sono tutte in inglese o spagnolo, o tutte e due.
Quindi formalmente possiamo dire che nella traduzione l’input al modello è una sequenza di token in una lingua sorgente. Durante l’addestramento su fonti multilingue, il modello impara le corrispondenze e le relazioni semantiche tra i token di diverse lingue.
Il processo di generazione iterativo produce quindi una sequenza di token nella lingua di destinazione, prevedendo di volta in volta il token più appropriato in quella lingua dato il contesto della frase sorgente e i token già tradotti.
Dato che l’italiano moderno prevede tantissime parole e frasi in lingue diverse, specialmente in inglese, è probabile che una traduzione o generazione dall’inglese all’italiano contenga delle frasi intere in inglese.
Il riassunto fa un ragionamento analogo, ma in questo caso il modello, se è stato addestrato su dati contenenti testi e i loro riassunti, impara a identificare le informazioni più importanti e a generare una sequenza di token più breve ma dallo stesso significato.
Il processo iterativo di previsione del token successivo quindi sceglierà i token più adatti ad eliminare le parti meno influenti per la creazione del riassunto, cercando così di essere coerente e al testo originale:

Dato che la possibilità di errore, o come si dice ora di allucinazioni, durante la generazione di un riassunto è elevato, io lo uso per testare la bontà di un modello.
In entrambi i casi il principio di base per creare i testi rimane lo stesso.
Il modello utilizza la conoscenza appresa durante l’addestramento per prevedere la sequenza di token più probabile, e applica questo processo in modo iterativo per generare l’output richiesto.
L’importanza dei token e della loro numerosità
Se avete letto tutto l’articolo, oltre al mio personale ringraziamento, avete ben chiaro perché c’è questa “battaglia” in corso a fare i LLM con più token possibili.
La quantità di token presenti in un LLM indica non solo la capacità di identificare argomenti, temi e costrutti, ma anche la capacità di creare i testi più variabili, che li fanno sembrare più originali, in qualche modo più naturali.
Articolo 4 di 4
Articoli precedenti:
Esplorando il Mondo dei Token nei LLM: Cosa sono i Token
Esplorando il Mondo dei Token nei LLM: Tokenizzazione
Esplorando il Mondo dei Token nei LLM: Comprendere i Testi
Francesco Contini, Data & Search Engine Expert, Founder Rubedo Data Solutions