Token vs Embedding: le differenze fondamentali

Token ed embedding sembrano la stessa cosa ma fanno mestieri opposti: uno identifica un pezzo di testo, l’altro ne descrive il significato. La differenza spiegata dall’inizio, con esempi concreti.
Immagine realizzata con IA
Le immagini presenti nel post possono essere realizzate o elaborate con strumenti di Intelligenza Artificiale. Questa scelta nasce anche dalla necessità di prevenire le continue contestazioni e richieste economiche improprie che ricevo relative a fotografie utilizzate che sono sempre state acquistate con regolare licenza.
Contenuti dell'articolo

Token ed embedding vengono spesso trattati come sinonimi, soprattutto quando si parla velocemente di intelligenza artificiale. Non lo sono. Stanno su due gradini diversi della stessa scala e confonderli produce errori concreti: preventivi sui costi sbagliati, ricerche semantiche che restituiscono risultati a caso, modelli scelti per il motivo sbagliato.

La confusione nasce da un fatto banale. Entrambi sono numeri. Il token è un numero intero, spesso a quattro o cinque cifre. L’embedding è una lista di numeri decimali, lunga migliaia di posizioni. A guardarli da fuori sembrano la stessa famiglia, in realtà fanno due mestieri opposti: uno identifica un pezzo di testo, l’altro ne descrive il significato.

Qui sotto trovi la differenza spiegata dall’inizio, con esempi e con il punto esatto in cui i due concetti si incontrano dentro un modello.

Cos’è un token, in pratica

Un token è un pezzo di testo. Può essere una parola intera, un pezzo di parola, un segno di punteggiatura, uno spazio attaccato alla parola successiva. Il tokenizer decide dove tagliare secondo le regole che ha imparato e di questo ho parlato in dettaglio nella lezione su cos’è la tokenizzazione.

Fatto il taglio, ogni pezzo riceve un numero: il suo ID nel vocabolario. La parola “gatto” può essere il token 24.871, la parola “bilancio” il 61.204. Quei numeri non contengono nessuna informazione sul significato. Sono etichette, come il numero di serie di un prodotto: servono a distinguere una confezione dall’altra, non a dire cosa c’è dentro.

Il vocabolario è un elenco chiuso. Un modello diffuso come GPT-4 usa un vocabolario da circa 100.000 token, i modelli più recenti arrivano a 200.000. Ogni testo prodotto o letto dal modello passa da lì e non esistono token fuori catalogo. Il vocabolario di un tokenizer si costruisce una volta, prima dell’addestramento e resta quello per tutta la vita del modello: chi cambia tokenizer cambia modello, come raccontato nella lezione sul vocabolario del tokenizer.

Il token è anche l’unità di misura di tutto il resto. La context window si conta in token, i prezzi delle API si contano in token, i limiti di velocità si contano in token. Se ti interessa il lato pratico, ne parlo nella lezione sulla context window.

Cos’è un embedding, in pratica

Un embedding è un vettore: una fila di numeri decimali, da qualche centinaio a qualche migliaio. Non identifica niente, descrive. Ogni posizione del vettore misura una sfumatura appresa durante l’addestramento e l’insieme delle posizioni forma una specie di coordinata nello spazio del significato.

Il risultato è che le parole vicine di senso finiscono vicine anche numericamente. “Cane” e “gatto” hanno vettori simili, “cane” e “mutuo” hanno vettori lontani. La distanza si misura di solito con la similarità del coseno, che confronta la direzione dei due vettori e ignora la loro lunghezza.

Gli embedding non servono solo per parole singole. Si può calcolare il vettore di una frase, di un paragrafo, di un intero documento. È la base della ricerca semantica: cerchi “come faccio a non pagare troppe tasse” e il sistema trova un documento che parla di “ottimizzazione fiscale”, anche senza una parola in comune, perché i due testi hanno vettori vicini.

Le dimensioni contano. Un modello di embedding compatto come text-embedding-3-small produce vettori da 1.536 dimensioni, la versione large arriva a 3.072. Più dimensioni significano più sfumature catturabili, ma anche più memoria occupata e più tempo per il confronto.

TIP: se ti serve contare, pensa in token. Se ti serve confrontare, pensa in embedding. Le due domande non si sovrappongono quasi mai.

La differenza in una frase

Il token è un’etichetta discreta che dice “questo è il pezzo numero 24.871”. L’embedding è un vettore continuo che dice “questo pezzo sta vicino a questi altri”. Il primo è un indice, il secondo è una posizione.

Detto ancora più asciutto: il token serve a trasportare il testo dentro il modello, l’embedding serve a darne una rappresentazione numerica. Uno è il contenitore, l’altro è il contenuto reso calcolabile.

  • Natura: intero contro lista di decimali.
  • Cardinalità: vocabolario chiuso e finito contro spazio continuo e potenzialmente infinito.
  • Significato: nessuno nel token, tutto nell’embedding.
  • Confronto: due token si confrontano solo per uguaglianza, due embedding si confrontano per distanza.
Confronto tra token ed embedding: a sinistra gli ID discreti dei token, a destra la nuvola di vettori che rappresenta il significato
Il token è un’etichetta numerica, l’embedding è una posizione nello spazio del significato

Cosa succede dentro il modello

Qui i due concetti si toccano. Dentro un modello c’è una tabella chiamata matrice di embedding: una riga per ogni token del vocabolario, una colonna per ogni dimensione del vettore. Con 128.000 token e vettori da 4.096 dimensioni, la tabella occupa oltre 2 GB in precisione piena.

Il passaggio è meccanico. Arriva l’ID del token, il modello lo usa come numero di riga e preleva il vettore corrispondente. Fine. Nessuna magia: è una lettura in tabella, come cercare una voce in un indice.

Da lì in poi il vettore viene lavorato. Si aggiunge l’informazione sulla posizione, spiegata nella lezione sul positional encoding, poi entra nei layer di self-attention dove viene riscritto in base al contesto. In uscita non hai più l’embedding di partenza, hai una rappresentazione contestuale.

Token fissi, embedding contestuali

Questa è la parte che quasi nessuno spiega e che chiarisce il resto. Il token è sempre lo stesso, l’embedding no.

Il token 24.871 resta 24.871 in ogni frase del mondo. L’embedding che gli corrisponde, dopo i layer di attenzione, cambia a seconda delle parole che ha intorno. La parola “pesca” in “ho comprato una pesca” e in “lui pesca sul molo” produce due vettori finali diversi, pur partendo dallo stesso token.

Nei modelli più vecchi, quelli del periodo word2vec, il vettore era invece statico: una parola, un vettore, per sempre. Il Transformer ha rotto quel vincolo, ed è una delle ragioni per cui gestisce l’ambiguità molto meglio. Se vuoi vedere il meccanismo dall’interno, la lezione su multi-head attention mostra come più teste leggano aspetti diversi dello stesso contesto.

Tre differenze operative

Quando si passa dalla teoria al lavoro quotidiano, la distinzione si riduce a tre punti.

Il conteggio. I costi di un’API si misurano in token, non in embedding. Un prompt da 1.000 token costa in proporzione e la risposta si fattura allo stesso modo. Gli embedding si pagano una volta, quando li calcoli e poi restano in un database vettoriale senza costi ricorrenti.

La ricerca. Un motore di ricerca semantico indicizza embedding, non token. Se provi a cercare per similarità usando gli ID dei token ottieni rumore, perché gli ID non hanno nessuna relazione geometrica tra loro. Il token 24.871 non è “vicino” al 24.872 in nessun senso utile.

Il modello. Gli embedding prodotti da modelli diversi vivono in spazi diversi e non sono confrontabili. Un vettore da 1.536 dimensioni e uno da 3.072 non si possono mettere nello stesso indice e due modelli da 1.536 dimensioni addestrati separatamente restituiscono vettori che non si parlano. Chi cambia modello di embedding deve ricalcolare tutto l’indice.

Dove si vede la differenza ogni giorno

Prendi un caso concreto: un chatbot che risponde sulle tue FAQ aziendali. Il flusso è una catena di token ed embedding che si alternano.

  • I documenti vengono spezzati in chunk e la dimensione dei chunk si misura in token.
  • Ogni chunk diventa un embedding e finisce in un database vettoriale.
  • La domanda dell’utente diventa anch’essa un embedding e si cercano i chunk più vicini.
  • I chunk trovati tornano al modello generativo come testo, quindi di nuovo in token.
  • La risposta viene generata un token alla volta, fino al segnale di stop.

Lo stesso articolo che stai leggendo, se lo passassi a un modello, occuperebbe circa 2.300 token. Non 2.300 embedding: uno solo, se volessi confrontarlo con altri testi. La differenza tra i due numeri è tutta lì.

Gli errori più comuni

Token non è sinonimo di parola. In italiano una parola media occupa più di un token e le parole rare si spezzano in tre o quattro pezzi. Contare le parole e chiamarlo conteggio token porta a stime sbagliate di circa il 30%.

Non è un testo compresso. Non si può invertire per rileggere la frase di partenza e non contiene le parole originali. Contiene una posizione geometrica che il modello ha imparato a considerare utile.

Non si confrontano token ed embedding. Sono oggetti di tipo diverso, come un codice fiscale e una coordinata geografica. Nessuna operazione sensata li mette sullo stesso piano.

Un embedding non è “il significato”. È una rappresentazione utile del significato per un certo compito. Cambia il compito, cambia il modello, cambia lo spazio. Trattarlo come una verità assoluta è la premessa di quasi tutti i disastri nei sistemi di ricerca semantica.

Domande frequenti

Un token corrisponde sempre a una parola?

No. Può essere una parola intera, un pezzo di parola, un segno di punteggiatura o uno spazio. Le parole comuni e corte tendono a stare in un token solo, quelle lunghe o rare si spezzano in più pezzi. Per questo il rapporto tra parole e token cambia da lingua a lingua.

Quanti token ci sono in una pagina di testo?

In italiano si viaggia intorno a 1,3 token per parola. Una pagina da 500 parole sta quindi sui 650 token. Il numero esatto dipende dal tokenizer, dalla punteggiatura e dalla presenza di termini tecnici, che spesso si spezzano.

Quante dimensioni ha un embedding?

Dipende dal modello. Si va da poche centinaia di dimensioni nei modelli compatti fino a 3.072 nei modelli di embedding più grandi. Nei Transformer generativi la dimensione interna è spesso 4.096 o 8.192, ma quel vettore non è pensato per essere usato come embedding di ricerca.

Posso usare gli embedding di un modello con un altro modello?

No, ed è uno degli errori più costosi. Ogni modello crea il proprio spazio vettoriale, quindi i vettori di modelli diversi non sono confrontabili nemmeno a parità di dimensioni. Se cambi modello di embedding devi ricalcolare l’intero indice, altrimenti la ricerca restituisce risultati casuali.

L’embedding contiene il significato di una parola?

Contiene una rappresentazione numerica utile per certi compiti. Non è una definizione da dizionario e non contiene tutto ciò che noi intendiamo per significato. Due parole possono risultare vicine nello spazio per motivi che non hanno nulla a che vedere con il senso, per esempio perché compaiono negli stessi contesti.

Perché servono entrambi?

Perché fanno due lavori che non si sostituiscono. Il token serve a contare, trasportare e generare testo. L’embedding serve a confrontare, cercare e raggruppare. Un modello generativo ha bisogno dei token per produrre la frase, un sistema di ricerca ha bisogno degli embedding per trovarla. Toglierne uno dei due e il sistema smette di funzionare.

La prossima volta che leggi “1.000 token” in una fattura e “1.536 dimensioni” nella documentazione di un modello di embedding, sai che stai guardando due cose diverse: un’unità di misura e una rappresentazione. Sembrano parenti, lavorano in reparti separati.

Newsletter settimanale con le ultime novità sull’intelligenza artificiale

Corso gratuito sull’Intelligenza Artificiale, dalle nozioni base ai concetti più complessi

Condividi:

Potrebbero interessarti