# Embeddings: Come Insegnare alle Macchine a Capire le Parole ## Perché servono gli Embeddings? Gli esseri umani sono bravissimi a capire il significato delle parole. Se ti dico: * **“Pallone”** * **“Calcio”** * **“Tifoso”** tu capisci subito che c'entra lo sport. Se dico: * **“Forno”** * **“Farina”** * **“Impasto”** capisci che si parla di cucina. 💡 *Le macchine però vedono solo numeri.* Serve quindi un modo per trasformare le parole in qualcosa di **numerico**, ma che **mantenga il loro significato**. Gli **embedding** sono proprio questo: *coordinate nello spazio* che rappresentano il significato delle parole. Immagina un **Google Maps del linguaggio**: ogni parola ha una posizione, e parole simili stanno vicine. ## Bag of Words: la prima idea (carina ma ingenua) ### Cos’è Bag of Words? 🧺 È il modo più semplice per trasformare un testo in numeri: * si prendono tutte le parole presenti nei testi, * si crea un gigantesco “vocabolario”, * ogni frase viene convertita in un vettore di lunghezza **numero parole totali**, * in ogni posizione si mette **quante volte quella parola compare**. ### Esempio Supponiamo tre frasi: 1. Il gatto mangia il pesce 2. Il cane mangia la carne 3. Il gatto e il cane giocano Vocabolario (ordine inventato): | Parola | 1 | 2 | 3 | | ----- | ----- | ----- | ----- | | il | 2 | 2 | 1 | | gatto | 1 | 0 | 1 | | cane | 0 | 1 | 1 | | mangia | 1 | 1 | 0 | | pesce | 1 | 0 | 0 | | carne | 0 | 1 | 0 | | giocano | 0 | 0 | 1 | | e | 0 | 0 | 1 | ![BAG OF WORDS ++ >](/resources/dl//immagini/bagofwords.png) ### Vantaggi di Bag of Words * Semplice da capire. * Facile da implementare (anche in prima liceo). ### Limiti di Bag of Words * Vettori **enormi** (migliaia di parole \= migliaia di numeri). * Non cattura il significato: *per Bag of Words “gatto” e “leopardo” sono totalmente diversi.* * Parole molto frequenti (il, di, e) dominano tutto. * Non capisce il contesto: “pesca” (verbo) e “pesca” (frutto) vengono confuse. È come prendere una frase, scrivere ogni parola su dei foglietti, appallottolarli e buttarli in un sacchetto. Poi scuotete il sacchetto. Cosa è rimasto? Il conteggio. Nel metodo Bag of Words (BoW), al computer non importa l'ordine delle parole o la grammatica. Gli importa solo quante volte compare una parola Di conseguenza, frasi come `Il gatto mangia il pesce` o `il pesce mangia il gatto` risultano semanticamente identiche per questo sistema ‼️ --- ## TF-IDF: Bag of Words diventa più intelligente Dopo un po', ci si è accorti che contare e basta non funziona. Perché? Perché parole come "il", "è", "di", "a" compaiono ovunque ma non significano niente (si chiamano Stopwords). Mentre parole come "Rinoceronte" o "Ferrari" sono rare ma molto importanti per capire l'argomento. Ecco **TF-IDF** (Term Frequency \- Inverse Document Frequency). Sembra uno scioglilingua, ma è semplice: **La logica:** "Se una parola appare spesso in QUESTA frase, ma raramente nelle ALTRE frasi, allora è una parola VIP ⭐". * **TF (Frequenza):** Conta quanto la parola è presente qui. * **IDF (Rarità):** Penalizza le parole che usano tutti (come "il"). `TF-IDF = TF × IDF` ### Effetto pratico * Parole come **"il", "la", "di"** ottengono punteggi bassissimi perché sono generalmente molto presenti. * Parole come **"pesce", "carne", "giocano"** diventano molto informative se presenti in una frase. ![Dinosauro ++ >](/resources/dl//immagini/dinosauro.png) ### Vantaggi di TF-IDF * Riduce l'importanza delle parole inutili. * Buono per motori di ricerca “classici” perchè capisce quali sono le **parole chiave** ("Keyword extraction") ### Limiti di TF-IDF * Ancora vettori enormi (dimensione \= vocabolario). * Nessun vero “significato”: *“gatto” e “tigre” restano completamente slegati.* * Non cattura sinonimi. *"Auto" e "Macchina" sono due parole diverse.* * Non capisce il contesto. --- ## Word2Vec: rivoluzione\! Le parole diventano coordinate piene di significato Nel 2013 Google introduce **Word2Vec**: una delle svolte epocali del NLP. Idea: *Invece di contare parole, cerchiamo di capire dove compaiono.* ### Come funziona 🧠 Il modello guarda frasi reali e impara che: * “gatto” appare vicino a “mangiare”, “miagolare”, “felino”. * “cane” appare vicino a “abbaiare”, “giocare”, “collare”. Risultato: le parole vengono rappresentate come **vettori di 50–300 numeri**, non più lunghissimi come accadeva in TF-IDF. Immagina un **GPS semantico**: | Parola | Coord1 | Coord2 | Coord3 | ... | | ----- | ----- | ----- | ----- | ----- | | gatto | 0.12 | \-0.44 | 0.88 | ... | | cane | 0.10 | \-0.47 | 0.90 | ... | | pesce | \-0.33 | 0.05 | 0.11 | ... | ### Proprietà magiche 🚀 Word2Vec cattura **relazioni semantiche** sorprendenti: Re \- Uomo \+ Donna \= Regina Parigi \- Francia \+ Italia \= Roma Camminare \- Piede \+ Ruota \= Guidare (a volte) ### Vantaggi di Word2Vec * I vettori sono **compatti** (100–300 dimensioni invece che 10.000). * Cattura **somiglianze** e **relazioni semantiche**. * Enorme salto rispetto a TF-IDF. ### Limiti di Word2Vec 1. **Non capisce il contesto.** “pesca” \= stessa parola → stesso vettore che parli di frutto o dell'attività... 2. **Un vettore per parola per sempre.** Nessuna personalizzazione per la frase. 3. **Dipendenza dal dataset di origine.** Se Word2Vec è addestrato su Wikipedia, non capirà bene slang tipo “bro”, “cringe”, “sus”. (Il modello diventa boomer.) --- ## La similarità tra parole: come si misura? Come facciamo a sapere se due parole sono simili? Per confrontare due vettori di embedding si usa la **cosine similarity**. Non guarda la distanza assoluta tra le due parole, ma l’angolo che le divide. ### **Intuizione geometrica** * Due parole simili puntano nella **stessa direzione** → angolo piccolo → similarità alta. * Parole diverse puntano in direzioni molto diverse → angolo grande → similarità bassa. Valori: * **1.0** → identici * **0.6** → abbastanza simili * **0.0** → neutri * **\-1.0** → opposti (rarissimo per il linguaggio) ![QueenKing ++ >](https://miro.medium.com/1*hFop660jli4hoOJPgofQ5g.png) **Il trucco del "Re - Uomo + Donna" 🎩** Word2Vec permette di fare Algebra con le parole. Se prendi il vettore del RE, sottrai il *concetto* di UOMO e aggiungi il *concetto* di DONNA... atterri esattamente sulle coordinate della REGINA. --- ## BERT e oltre: gli embedding “contestuali” Word2Vec è geniale, ma ha un difetto enorme: *Ogni parola ha un solo significato numerico.* Ma noi esseri umani non funzioniamo così. Esempio: * “Ho un **piano** per rapinare la banca” → programma * “Raggiungimi al terzo **piano”** → livello * “Vali più **piano**, mi viene da vomitare” → intensità Serve un modello che **capisca il contesto**. Ed ecco che arrivano i Transformer. ## BERT (2018): il game changer BERT (**B**idirectional **E**ncoder **R**epresentations from **T**ransformers) non crea un vettore solo per la parola, ma un vettore **diverso per ogni frase**. Esempio: * embedding("piano", frase1) ≠ embedding("piano", frase2) ≠ embedding("piano", frase3) **🔎Ancora:** * Frase A: "Mi siedo sulla **panchina** del parco." * Frase B: "La **panchina** dell'Inter è molto lunga." Perché il sistema guarda tutta la frase contemporaneamente usando *self-attention*. ### Vantaggi di BERT * Coglie il **contesto**. * Capisce polisemia (parole con più significati). * Embedding molto più ricchi e precisi. * Ottimi per ricerca semantica, chatbot, classificazione, RAG. ### Limiti di BERT * Più lento e pesante rispetto a Word2Vec. * Richiede GPU per essere addestrato. * Non sempre “lineare” da interpretare. --- ## Oggi: Embedding moderni (anche per LLM) Modelli come: * **Sentence-BERT** * **E5** * **BGE** * **Gemma Embeddings** * **OpenAI Embeddings** producono vettori per **intere frasi**, non solo parole. ### **Cosa cambia?** * Mantengono il contesto. * Capiscono sinonimi, parafrasi, frasi equivalenti. * Sono ottimi per RAG (Retrieval Augmented Generation). Esempio: Frase cercata: “strumento per tagliare l'erba!" Documenti: * "manuale del robottino da giardino" * "guida al giardinaggio" * "storia della musica classica" Gli embedding: * avvicinano la frase al "robottino" o al "giardinaggio" * mettono lontanissimo “musica classica”