Comprendere la tokenizzazione nella PNL: una guida per principianti all'elaborazione del testo
Pubblicato: 2024-11-26La tokenizzazione è una componente critica ma spesso trascurata dell'elaborazione del linguaggio naturale (NLP). In questa guida spiegheremo la tokenizzazione, i suoi casi d'uso, i pro e i contro e il motivo per cui è coinvolta in quasi tutti i modelli linguistici di grandi dimensioni (LLM).
Sommario
- Cos'è la tokenizzazione nella PNL?
- Tipi di tokenizzazione
- Come funziona la tokenizzazione
- Applicazioni di tokenizzazione
- Vantaggi della tokenizzazione
- Sfide della tokenizzazione
Cos'è la tokenizzazione nella PNL?
La tokenizzazione è un metodo NLP che converte il testo in formati numerici utilizzabili dai modelli di machine learning (ML). Quando invii il tuo messaggio a un LLM come Claude di Anthropic, Gemini di Google o un membro della serie GPT di OpenAI, il modello non legge direttamente il tuo testo. Questi modelli possono accettare solo numeri come input, quindi il testo deve prima essere convertito in una sequenza di numeri utilizzando un tokenizzatore.
Un modo in cui un tokenizzatore può tokenizzare il testo sarebbe dividerlo in parole separate e assegnare un numero a ciascuna parola univoca:
“Grammarly ama la grammatica, il machine learning e la scrittura” potrebbe diventare:
Ogni parola (e il suo numero associato) è un token. Un modello ML può utilizzare la sequenza di token – [7.102], [37], [564], [2], [9.763], [2], [231] – per eseguire le sue operazioni e produrre il suo output. Questo output è solitamente un numero, che viene riconvertito in testo utilizzando il processo inverso di tokenizzazione. In pratica, questa tokenizzazione parola per parola è ottimo come esempio, ma viene utilizzata raramente nell’industria per ragioni che vedremo più avanti.
Un'ultima cosa da notare è che i tokenizzatori hanno dei vocabolari, ovvero il set completo di token che possono gestire. Un tokenizzatore che conosce le parole inglesi di base ma non i nomi delle aziende potrebbe non avere "Grammarly" come token nel suo vocabolario, portando al fallimento della tokenizzazione.
Tipi di tokenizzazione
In generale, la tokenizzazione trasforma una porzione di testo in una sequenza di numeri. Sebbene sia naturale pensare alla tokenizzazione a livello di parola, esistono molti altri metodi di tokenizzazione, uno dei quali, la tokenizzazione delle sottoparole, è lo standard del settore.
Tokenizzazione delle parole
La tokenizzazione delle parole è l'esempio che abbiamo visto prima, in cui il testo è diviso per ogni parola e per la punteggiatura.
Il vantaggio principale della tokenizzazione delle parole è che è facile da comprendere e visualizzare. Presenta però alcuni difetti:
- La punteggiatura, se presente, è attaccata alle parole, come con “scrittura”.
- Parole nuove o non comuni (come “grammaticale”) occupano un intero gettone.
Di conseguenza, la tokenizzazione delle parole può creare vocabolari con centinaia di migliaia di token. Il problema con i vocabolari di grandi dimensioni è che rendono l’addestramento e l’inferenza molto meno efficienti: la matrice necessaria per la conversione tra testo e numeri dovrebbe essere enorme.
Inoltre, ci sarebbero molte parole usate di rado e i modelli PNL non disporrebbero di dati di addestramento sufficienti per restituire risposte accurate per quelle parole poco frequenti. Se domani venisse inventata una nuova parola, un LLM che utilizza la tokenizzazione delle parole dovrebbe essere riqualificato per incorporare questa parola.
Tokenizzazione delle sottoparole
La tokenizzazione delle sottoparole divide il testo in blocchi più piccoli o uguali alle parole. Non esiste una dimensione fissa per ciascun token; ogni token (e la sua lunghezza) è determinato dal processo di addestramento. La tokenizzazione delle sottoparole è lo standard di settore per i LLM. Di seguito è riportato un esempio, con la tokenizzazione eseguita dal tokenizzatore GPT-4o:
Qui, la parola insolita “Grammarly” viene scomposta in tre token: “Gr”, “amm” e “arly”. Nel frattempo, le altre parole sono abbastanza comuni nel testo da formare simboli propri.
La tokenizzazione delle sottoparole consente vocabolari più piccoli, il che significa formazione e inferenza più efficienti ed economiche. I tokenizzatori di sottoparole possono anche scomporre parole rare o nuove in combinazioni di token più piccoli ed esistenti. Per questi motivi, molti modelli di PNL utilizzano la tokenizzazione delle sottoparole.
Tokenizzazione dei caratteri
La tokenizzazione dei caratteri divide il testo in singoli caratteri. Ecco come apparirebbe il nostro esempio:
Ogni singolo personaggiounicodiventa il proprio token. Ciò richiede in realtà il vocabolario più piccolo poiché ci sono solo 52 lettere nell'alfabeto (maiuscole e minuscole sono considerate diverse) e diversi segni di punteggiatura. Poiché qualsiasi parola inglese deve essere formata da questi caratteri, la tokenizzazione dei caratteri può funzionare con qualsiasi parola nuova o rara.
Tuttavia, secondo i benchmark LLM standard, nella pratica la tokenizzazione dei caratteri non funziona altrettanto bene della tokenizzazione delle sottoparole. Il token della sottoparola “car” contiene molte più informazioni del token del carattere “c”, quindi il meccanismo di attenzione nei trasformatori ha più informazioni su cui operare.
Tokenizzazione delle frasi
La tokenizzazione delle frasi trasforma ogni frase del testo nel proprio token. Il nostro esempio sarebbe simile a:
Il vantaggio è che ogni token contiene moltissime informazioni. Tuttavia, ci sono diversi inconvenienti. Esistono infiniti modi per combinare le parole per scrivere frasi. Quindi anche il vocabolario dovrebbe essere infinito.
Inoltre, ogni frase in sé sarebbe piuttosto rara poiché differenze anche minime (come "anche" invece di "e") significherebbero un token diverso nonostante abbiano lo stesso significato. La formazione e l'inferenza sarebbero un incubo. La tokenizzazione delle frasi viene utilizzata in casi d'uso specializzati come l'analisi del sentiment delle frasi, ma per il resto è uno spettacolo raro.
Compromesso di tokenizzazione: efficienza vs. prestazioni
La scelta della giusta granularità della tokenizzazione per un modello è in realtà una relazione complessa tra efficienza e prestazioni. Con token molto grandi (ad esempio, a livello di frase), il vocabolario diventa enorme. L'efficienza dell'addestramento del modello diminuisce perché la matrice che contiene tutti questi token è enorme. Le prestazioni crollano poiché non ci sono dati di training sufficienti per consentire a tutti i token univoci di apprendere in modo significativo le relazioni.
D'altra parte, con i token piccoli, il vocabolario diventa piccolo. L'addestramento diventa efficiente, ma le prestazioni potrebbero crollare poiché ciascun token non contiene informazioni sufficienti affinché il modello possa apprendere le relazioni token-token.
La tokenizzazione delle sottoparole è proprio nel mezzo. Ogni token contiene informazioni sufficienti affinché i modelli possano apprendere le relazioni, ma il vocabolario non è così ampio da rendere inefficiente l'addestramento.
Come funziona la tokenizzazione
La tokenizzazione ruota attorno alla formazione e all'uso dei tokenizzatori. I tokenizzatori convertono il testo in token e i token nuovamente in testo. Discuteremo qui i tokenizzatori di sottoparole poiché sono il tipo più popolare.
I tokenizzatori di sottoparole devono essere addestrati a dividere il testo in modo efficace.
Perché "Grammarly" viene diviso in "Gr", "amm" e "arly"? Non potrebbero funzionare anche “Gram”, “mar” e “ly”? A un occhio umano potrebbe sicuramente farlo, ma il tokenizzatore, che presumibilmente ha imparato la rappresentazione più efficiente, la pensa diversamente. Un algoritmo di training comune (sebbene non utilizzato in GPT-4o) impiegato per apprendere questa rappresentazione è la codifica a coppia di byte (BPE). Spiegheremo il BPE nella sezione successiva.
Formazione sui tokenizzatori
Per addestrare un buon tokenizzatore, è necessario un enorme corpus di testo su cui esercitarsi. L'esecuzione di BPE su questo corpus funziona come segue:
- Dividere tutto il testo del corpus in singoli caratteri. Impostali come segnalini iniziali nel vocabolario.
- Unisci i due token più frequentemente adiacenti del testo in un nuovo token e aggiungilo al vocabolario (senza eliminare i vecchi token: questo è importante).
- Ripeti questo processo fino a quando non rimangono più coppie di token adiacenti che si verificano frequentemente o finché non viene raggiunta la dimensione massima del vocabolario.
Ad esempio, supponiamo che il nostro intero corpus di formazione sia costituito dal testo "abc abcd":
- Il testo verrebbe suddiviso in [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”]. Tieni presente che la quarta voce nell'elenco è un carattere spazio. Il nostro vocabolario sarebbe quindi [“a”, “b”, “c”, “ ”, “d”].
- “a” e “b” compaiono più frequentemente una accanto all'altra nel testo (a pari merito con “b” e “c”, ma “a” e “b” vincono in ordine alfabetico). Quindi li combiniamo in un unico token, “ab”. Il vocabolario ora appare come ["a", "b", "c", " ", "d", "ab"] e il testo aggiornato (con la fusione dei token "ab" applicata) appare come ["ab" , “c”, “ ”, “ab”, “c”, “d”].
- Ora, “ab” e “c” ricorrono più frequentemente insieme nel testo. Li uniamo nel token “abc”. Il vocabolario quindi apparirà come [“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”] e il testo aggiornato apparirà come [“abc”, “ ”, “abc ", "D"].
- Terminiamo il processo qui poiché ogni coppia di token adiacenti ora si verifica solo una volta. Unire ulteriormente i token renderebbe il modello risultante peggiore su altri testi. In pratica, il limite della dimensione del vocabolario è il fattore limitante.
Con il nostro nuovo set di vocaboli, possiamo mappare testo e token. Anche il testo che non abbiamo mai visto prima, come "cab", può essere tokenizzato perché non abbiamo scartato i token a carattere singolo. Possiamo anche restituire i numeri dei token semplicemente vedendo la posizione del token all'interno del vocabolario.
Una buona formazione sui tokenizer richiede volumi estremamente elevati di dati e molta elaborazione, più di quanto la maggior parte delle aziende possa permettersi. Le aziende aggirano questo problema saltando la formazione del proprio tokenizzatore. Invece, utilizzano semplicemente un tokenizzatore pre-addestrato (come il tokenizzatore GPT-4o collegato sopra) per risparmiare tempo e denaro con una perdita minima, se non nulla, nelle prestazioni del modello.
Utilizzando il tokenizzatore
Quindi, abbiamo questo tokenizzatore di sottoparole addestrato su un enorme corpus utilizzando BPE. Ora, come lo usiamo su un nuovo pezzo di testo?
Applichiamo le regole di fusione che abbiamo determinato nel processo di formazione del tokenizer. Per prima cosa dividiamo il testo di input in caratteri. Quindi, eseguiamo le fusioni dei token nello stesso ordine dell'addestramento.
Per illustrare, utilizzeremo un testo di input leggermente diverso di "dc abc":
- Lo dividiamo in caratteri [“d”, “c”, “ ”, “a”, “b”, “c”].
- La prima unione che abbiamo fatto durante la formazione è stata "ab", quindi lo facciamo qui: ["d", "c", " ", "ab", "c"].
- La seconda unione che abbiamo fatto è stata “abc”, quindi facciamo così: [“d”, “c”, “ ”, “abc”].
- Queste sono le uniche regole di unione di cui disponiamo, quindi abbiamo terminato la tokenizzazione e possiamo restituire gli ID dei token.
Se disponiamo di numerosi ID token e desideriamo convertirli in testo, possiamo semplicemente cercare ciascun ID token nell'elenco e restituire il testo associato. Gli LLM lo fanno per trasformare gli incorporamenti (vettori di numeri che catturano ilsignificatodei token osservando i token circostanti) con cui lavorano in testo leggibile dall'uomo.
Applicazioni di tokenizzazione
La tokenizzazione è sempre il primo passo in tutta la PNL. Trasformare il testo in moduli con cui i modelli ML (e i computer) possono funzionare richiede la tokenizzazione.
Tokenizzazione nei LLM
La tokenizzazione è solitamente la prima e l'ultima parte di ogni chiamata LLM. Il testo viene prima trasformato in token, quindi i token vengono convertiti in incorporamenti per catturare il significato di ciascun token e passati alle parti principali del modello (i blocchi del trasformatore). Dopo l'esecuzione dei blocchi del trasformatore, gli incorporamenti vengono riconvertiti in token. Infine, il token appena restituito viene aggiunto all'input e reinserito nel modello, ripetendo nuovamente il processo. Gli LLM utilizzano la tokenizzazione delle sottoparole per bilanciare prestazioni ed efficienza.
Tokenizzazione nei motori di ricerca
I motori di ricerca tokenizzano le query degli utenti per standardizzarle e comprendere meglio le intenzioni dell'utente. La tokenizzazione dei motori di ricerca potrebbe comportare la suddivisione del testo in parole, la rimozione di parole di riempimento (come "il" o "e"), la trasformazione delle maiuscole in minuscole e la gestione di caratteri come i trattini. La tokenizzazione delle sottoparole di solito non è necessaria in questo caso poiché le prestazioni e l'efficienza dipendono meno dalla dimensione del vocabolario.
Tokenizzazione nella traduzione automatica
La tokenizzazione della traduzione automatica è interessante poiché le lingue di input e di output sono diverse. Di conseguenza, ci saranno due tokenizzatori, uno per ciascuna lingua. La tokenizzazione delle sottoparole di solito funziona meglio poiché bilancia il compromesso tra efficienza del modello e prestazioni del modello. Ma alcune lingue, come il cinese, non hanno una componente linguistica più piccola di una parola. Lì è richiesta la tokenizzazione delle parole.
Vantaggi della tokenizzazione
La tokenizzazione è un must per qualsiasi modello di PNL. Una buona tokenizzazione consente ai modelli ML di funzionare in modo efficiente con il testo e di gestire bene le nuove parole.
La tokenizzazione consente ai modelli di funzionare con il testo
Internamente, i modelli ML funzionano solo con i numeri. L'algoritmo alla base dei modelli ML si basa interamente sul calcolo, che a sua volta richiede numeri per essere calcolato. Pertanto, il testo deve essere trasformato in numeri prima che i modelli ML possano funzionare con essi. Dopo la tokenizzazione, è possibile eseguire sui numeri tecniche come l'attenzione o l'incorporamento.
La tokenizzazione generalizza al testo nuovo e raro
O più precisamente,una buonatokenizzazione si generalizza a testo nuovo e raro. Con la tokenizzazione di sottoparole e caratteri, i nuovi testi possono essere scomposti in sequenze di token esistenti. Pertanto, incollare un articolo con parole senza senso in ChatGPT non ne causerà l'interruzione (anche se potrebbe non fornire nemmeno una risposta molto coerente). Una buona generalizzazione consente inoltre ai modelli di apprendere le relazioni tra parole rare, in base alle relazioni nei sottotoken.
Sfide della tokenizzazione
La tokenizzazione dipende dal corpus di training e dall'algoritmo, quindi i risultati possono variare. Ciò può influire sulle capacità di ragionamento dei LLM e sulla loro lunghezza di input e output.
La tokenizzazione influisce sulle capacità di ragionamento degli LLM
Un problema semplice che spesso mette in difficoltà gli LLM è contare le occorrenze della lettera "r" nella parola "fragola". Il modello direbbe erroneamente che ce ne sono due, anche se la risposta in realtà è tre. Questo errore potrebbe essere dovuto in parte alla tokenizzazione. Il tokenizzatore della sottoparola divide "fragola" in "st", "raw" e "berry". Pertanto, il modello potrebbe non essere stato in grado di collegare la “r” del gettone centrale alle due “r” dell’ultimo gettone. L'algoritmo di tokenizzazione scelto influenza direttamente il modo in cui le parole vengono tokenizzate e il modo in cui ciascun token si relaziona agli altri.
La tokenizzazione influisce sulla lunghezza dell'input e dell'output LLM
Gli LLM sono per lo più basati sull'architettura del trasformatore, che si basa sul meccanismo di attenzione per contestualizzare ciascun token. Tuttavia, all’aumentare del numero di token, il tempo necessario per l’attenzione aumenta quadraticamente. Quindi, un testo con quattro token impiegherà 16 unità di tempo ma un testo con otto token impiegherà 64 unità di tempo. Ciò limita gli LLM a limiti di input e output di poche centinaia di migliaia di token. Con token più piccoli, ciò può davvero limitare la quantità di testo che puoi inserire nel modello, riducendo il numero di attività per cui puoi utilizzarlo.