Se avete già letto l’articolo precedente sulla nascita dei token, oggi vediamo come la tokenizzazione viene usata per identificare pattern linguistici, comprendere relazioni semantiche e strutturali, effettuare le famose analisi del sentiment, identificare entità nominate, assegnare categorie grammaticali e realizzare la sintesi automatica del testo.

Tokenizzazione per ricavare informazioni da un testo

Vediamo ora i principali modi un cui vengono lavorati testi grazie ai token.

Identificare pattern linguistici

Forse l’uso più antico della tokenizzazione è l’analisi della frequenza e della co-occorrenza dei token per identificare pattern linguistici all’interno di un testo o di un insiemi di testi, roba di ricerca di base degli anni ’70.
Ma uno dei primi usi veramente di massa è stato grazie ai motori di ricerca.

Dopo aver tokenizzato un testo, è possibile contare molto velocemente quante volte ogni token appare. Le sequenze di token che ricorrono frequentemente possono indicare concetti chiave o argomenti centrali del testo, a patto che non siano preposizioni.

La parte più interessante è l’analisi della co-occorrenza, ossia quell’analisi che ci permette di capire quali token tendono ad apparire insieme all’interno di una finestra di contesto (ad esempio, all’interno della stessa frase, di un paragrafo o di un gruppo di token adiacenti).

La frequenza con cui determinati token compaiono vicini ad altri può rivelare relazioni associative tra di essi; questo ci aiuta a scoprire e riconoscere legami semantici o contestuali.

Per esempio, se i token “cane” e “abbaiare” compaiono spesso insieme, ciò indica una relazione linguistica comune.

I Language Model (LLM) analizzano queste relazioni semantiche tra i token durante il loro addestramento, apprendendo la frequenza con cui vengono usati insieme o in contesti simili. In pratica “trovano da soli” la relazione tra “cane” e “abbaiare” grazie alle statistiche grazie ai documenti usati in addestramento.

Comprendere le relazioni semantiche e strutturali:

Faccio un passo più avanti sulla tokenizzazione per capire come funziona una struttura più definita.

Abbiamo una serie di frasi: 
"Il cane abbaia alla luna"
"Il cane abbaia al gatto"
"Il cane non abbaia ai vicini"

Tralascio articoli e preposizioni e semplifico un po' per concentrarci meglio sulle relazioni tra token.
Abbiamo questi token:
 ID | Token    | Frequenza
 01 | cane     | 3
 02 | abbaia   | 3
 03 | gatto    | 1
 04 | vicini   | 1

Se mettiamo in comune i token vediamo che "cane" e "abbaia" appaiono più frequentemente di "cane" e "gatto" o "cane" e "vicini", e questo ci descrive una relazione strutturale, ed anche semantica, come vedremo dopo.

Un passo successivo cruciale per comprendere le relazioni semantiche è la creazione di embedding, ossia “rappresentazioni vettoriali dense” di ogni token.

Per chi non è avvezzo alle rappresentazioni vettoriali, immaginate una stanza in cui volano a velocità diverse e direzioni diverse delle targhette con le parole.
Se scattiamo una foto vedremo che ci sono zone in cui ci sono più parole e zone in cui ce ne sono meno.
La aree della stanza con una quantità maggiore di parole volanti è l’embedding di cui parliamo.

Ma ora viene la parte più divertente.

Nello spazio vettoriale “stanza” che abbiamo definito nell’esempio le parole con un significato simile le troverai vicine tra loro.
Se volete usare l’immaginazione fate finta che “cane” e “gatto” siano sopra il divano, “abbaia” si trova sotto il tavolo e “vicini” davanti la porta.

Se vi interessa sapere come vengono immagazzinati i vettori c’è una bella descrizione su sito di MongoDB, che può essere letta agevolmente anche da chi non si occupa di questi strumenti.

Costruendoli in questo modo gli embedding catturano il significato dei token e le loro relazioni con altri token nello spazio vettoriale. Token che appaiono in contesti simili tendono ad avere embedding simili, permettendo ai modelli di identificare sinonimi, concetti correlati e la distanza semantica tra le parole. Gli LLM utilizzano questi embedding per comprendere il significato e l’intento di gruppi di parole e di frasi.

Se avete compreso come funziona questa parte quello che viene dopo sono tutte conseguenze.

Effettuare analisi del sentiment

L’analisi del sentiment di un testo individua, al netto di sarcasmi e metafore, la tonalità emotiva di un testo (positiva, negativa o neutra).
Sapendo che parole dal significato simile si trovano vicine tra loro vien da se che “buono” e “bello” saranno vicine tra loro, “brutto” e “cattivo” pure, e così via.

Tirando fuori un elenco di queste parole e il loro significato possiamo capire ad esempio se il commento ad un oggetto è positivo o negativo, oppure possiamo capire se un articolo di un quotidiano parla in maniera positiva o negativa dell’argomento che tratta.

Identificare i NER

Ah! Gli acronimi! NER sta per Named Entity Recognition, è un modo figo per riconoscere i nomi: nomi di persone, luoghi, organizzazioni, date, numeri, ecc..

I modelli di NER analizzano sequenze di token e il loro contesto per determinare se un token o una serie di token costituisce un’entità nominata e a quale categoria appartiene.

Non è perfetto, provo a spiegarlo con degli esempi pratici.
Se avete capito come funziona la tokenizzazione capirete che “Marca” sarebbe identificato come il femminile di “Marco”, o la confusione tra “Channel” e “Chanel”
Per una buona riuscita bisogna aiutarlo con regole linguistiche, modelli statistici o liste dei nomi in tutte le lingue del mondo.

Assegnare categorie grammaticali (Part-of-speech tagging)

Tra le varie funzionalità di Alexa e Google Assistant c’è una cosa che viene chiamata Part-of-Speech tagging, che crea un nuovo acronimo: POS tagging.

É l’assegnazione di ciascun token ad una categoria grammaticale, come un sostantivo, verbo, aggettivo, avverbio, ecc..

I modelli di POS tagging utilizzano il contesto di ogni token, osservando i token circostanti, e la sua forma (ad esempio, la sua terminazione) per prevedere la sua categoria grammaticale. Questa informazione è fondamentale per l’analisi sintattica e per altre attività di NLP che richiedono una comprensione della struttura grammaticale del testo.

Riassumere o sintetizzare un testo

Grazie all’analisi di catene di token si possono trovare catene più corte che hanno più o meno lo stesso significato, eliminare catene che non sono direttamente collegate all’argomento principale.

Queste procedure, insieme ad altri algoritmi, riescono a creare un riassunto o creare una sintesi degli argomenti trattati nel testo.

Se volessimo semplificare al massimo si tratta di generare nuove catene di token, che è una frase che spiega bene cosa viene fatto in questi processi, e che mi farà odiare da chi ha utilizzato gli scorsi 3 o 4 anni di vita a programmare queste funzionalità per come ho minimizzato il loro lavoro.

Per farmi perdonare ne parlerò in dettaglio più avanti, dopo una piccolissima parte propedeutica per comprendere a fondo come si fanno traduzioni e riassunti.

Articolo 2 di 4

Leggi l’articolo precedente

Francesco Contini, Data & Search Engine Expert, Founder Rubedo Data Solutions