Note: Questo articolo è parte del corso AI con Delphi tenuto a febbraio da Wintech Italia. Per conoscere le prossime date, consultate il sito oppure contattate direttamente Wintech Italia.
Nell'ambito dell'intelligenza artificiale si sente spesso parlare del concetto di embedding, sia per il funzionamento dei modelli di linguaggio generativi (LLM) sia per alcune loro applicazioni, per esempio i RAG (Retrieval Augmented Generation). Ma cosa sono gli embeddings? In termini molto semplici potremmo dire che un embedding è un vettore (una sequenza di numeri) che cattura il senso di una parola o di una frase. Questo, nel campo dei modelli di linguaggio, è fondamentale, infatti è necessario trovare un modo per rappresentare le parole tramite dei numeri per poter usare le reti neurali alla base di questi sistemi. Il primo approccio che potrebbe venire in mente è creare una associazione che segua l'ordine alfabetico:
| # | Parola |
|---|---|
| 1 | Abaco |
| 2 | Abate |
| 3 | Abbagliare |
| 4 | Abbaiare |
| 5 | Abate |
| ? | ..... |
| 15000 | Zolfo |
Il problema è che le reti neurali eseguono dei calcoli e in un esempio come il precedente anche una banale somma non avrebbe senso: aumentare di poco un valore non porterebbe a una parola dal significato più vicino rispetto ad una somma con un valore più grande. Per esempio se "Abaco" è 1 e "Abate" è 2, il fatto che siano numericamente vicini non indica nulla del loro significato.
Cosa servirebbe
A questo punto quello che ci serve è un modo per classificare le parole in base a dei criteri. Per fare un esempio potremmo usare come criteri peso e altezza.
Dal grafico è evidente che le distanze tra le parole hanno un significato concreto. Il problema è che con vettori che rappresentano peso e altezza possiamo esprimere dei concetti molto limitati. Quindi quali criteri usare?
Come vengono calcolati
Una delle tecniche usate per calcolare questi vettori che catturano il senso delle parole è Word2Vec. Word2Vec si basa sul concetto che parole simili si usano in frasi simili. In pratica con questo approccio si addestra una rete neurale a trovare la parola mancante in frasi da cui è stata tolta una parola (in gergo Filling the blank).
| Frase | Parola mancante |
|---|---|
| L'acqua del mare è _______ | salata |
| Il _______ abbaia al postino | cane |
| In inverno cade la _______ dal cielo | neve |
| Ho bevuto un bicchiere di _______ a cena | vino |
| Ho bevuto un bicchiere di _______ a cena | birra |
Come si vede dall'esempio nell'ultima frase ci sono più parole che possono andare bene e quello che ci aspettiamo è che i calcoli (e di conseguenza i pesi) della rete per quelle due parole dovranno essere simili.
Usando Word2Vec si crea una rete che nello strato di input e di output ha un numero di neuroni pari alle parole del vocabolario, il primo neurone sarà associato alla prima parola, il secondo alla seconda, e così via. Durante l'allenamento si passano le frasi ponendo a 1 i neuroni associati alle parole presenti nella frase e ci aspettiamo che nello strato di output venga posto a 1 il neurone associato alla parola da cercare.
Una volta che la rete è stata addestrata non ci interessa tanto la rete in sé, ma i pesi associati a ciascun neurone dello strato di input (quindi alle parole del vocabolario). Questi pesi sono gli embeddings.
Ma mentre nell'esempio precedente i valori rappresentavano peso e altezza, i valori che abbiamo trovato cosa rappresentano? In realtà nessuno lo sa in maniera chiara. Quello che conta però è che se proviamo a metterli in un grafico vediamo che effettivamente parole simili hanno dei vettori che si trovano vicini.
Conclusione
Gli embeddings sono quindi una rappresentazione numerica del significato delle parole, ottenuta addestrando una rete neurale su grandi quantità di testo. Anche se non sappiamo esattamente cosa rappresenti ciascun valore, il risultato è che parole con significati simili si trovano vicine nello spazio vettoriale, permettendo ai modelli di linguaggio di "comprendere" le relazioni tra i concetti e di lavorare efficacemente con il linguaggio naturale.


Top comments (0)