Oggi cercherò di spiegare cosa sono i token, da dove arrivano, e come funzionano all’interno dei Large Language Models (LLM).
I token rappresentano i mattoncini che i modelli linguistici utilizzano per elaborare e comprendere il testo e sono tra gli elementi fondamentali per molte applicazioni di intelligenza artificiale, tra cui i Large Language Model (LLM) e il Natural Language Processing (NLP).
La difficoltà è riassumere in un articolo che spieghi come il testo viene trasformato in unità elementari attraverso un processo chiamato tokenizzazione, un procedimento nato decenni fa con i motori di ricerca, e che è diventato il primo passo nella maggior parte delle attività di elaborazione del linguaggio naturale.
Vedremo anche come queste unità vengono utilizzate dai modelli di intelligenza artificiale per elaborare e generare linguaggio naturale, influenzando l’efficienza con cui un modello processa il testo e le sue prestazioni in diverse attività linguistiche.
Cosa sono i Token e perché sono fondamentali per gli LLM
Il Token, o gettone, non nasce con l’Intelligenza Artificiale, ma con i primi strumenti di analisi del testo negli anni ’70. Io li incontrai studiando Lex e Yacc tanti tanti anni fa, poi li ho rincontrati quando iniziai a lavorare sui motori di ricerca, ed ora ritornano con l’Intelligenza Artificiale. Ma non perdiamo tempo in ricordi e lunghe spiegazioni super tecniche.
Nel campo dell’Intelligenza Artificiale e, all’inizio, nell’ambito del Natural Language Processing (NLP), il token rappresenta l’unità minima di testo dotata di significato per un modello di elaborazione del linguaggio naturale.
Significato “matematico” non semantico.
Un token può assumere diverse forme; può essere una parola intera a una parte di una parola (nota anche come sub-word), fino a comprendere un singolo carattere, un segno di punteggiatura o persino un emoji.
La flessibilità nella definizione di un token dipende in gran parte dal processo di tokenizzazione adottato, ma soprattutto dallo scopo finale in cui sono coinvolti i token.
La tokenizzazione è, in sintesi, il processo di segmentazione o suddivisione di una stringa di testo in questi segmenti di caratteri più piccoli, i token. Questo concetto preliminare tenetelo sempre a mente, perché è cruciale e rappresenta il primo passo imprescindibile per rendere i testi comprensibili e analizzabili dalle macchine e dai modelli di intelligenza artificiale.
Prima che un modello possa estrarre significato, identificare pattern o generare nuovo testo, è necessario che il linguaggio umano venga scomposto in token.
Perché si usano i token
I computer lavorano numeri, ed i token trasformano una sequenza di lettere in un numero, e la relazione o la sequenza di i numeri rappresentano frasi.
La loro importanza risiede nel fatto che permettono ai modelli di apprendere le complessità del linguaggio, interpretarne il significato e, infine, generare nuovo testo in maniera coerente e contestualmente appropriata.
Più o meno come facciamo noi con i caratteri: casa, casale, caserma e casetta hanno come base “cas” e diversi postfissi, ma casa, vista come “cas”+”a” è diversa da “cas”+”o”. Semplificando, matematicamente possiamo tradurli in:
"cas" := 1
"a" := 2
"ale" := 3
"erma" := 4
"etta" := 5
"o" := 6
quindi se vogliamo identificare un concetto come "abitazione" e distinguerlo da "caso" come concetto di "coincidenza" possiamo definire qualcosa come:
"abitazione" := [ 1∪2 | 1∪3 | 1∪4 | 1∪5 ]
"coincidenza":= [ 1∪6 ]
Legenda:
[ ... ] = insieme
| = oppure
Semplice no?
Nei Large Language Models (LLM), che sia ChatGPT, Claude o Gemini, la tokenizzazione costituisce il primissimo stadio del processo di elaborazione, trasforma il testo in numeri.
Questi modelli vengono addestrati su enormi quantità di testo provenienti da svariate fonti, come internet. Quindi enormi quantità di numeri, ma non la totalità delle parole.
La tokenizzazione quindi è il passaggio iniziale che consente a questi modelli di “digerire” questa vasta mole di informazioni testuali, trasformandola in una sequenza di elementi che possono essere processati.
Abbiamo capito che una volta che il testo è stato tokenizzato, ogni token può essere convertito in una rappresentazione numerica, processo che può essere fatto in modi diversi a seconda dello scopo.
Questa rappresentazione numerica permette al modello di analizzare le relazioni semantiche e sintattiche tra i token, apprendendo la frequenza con cui certi token appaiono insieme o in contesti simili. La creazione di questa “mappa” è il fulcro del processo di apprendimento sui token è ciò che consente agli LLM di sviluppare una comprensione del linguaggio e di utilizzarla per compiti complessi come la generazione di testo, la traduzione, la risposta a domande e molto altro.
In sintesi, i token sono le unità elementari attraverso cui i Large Language Models “vedono” e comprendono il linguaggio umano. Senza il processo di tokenizzazione, i modelli di IA non sarebbero in grado di interpretare e manipolare il testo, rendendo impossibile lo sviluppo delle sofisticate capacità che caratterizzano gli LLM moderni.
Tokenizzare un testo, i metodi più utilizzati
Come abbiamo letto in precedenza il processo di tokenizzazione è la segmentazione di una stringa di testo in elementi più piccoli che diventano unità logiche che possiamo elaborare .
Ma quanti modi ci sono per tokenizzare un testo? A seconda dello scopo finale ci sono diverse tecniche e algoritmi:
Tokenizzazione basata su spazi
É la più semplice, questo metodo suddivide il testo in base agli spazi bianchi. Ad esempio, la frase “L’intelligenza artificiale sta cambiando il mondo” potrebbe essere tokenizzata in: “L’intelligenza”, “artificiale”, “sta”, “cambiando”, “il”, “mondo”.
Facile ma scarsamente utilizzata, almeno per le lingue romanze come lo spagnolo, il francese, il rumeno e l’italiano.
Tokenizzazione basata su regole
Questo metodo utilizza modelli grammaticali predefiniti per identificare e separare i token. Le regole possono includere la gestione della punteggiatura e di altri simboli per determinare i confini dei token. Ad esempio, una regola potrebbe specificare che la punteggiatura collegata a una parola (come una virgola o un punto) venga trattata come un token separato o inclusa nel token della parola a seconda delle necessità. La segmentazione basata sulla grammatica analizza la struttura grammaticale del testo per identificare i confini tra le unità significative, separando parole da spazi bianchi e punteggiatura.
Tokenizzazione basata su modelli statistici
Se avete letto l’articolo “L’IA Predice il Futuro?” avrete chiaro che la statistica è il cuore matematico dell’IA, in pratica chi lavora alla costruzione delle IA è fissato con la statistica.
E questa tecnica sfrutta la potenza della statistica per calcolare le frequenze e le probabilità statistiche delle sequenze di caratteri o parole all’interno di un corpus di testo per identificare i token.
Sfruttano modelli matematici noti, come i Modelli di Markov Nascosti (HMM), e se vi prendete il tempo di leggere il link sui Modelli di Markov Nascosti capirete bene il motivo di utilizzare questa tecnica:
le sequenze di caratteri di una breve frase che appaiono frequentemente insieme hanno maggiori probabilità di costituire un token significativo.
Tokenizzazione Character
Come dice il nome in questo sistema ogni singolo carattere del testo, inclusi spazi e punteggiatura, viene trattato come un token separato. Ad esempio, la parola “ciao” verrebbe tokenizzata come “c”, “i”, “a”, “o”.
Il vantaggio è che il riconoscimento di parole sconosciute diventa più semplice, lo svantaggio è che le catene di token diventano lunghissime, e tutto si rallenta inevitabilmente.
Tokenizzazione Subword
Abbiamo visto metodi molto semplici per creare i token.
Con questa metodologia arriviamo ad una tecnica più sofisticata che divide le parole in unità più piccole, chiamate subword.
Le subword possono essere prefissi, suffissi, radici o altre parti costitutive delle parole.
Ci sono algoritmi già molto noti, come il Byte-Pair Encoding (BPE) e WordPiece, e di solito funzionano iterativamente trovando la coppia di token più frequente nel corpus di addestramento e unendola in un nuovo token.
Un esempio possiamo farlo con le parole “case”, “base”, “fase”, “rase”.
Mettiamo che in un testo abbiamo questa situazione:
parola | frequenza
case | 10
base | 9
fase | 3
rase | 2
l'algoritmo BPE genererà un dizionario simile a [c,a,b,f,se] con una frequenza:
token | frequenza
c | 10
a | 24 (10+9+3+2)
b | 9
f | 3
se | 24
Questo processo può essere ripetuto fino a raggiungere una dimensione di dizionario desiderata.
La tokenizzazione subword è particolarmente utile per gestire parole sconosciute o rare, poiché le scompone in parti più comuni che il modello potrebbe aver già visto durante l’addestramento, un po’ come facciamo noi con la divisione in sillabe.
È la tecnica utilizzata in modelli linguistici avanzati come GPT.
OpenAI fornisce uno strumento per visualizzare come il testo viene tokenizzato con BPE, ma non è l’unico; anche Google offre una libreria (SentencePiece) per la tokenizzazione subword.
Vantaggi della Tokenizzazione
La tokenizzazione è fondamentale per l’elaborazione del linguaggio naturale e i modelli di machine learning:
- Rende il testo manipolabile e comprensibile per i modelli di machine learning.
Trasformando il testo in unità discrete, i modelli possono elaborarlo ed estrarre informazioni utili. - Permette la creazione di rappresentazioni numeriche dei testi per identificare pattern e relazioni semantiche.
Una volta tokenizzato, ogni token può essere convertito in un vettore numerico (embedding) che cattura il suo significato e le sue relazioni con altri token. - Efficienza: Riduce la complessità computazionale trasformando il testo in sequenze di elementi semplici.
Lavorare con sequenze di token è generalmente più efficiente dal punto di vista computazionale rispetto a elaborare stringhe di testo lunghe e complesse. - Generalizzazione: Consente ai modelli di affrontare meglio la variabilità delle lingue.
Segmentando qualsiasi parola in componenti più comuni diventa più semplice riconoscere e lavorare con parole rare o complesse.
La tokenizzazione subword, in particolare, migliora la capacità del modello di gestire parole sconosciute scomponendole in sub-unità note, cosa che permette di poter riconoscere parole mai incontrate prima. - Compatibilità: Facilita l’integrazione di dati multilingue o testi con caratteri speciali.
Tecniche come BPE operano a livello di byte o su caratteri Unicode, rendendole più adatte a gestire diverse lingue e set di caratteri. In pratica non c’è differenza di procedimento tra un testo in lingua inglese ed uno in coreano o testi con emoticons. - Permette una gestione più granulare e flessibile dei testi.
A seconda della tecnica scelta, è possibile ottenere un livello di granularità diverso nella rappresentazione del testo, consentendo di adattare il processo alle esigenze specifiche del compito NLP. - I token possono essere riutilizzabili.
La tokenizzazione subword, ad esempio, scompone le parole in unità più piccole che possono apparire in diverse parole, consentendo al modello di apprendere rappresentazioni riutilizzabili per queste sub-unità.
Il mattone del linguaggio
Questo è il primo di una serie di articoli che spiegano come i token sono il mattone di tutte quelle funzionalità che riguardano il testo.
L’uso di “mattone” non è un caso, perché questa tecnica di divisione del testo permette la creazione di diversi tipi di prodotti informatici diversi.
Dalla comprensione degli argomenti del testo, la creazione di riassunti, la ricerca delle fonti migliori e infine le traduzioni da una lingua all’altra.
Se l’argomento ti intriga allora seguici nei prossimi giorni, perché andremo a spiegare anche gli elementi più tecnici, così da capire anche come funzionano i LLM e gli strumenti simili.
Articolo 1 di 4
Francesco Contini, Data & Search Engine Expert, Founder Rubedo Data Solutions