1. Tokenizing
Tokenizing
Tokenizing è il processo di suddivisione dei dati, come il testo, in pezzi più piccoli e gestibili chiamati token. Ogni 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 natural language processing (NLP).
L'obiettivo di questa fase iniziale è molto semplice: Dividere l'input in token (ids) in un modo che abbia senso.
How Tokenizing Works
Splitting the Text:
Basic Tokenizer: Un tokenizer semplice potrebbe suddividere il testo in parole e segni di punteggiatura individuali, rimuovendo gli spazi.
Esempio: Testo:
"Hello, world!"
Token:["Hello", ",", "world", "!"]
Creating a Vocabulary:
Per convertire i token in ID numerici, viene creata una vocabulario. Questo vocabolario elenca tutti i token unici (parole e simboli) e assegna a ciascuno un ID specifico.
Special Tokens: Questi sono simboli speciali aggiunti al vocabolario per gestire vari scenari:
[BOS]
(Inizio della Sequenza): Indica l'inizio di un testo.[EOS]
(Fine della 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
"Hello"
è assegnato ID64
,","
è455
,"world"
è78
, e"!"
è467
, allora:"Hello, world!"
→[64, 455, 78, 467]
Handling Unknown Words: Se una parola come
"Bye"
non è nel vocabolario, viene sostituita con[UNK]
."Bye, world!"
→["[UNK]", ",", "world", "!"]
→[987, 455, 78, 467]
(Assumendo che[UNK]
abbia ID987
)
Advanced Tokenizing Methods
Mentre il tokenizer di base funziona bene per testi semplici, ha limitazioni, specialmente con vocabolari ampi e nella gestione di parole nuove o rare. I metodi avanzati di tokenizzazione affrontano questi problemi suddividendo il testo in sottounità più piccole o ottimizzando il processo di tokenizzazione.
Byte Pair Encoding (BPE):
Purpose: Riduce la dimensione del vocabolario e gestisce parole rare o sconosciute suddividendole in coppie di byte frequentemente occorrenti.
How It Works:
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.
Benefits:
Elimina la necessità di un token
[UNK]
poiché tutte le parole possono essere rappresentate combinando token di sottoparola esistenti.Vocabolario più efficiente e flessibile.
Esempio:
"playing"
potrebbe essere tokenizzato come["play", "ing"]
se"play"
e"ing"
sono sottoparole frequenti.
WordPiece:
Used By: Modelli come BERT.
Purpose: Simile a BPE, suddivide le parole in unità di sottoparola per gestire parole sconosciute e ridurre la dimensione del vocabolario.
How It Works:
Inizia con un vocabolario di base di caratteri individuali.
Aggiunge iterativamente la sottoparola più frequente che massimizza la probabilità dei dati di addestramento.
Utilizza un modello probabilistico per decidere quali sottoparole unire.
Benefits:
Bilancia tra avere una dimensione del vocabolario gestibile e rappresentare efficacemente le parole.
Gestisce in modo efficiente parole rare e composte.
Esempio:
"unhappiness"
potrebbe essere tokenizzato come["un", "happiness"]
o["un", "happy", "ness"]
a seconda del vocabolario.
Unigram Language Model:
Used By: Modelli come SentencePiece.
Purpose: Utilizza un modello probabilistico per determinare il set di token di sottoparola più probabile.
How It Works:
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à di sottoparola più probabili.
Benefits:
Flessibile e può modellare il linguaggio in modo più naturale.
Spesso porta a tokenizzazioni più efficienti e compatte.
Esempio:
"internationalization"
potrebbe essere tokenizzato in sottoparole più piccole e significative come["international", "ization"]
.
Code Example
Let's understand this better from a code example from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
Riferimenti
Last updated