Vai al contenuto principale
Embeddings e rappresentazione semantica - immagine ufficiale della lezione su GinnyTech, creata da AD

Embeddings e rappresentazione semantica

Usare embeddings per rappresentare clienti, prodotti e contenuti in spazi vettoriali.

AD
Creato da Andrii Dyshkantiuk
Lezione 83 / 216 Livello: Avanzato Durata: 22 min Prerequisiti: 1

Cosa imparerai

  • Comprendere il problema analitico e il contesto decisionale
  • Applicare esempi, metriche e controlli a casi reali

Embeddings e rappresentazione semantica

Migliaia di recensioni, ticket e ricerche interne contengono segnali di intenzione, frustrazione e desiderio, ma le keyword manuali non bastano più. Embeddings e rappresentazione semantica trasformano testo e contenuti in spazi numerici utili per raggruppare, cercare e raccomandare senza perdere il contesto.

Una scena da cui partire

Leggi questa lezione come traduzione tra linguaggio e azione marketing. Un embedding è utile se migliora ricerca, segmentazione, personalizzazione o analisi qualitativa; altrimenti resta una rappresentazione elegante senza impatto.

  • Contesto: Quale contenuto testuale contiene un segnale commerciale?
  • Metodo: Quale valutazione dimostra che la distanza semantica è utile?
  • Applicazione: Dove useresti embeddings senza promettere comprensione perfetta?

Dalla Sparsità alla Densità: Il Perché degli Spazi Vettoriali

Per apprezzare la potenza degli embeddings, dobbiamo prima comprendere il problema che risolvono. Immaginiamo di dover rappresentare un prodotto di un catalogo e-commerce. Un approccio ingenuo, noto come one-hot encoding, consiste nel creare un vettore lungo quanto l’intero catalogo (diciamo, 50.000 prodotti), composto interamente da zeri tranne per un ‘1’ nella posizione corrispondente al nostro prodotto. Questo metodo ha due difetti catastrofici. Primo, la dimensionalità è esagerata: ogni prodotto è un punto in uno spazio a 50.000 dimensioni. Questo fenomeno, noto come “maledizione della dimensionalità”, rende i calcoli inefficienti e richiede una quantità di dati proibitiva per trovare pattern significativi. Secondo, e più grave, questo spazio non ha alcuna struttura semantica. Il vettore per “scarpa da corsa Nike Air Zoom” è ortogonale e distante esattamente quanto quello per “frullatore a immersione” e “scarpa da corsa Adidas Ultraboost”. Per il modello, questi tre oggetti sono semplicemente entità distinte e non correlate.

Gli embeddings ribaltano questo paradigma. Invece di un vettore sparso e ad alta dimensionalità, rappresentiamo ogni entità con un vettore denso (quasi tutti i valori sono non-nulli) e a bassa dimensionalità (tipicamente tra 50 e 1024 dimensioni). Il punto chiave è che questo nuovo spazio vettoriale è progettato affinché la distanza geometrica tra i vettori rifletta la similarità semantica tra le entità. Nello spazio degli embeddings, il vettore di “Nike Air Zoom” sarà molto vicino a quello di “Adidas Ultraboost” (entrambi sono scarpe da corsa) e molto lontano da quello del “frullatore a immersione”. Questa vicinanza si misura tipicamente con la similarità del coseno, che valuta l’angolo tra due vettori: un angolo piccolo (coseno vicino a 1) indica alta similarità, un angolo di 90 gradi (coseno 0) indica nessuna similarità. Questo principio, nato nel campo del Natural Language Processing con algoritmi come Word2Vec, ha permesso la famosa analogia vettoriale: vettore('Re') - vettore('Uomo') + vettore('Donna') ≈ vettore('Regina'). L’operazione cattura la relazione di “genere e regalità”. Nel marketing, le analogie diventano: vettore('iPhone 14 Pro') - vettore('Apple') + vettore('Samsung') ≈ vettore('Galaxy S23 Ultra').

Uno degli usi più potenti degli embeddings nel marketing è la creazione di una rappresentazione vettoriale dell’intero catalogo prodotti. Invece di basarsi su attributi manuali (categoria, colore, brand), che sono spesso incompleti o soggettivi, possiamo apprendere le relazioni tra i prodotti direttamente dal comportamento degli utenti. La tecnica più diffusa è nota come prod2vec, un’applicazione diretta dell’algoritmo Word2Vec al mondo dell’e-commerce. L’idea è trattare le sessioni di acquisto o di navigazione degli utenti come se fossero “frasi” e i prodotti come se fossero “parole”. Se un utente acquista nello stesso ordine un tonico per il viso, un siero alla vitamina C e una crema idratante, questi tre prodotti formano una sequenza con un forte legame semantico nel contesto della skincare.

Il modello Word2Vec (nella sua variante Skip-gram) viene addestrato a predire i prodotti “contesto” (quelli acquistati insieme) dato un prodotto “target”. Durante questo processo di addestramento, il modello impara un vettore denso per ogni prodotto. Al termine, i prodotti che appaiono frequentemente negli stessi carrelli avranno vettori molto simili. Questo approccio scopre relazioni che vanno ben oltre la categorizzazione standard. Potrebbe scoprire che un certo tipo di birra artigianale (prodotto A) viene spesso acquistato con delle patatine gourmet al tartufo (prodotto B) e un particolare gioco da tavolo (prodotto C). Sebbene appartengano a categorie merceologiche diverse (bevande, snack, intrattenimento), i loro embeddings saranno vicini perché soddisfano un’esigenza latente comune: “serata relax tra amici”. Questi vettori possono alimentare motori di raccomandazione (“Chi ha comprato A, ha comprato anche B”), popolare caroselli “Spesso acquistati insieme”, o identificare prodotti sostituti (quelli con embedding più simile a un prodotto esaurito).

Caso di Studio: Zalando e lo “Style Embedding” Zalando, il colosso europeo della moda online, ha implementato estensivamente i product embeddings per comprendere il concetto astratto di “stile”. Invece di affidarsi solo a tag manuali, hanno analizzato le sequenze di prodotti visualizzati dagli utenti durante una sessione. Trattando ogni sessione come una frase, hanno addestrato un modello prod2vec. Il risultato è uno spazio vettoriale dove i prodotti non sono raggruppati per categoria (“magliette”, “pantaloni”), ma per stile (“minimalista scandinavo”, “boho-chic”, “athleisure”). Un paio di sneaker bianche minimaliste potrebbe quindi essere più vicino a un cappotto color cammello che a un’altra sneaker da basket appariscente, perché appartengono allo stesso universo stilistico. Questa comprensione ha permesso a Zalando di potenziare i suoi suggerimenti “Completa il look”, portando a un aumento stimato del 12% nel valore medio degli ordini (AOV) per le sessioni che interagivano con queste raccomandazioni e una riduzione del 15% del bounce rate sulle pagine prodotto, offrendo agli utenti alternative stilisticamente coerenti.

User Embeddings: Oltre la Segmentazione Demografica

Se possiamo rappresentare i prodotti in uno spazio vettoriale, possiamo fare lo stesso con gli utenti. Creare un user embedding significa distillare tutte le interazioni, preferenze e comportamenti di un cliente in un singolo vettore denso. Questo vettore diventa un DNA digitale del gusto e dell’intenzione dell’utente. Esistono due approcci principali per costruire questi embeddings. Il primo deriva direttamente dai modelli di collaborative filtering, in particolare dalla fattorizzazione di matrici. In un modello come Alternating Least Squares (ALS), la matrice gigante Utente × Prodotto delle interazioni (acquisti, click, valutazioni) viene decomposta in due matrici più piccole: una matrice di user-factors (gli user embeddings) e una di item-factors (i product embeddings). L’embedding di un utente è quindi appreso implicitamente: è il vettore che, moltiplicato scalarmente con i vettori dei prodotti, meglio ricostruisce le interazioni osservate di quell’utente. Utenti con vettori simili sono quelli che hanno storicamente interagito con prodotti simili.

Il secondo approccio è basato sulle feature. Si costruisce un set di caratteristiche esplicite per ogni utente: metriche RFM (Recency, Frequency, Monetary), categorie di prodotti preferite, brand più acquistati, fasce orarie di attività, tasso di reso, e così via. Questo insieme di feature, una volta normalizzato, può essere considerato un embedding “grezzo”. Spesso, per ridurne la dimensionalità e catturare le correlazioni tra le feature, questo vettore viene dato in input a un autoencoder, una rete neurale che impara a comprimerlo in una rappresentazione latente (l’embedding) e a ricostruirlo. Il vantaggio di questo approccio è l’interpretabilità: le dimensioni dell’embedding possono essere correlate alle feature originali. Questi user embeddings sono la spina dorsale di molte applicazioni di marketing avanzato. Nel lookalike modeling, si calcola il centroide (il vettore medio) dei migliori clienti (es. il top 5% per LTV) e si cercano nel database prospect i cui vettori sono più vicini a questo centroide. Questi sono i lead a più alta probabilità di conversione e possono essere targettizzati con campagne ad hoc su piattaforme come Meta o Google Ads.

Caso di Studio: Spotify e il “Taste Profile” Vettoriale Spotify è un maestro nell’uso degli user embeddings per alimentare la sua celebre playlist “Discover Weekly”. Ogni utente su Spotify è rappresentato da un “taste profile”, un embedding complesso che cattura i suoi gusti musicali. Questo vettore non deriva solo dalle canzoni ascoltate. Spotify costruisce una rappresentazione per ogni traccia musicale basandosi su due fonti: 1) analisi del contenuto audio grezzo tramite reti neurali convoluzionali (CNN) per estrarre features come energia, ballabilità, acustica; 2) dati collaborativi, usando modelli come Word2Vec sulle sequenze di ascolto degli utenti (le “sessioni” sono le frasi). L’embedding di un utente è quindi una combinazione ponderata degli embeddings delle tracce che ascolta e delle playlist che crea. Quando Spotify genera “Discover Weekly”, il suo algoritmo non fa altro che una ricerca di vicini più prossimi (Nearest Neighbors) nello spazio vettoriale delle canzoni. Cerca le tracce i cui embeddings sono molto vicini al taste profile dell’utente, ma che l’utente non ha ancora ascoltato. Questo approccio ha permesso a Spotify di ottenere un successo straordinario nel far scoprire nuova musica, con stime che indicano che le raccomandazioni algoritmiche guidano oltre il 30% di tutti gli ascolti sulla piattaforma, aumentando drasticamente la retention e l’engagement degli utenti.

La Sfida della Scala: Vector Databases per la Ricerca Semantica in Tempo Reale

Creare milioni di embeddings per prodotti e utenti è solo metà del lavoro. La vera sfida operativa è come utilizzarli in tempo reale per servire raccomandazioni o risultati di ricerca a milioni di utenti concorrenti. Immaginiamo un catalogo con 10 milioni di prodotti, ognuno rappresentato da un embedding a 768 dimensioni. Un utente clicca su un prodotto. Per trovare i 10 prodotti più simili, dovremmo calcolare la similarità del coseno tra l’embedding del prodotto cliccato e quello di tutti gli altri 9,999,999 prodotti. Questa operazione di brute-force è computazionalmente insostenibile e non potrebbe mai soddisfare i requisiti di latenza di un’applicazione web moderna. La soluzione a questo problema ingegneristico si chiama Approximate Nearest Neighbor (ANN) search. Invece di cercare il vicino esatto, gli algoritmi ANN cercano un vicino “abbastanza buono” in una frazione del tempo, sacrificando una minima parte di accuratezza per un guadagno enorme in velocità.

Algoritmi come HNSW (Hierarchical Navigable Small World) o ScaNN (Scalable Nearest Neighbors di Google) costruiscono strutture dati intelligenti, simili a indici, che permettono di navigare lo spazio vettoriale in modo estremamente efficiente. HNSW, per esempio, crea una serie di grafi a più livelli, dove i livelli superiori contengono collegamenti “lunghi” che permettono di attraversare rapidamente lo spazio, mentre i livelli inferiori contengono collegamenti “corti” per una ricerca più fine nell’intorno del target. La ricerca parte dal livello più alto e scende progressivamente, scartando intere regioni dello spazio vettoriale a ogni passo. Per gestire questi indici e le operazioni di inserimento e interrogazione su larga scala, sono nati i vector databases. Piattaforme come Pinecone, Weaviate, Milvus o estensioni come pgvector per PostgreSQL sono progettate specificamente per memorizzare e interrogare miliardi di vettori ad alta dimensionalità. Si occupano dell’indicizzazione ANN, della distribuzione del carico e forniscono API semplici per integrare la ricerca semantica nelle applicazioni. Un tipico flusso di lavoro di ricerca semantica per un e-commerce potrebbe essere:

  1. L’utente digita “camicia di lino per l’estate”.
  2. La query testuale viene convertita in un embedding usando un modello pre-addestrato (es. Sentence-BERT).
  3. Questo query-embedding viene inviato al vector database.
  4. Il database usa un indice ANN per trovare i K product-embeddings più vicini in pochi millisecondi.
  5. Gli ID dei prodotti corrispondenti vengono restituiti e mostrati all’utente. Questo processo trasforma la ricerca da una semplice corrispondenza di parole chiave a una vera comprensione dell’intento dell’utente.

Mettiamoci alla Prova: dal Dato Grezzo alla Raccomandazione

Passiamo ora dalla teoria alla pratica. In questo laboratorio, costruiremo un semplice sistema di raccomandazione “prodotti correlati” basato su embeddings prod2vec. Useremo un piccolo dataset sintetico di transazioni per simulare il comportamento di acquisto e la libreria Python gensim per addestrare il modello.

Esercizio 1: Generazione del Corpus di “Frasi” di Acquisto Il primo passo è trasformare i dati transazionali in un formato che il modello Word2Vec possa digerire. Dobbiamo raggruppare i prodotti per ogni transazione, creando delle “frasi” dove ogni “parola” è un ID prodotto.

import pandas as pd
from gensim.models import Word2Vec

# 1. Creiamo un dataset sintetico di transazioni
# In un caso reale, questo verrebbe da un database SQL
data = {'order_id': [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5],
        'product_id': ['P101', 'P202', 'P303', 
                       'P101', 'P202',
                       'P404', 'P505', 'P606', 'P707',
                       'P404', 'P505',
                       'P101', 'P303', 'P808']}
transactions_df = pd.DataFrame(data)

# Convertiamo gli ID prodotto in stringhe per gensim
transactions_df['product_id'] = transactions_df['product_id'].astype(str)

# 2. Creiamo il nostro corpus: una lista di liste, dove ogni lista interna è un ordine
# Questo è l'input che serve al modello Word2Vec
purchase_sequences = transactions_df.groupby('order_id')['product_id'].apply(list).tolist()

print("Sequenze di acquisto (il nostro corpus):")
for seq in purchase_sequences:
    print(seq)

L’output di questo script sarà una lista di liste, come [['P101', 'P202', 'P303'], ['P101', 'P202'], ...], che rappresenta il nostro corpus.

Esercizio 2: Addestramento del Modello prod2vec Ora che abbiamo il corpus, possiamo addestrare il modello. Useremo gensim.models.Word2Vec. I parametri chiave sono vector_size (la dimensionalità dei nostri embeddings), window (la distanza massima tra il prodotto target e quelli contesto), e min_count (ignora i prodotti con meno di N occorrenze).

# 3. Addestriamo il modello Word2Vec (prod2vec)
# vector_size: la dimensionalità degli embeddings che vogliamo creare
# window: quanti prodotti "vicini" considerare in un ordine per definire il contesto
# min_count: ignora i prodotti acquistati meno di X volte
# sg=1: usa l'algoritmo Skip-gram, solitamente migliore per questo tipo di task
model = Word2Vec(sentences=purchase_sequences, 
                 vector_size=10,  # Bassa dimensionalità per il nostro piccolo dataset
                 window=5, 
                 min_count=1, 
                 sg=1,
                 workers=4)

print("\nModello addestrato con successo!")
# Possiamo ispezionare l'embedding di un prodotto
print("Embedding per il prodotto P101:")
print(model.wv['P101'])

Esercizio 3: Generare Raccomandazioni di Prodotti Simili Con il modello addestrato, possiamo ora usarlo per trovare prodotti semanticamente simili, ovvero quelli che vengono spesso acquistati nello stesso contesto. La funzione most_similar del modello fa esattamente questo, usando la similarità del coseno nello spazio degli embeddings.

# 4. Usiamo il modello per trovare prodotti simili
target_product = 'P101'
# La funzione most_similar trova i vettori più vicini a quello del prodotto target
# e restituisce i prodotti corrispondenti con il loro score di similarità (coseno)
similar_products = model.wv.most_similar(target_product, topn=3)

print(f"\nProdotti più simili a {target_product}:")
for product, score in similar_products:
    print(f"- Prodotto: {product}, Similarità: {score:.4f}")

# Proviamo con un altro prodotto
target_product_2 = 'P404'
similar_products_2 = model.wv.most_similar(target_product_2, topn=3)
print(f"\nProdotti più simili a {target_product_2}:")
for product, score in similar_products_2:
    print(f"- Prodotto: {product}, Similarità: {score:.4f}")

Eseguendo questo codice, noterete che per P101 il modello suggerirà P202 e P303, perché appaiono spesso insieme. Similmente, per P404 suggerirà P505. Abbiamo appena costruito un motore di raccomandazione elementare basato su embeddings.

Gli embeddings non sono solo una tecnica di machine learning, ma un cambio di paradigma nella rappresentazione dei dati. Permettono di tradurre entità complesse e discrete — prodotti, utenti, parole, sessioni — in un linguaggio universale e continuo, quello degli spazi vettoriali. In questo spazio, la distanza diventa un proxy della relazione semantica, consentendo operazioni matematiche che catturano analogie e similarità. Abbiamo visto come i product embeddings, appresi da sequenze di acquisto, possano svelare la struttura latente di un catalogo, andando oltre le categorie manuali. Abbiamo esplorato come gli user embeddings creino profili di gusto digitali, alimentando personalizzazioni profonde come il lookalike modeling e i motori di scoperta. Infine, abbiamo affrontato la sfida ingegneristica della scala, comprendendo il ruolo dei vector databases e degli algoritmi ANN nel rendere queste potenti capacità accessibili in tempo reale. Padroneggiare la creazione e l’utilizzo degli embeddings è un passo obbligato per chiunque voglia operare nell’ambito della data science applicata al marketing e all’analisi del comportamento utente.

References

  • Grbovic, M., & Cheng, H. (2018). Real-time Personalization using Embeddings for Search Ranking at Airbnb. Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining.
  • Mikolov, T., Sutskever, I., Chen, K., Corrado, G. S., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. Advances in Neural Information Processing Systems 26 (NIPS 2013).

## Problema reale

Nel dominio di marketing data science, **Embeddings e rappresentazione semantica** serve a risolvere questo problema: usare modelli e segmentazioni per decidere dove intervenire, non per produrre complessità fine a se stessa. La lezione non va trattata come teoria isolata, ma come un modo per migliorare una scelta concreta con dati, assunzioni esplicite e controlli minimi.

Obiettivo operativo: Comprendere il problema analitico e il contesto decisionale; Applicare esempi, metriche e controlli a casi reali. Se alla fine non sai indicare quale decisione cambia, quale dato osservi e quale errore vuoi evitare, la lezione non è ancora diventata competenza applicata.

## Modello concettuale

| Fase | Cosa chiarire | Output |
|---|---|---|
| Domanda | Quale scelta reale deve migliorare? | Decisione da prendere |
| Misura | Quale segnale osservabile rappresenta il problema? | Metrica o dato sorgente |
| Controllo | Quale baseline rende il risultato interpretabile? | Confronto credibile |
| Azione | Che cosa cambia dopo l'analisi? | Prossimo passo operativo |

Il modello concettuale è intenzionalmente semplice: decisione, dato, controllo, azione. Ogni approfondimento tecnico deve rafforzare almeno uno di questi quattro punti.

## Formalizzazione rigorosa

Per rendere **Embeddings e rappresentazione semantica** analizzabile, definisci prima l'unità di lavoro: **cliente, campagna, segmento, previsione o feature**. Poi collega questa unità a una metrica osservabile: **lift, errore, stabilità, valore marginale e costo operativo**. Infine dichiara la decisione attesa: **modello, esperimento, segmento attivabile o raccomandazione**.

| Elemento | Specifica richiesta |
|---|---|
| Unita di analisi | cliente, campagna, segmento, previsione o feature |
| Segnale principale | lift, errore, stabilità, valore marginale e costo operativo |
| Baseline | Periodo precedente, gruppo comparabile, benchmark o scenario controfattuale |
| Decisione | modello, esperimento, segmento attivabile o raccomandazione |
| Rischio | Scambiare un numero disponibile per una prova sufficiente |

La formalizzazione e solida quando un altro analista può riprodurre la logica, criticare le assunzioni e ottenere la stessa decisione partendo dagli stessi dati.

## Esempio o caso studio

Un sistema di embedding raggruppa ticket su "rimborso in ritardo", "consegna mancata" e "codice promo non applicato" anche quando le parole usate dai clienti cambiano. Il caso è utile perché collega rappresentazione semantica a una decisione concreta: priorità di contenuto, risposta CRM o miglioramento prodotto.

| Evidenza osservata | Lettura prudente | Azione consigliata |
|---|---|---|
| Il numero migliora | Potrebbe essere effetto reale o variazione normale | Cercare confronto e segmento |
| Un segmento cambia più degli altri | La media aggregata nasconde una differenza | Separare coorti o casi d'uso |
| Il costo cresce insieme al risultato | L'impatto va letto sul margine | Stimare trade-off e sostenibilità |

## Lab / esercizio

### Livello base

Scrivi una scheda di una pagina per **Embeddings e rappresentazione semantica**: decisione da supportare, metrica primaria, baseline, rischio principale e azione se il segnale e confermato.

### Livello intermedio

Costruisci una tabella con tre segmenti, periodi o scenari. Per ciascuno indica cosa cambia, quale spiegazione alternativa e plausibile e quale controllo useresti prima di raccomandare un azione.

### Livello research-grade

Prepara un decision memo: ipotesi, dati richiesti, criteri di esclusione, controlli di qualità, soglia decisionale, rischio residuo e piano di monitoraggio dopo la decisione.

### Dataset e materiali consigliati

Usa CRM, campagne, transazioni, feature marketing, testo, embeddings e serie storiche. Se non hai accesso a dati reali, crea un dataset sintetico con almeno 200 righe, una dimensione temporale, una dimensione segmento e una metrica di outcome.

## Errore tipico da evitare

L'errore più comune e usare **Embeddings e rappresentazione semantica** come etichetta invece che come processo. Succede quando il team mostra un grafico senza decisione, una metrica senza baseline, o una conclusione senza indicare quale assunzione potrebbe invalidarla.

La domanda di controllo è: se questo risultato fosse instabile, quale scelta sbaglierei? Se la risposta non è concreta, manca ancora il collegamento tra analisi e azione.

## Quiz o checkpoint

1. Quale decisione concreta dovrebbe migliorare questa lezione?
2. Quale unità di analisi rende il problema misurabile?
3. Quale baseline useresti per evitare una lettura ingenua?
4. Quale errore tipico potrebbe cambiare la conclusione?
5. Quale output consegneresti a uno stakeholder non tecnico?

## Riepilogo operativo

**Embeddings e rappresentazione semantica** diventa utile quando produce una decisione più chiara, non quando aggiunge terminologia. Usa il framework problema, modello, formalizzazione, esempio, lab e checkpoint per trasformare la lezione in pratica verificabile. Categoria: Tecnico. Difficolta: advanced. Tempo stimato: 22 min.