1. Tokenizing
Tokenizzazione
Tokenizzazione è il processo di suddivisione dei dati, come il testo, in pezzi più piccoli e gestibili chiamati token. A ciascun token viene quindi assegnato un identificatore numerico unico (ID). Questo è un passaggio fondamentale nella preparazione del testo per l'elaborazione da parte dei modelli di machine learning, specialmente nel trattamento del linguaggio naturale (NLP).
L'obiettivo di questa fase iniziale è molto semplice: Dividere l'input in token (ids) in un modo che abbia senso.
Come Funziona la Tokenizzazione
Suddivisione del Testo:
Tokenizzatore di Base: Un tokenizzatore semplice potrebbe suddividere il testo in parole e segni di punteggiatura individuali, rimuovendo gli spazi.
Esempio: Testo:
"Ciao, mondo!"
Token:["Ciao", ",", "mondo", "!"]
Creazione di un Vocabolario:
Per convertire i token in ID numerici, viene creato un vocabolario. Questo vocabolario elenca tutti i token unici (parole e simboli) e assegna a ciascuno un ID specifico.
Token Speciali: Questi sono simboli speciali aggiunti al vocabolario per gestire vari scenari:
[BOS]
(Inizio Sequenza): Indica l'inizio di un testo.[EOS]
(Fine Sequenza): Indica la fine di un testo.[PAD]
(Padding): Utilizzato per rendere tutte le sequenze in un batch della stessa lunghezza.[UNK]
(Sconosciuto): Rappresenta token che non sono nel vocabolario.Esempio: Se
"Ciao"
è assegnato ID64
,","
è455
,"mondo"
è78
, e"!"
è467
, allora:"Ciao, mondo!"
→[64, 455, 78, 467]
Gestione delle Parole Sconosciute: Se una parola come
"Addio"
non è nel vocabolario, viene sostituita con[UNK]
."Addio, mondo!"
→["[UNK]", ",", "mondo", "!"]
→[987, 455, 78, 467]
&#xNAN;(Assumendo che[UNK]
abbia ID987
)
Metodi di Tokenizzazione Avanzati
Mentre il tokenizzatore di base funziona bene per testi semplici, ha limitazioni, specialmente con vocabolari ampi e nella gestione di parole nuove o rare. I metodi di tokenizzazione avanzati affrontano questi problemi suddividendo il testo in subunità più piccole o ottimizzando il processo di tokenizzazione.
Byte Pair Encoding (BPE):
Scopo: Riduce la dimensione del vocabolario e gestisce parole rare o sconosciute suddividendole in coppie di byte frequentemente occorrenti.
Come Funziona:
Inizia con caratteri individuali come token.
Unisce iterativamente le coppie di token più frequenti in un singolo token.
Continua fino a quando non ci sono più coppie frequenti da unire.
Vantaggi:
Elimina la necessità di un token
[UNK]
poiché tutte le parole possono essere rappresentate combinando token subword esistenti.Vocabolario più efficiente e flessibile.
Esempio:
"giocando"
potrebbe essere tokenizzato come["gioca", "ndo"]
se"gioca"
e"ndo"
sono subword frequenti.
WordPiece:
Utilizzato Da: Modelli come BERT.
Scopo: Simile a BPE, suddivide le parole in unità subword per gestire parole sconosciute e ridurre la dimensione del vocabolario.
Come Funziona:
Inizia con un vocabolario di base di caratteri individuali.
Aggiunge iterativamente la subword più frequente che massimizza la probabilità dei dati di addestramento.
Utilizza un modello probabilistico per decidere quali subword unire.
Vantaggi:
Bilancia tra avere una dimensione del vocabolario gestibile e rappresentare efficacemente le parole.
Gestisce in modo efficiente parole rare e composte.
Esempio:
"infelicità"
potrebbe essere tokenizzato come["in", "felicità"]
o["in", "felice", "tà"]
a seconda del vocabolario.
Unigram Language Model:
Utilizzato Da: Modelli come SentencePiece.
Scopo: Utilizza un modello probabilistico per determinare il set di token subword più probabile.
Come Funziona:
Inizia con un ampio set di token potenziali.
Rimuove iterativamente i token che migliorano meno la probabilità del modello sui dati di addestramento.
Finalizza un vocabolario in cui ogni parola è rappresentata dalle unità subword più probabili.
Vantaggi:
Flessibile e può modellare il linguaggio in modo più naturale.
Spesso porta a tokenizzazioni più efficienti e compatte.
Esempio:
"internazionalizzazione"
potrebbe essere tokenizzato in subword più piccole e significative come["internazionale", "izzazione"]
.
Esempio di Codice
Comprendiamo meglio questo attraverso un esempio di codice da https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
Riferimenti
Last updated