Cos'è un embedding vettoriale
Un embedding vettoriale è una rappresentazione numerica di un testo (una frase, un paragrafo, un documento) sotto forma di vettore, ovvero una lista di numeri (tipicamente da 384 a 3072 dimensioni).
Per esempio, la frase "smartphone con fotocamera eccellente" potrebbe diventare un vettore come:
[0.23, -0.15, 0.87, 0.42, ...] (in realtà migliaia di numeri)
L'aspetto rivoluzionario è che testi con significato simile producono vettori numericamente vicini nello spazio multidimensionale, anche se usano parole diverse.
Come si creano gli embedding
Gli embedding vengono generati da modelli di embedding, reti neurali addestrate su enormi quantità di testo per "imparare" le relazioni semantiche tra parole e frasi.
I modelli più usati:
- OpenAI text-embedding-3-small/large: 1536-3072 dimensioni, bilanciamento qualità/costo
- Google Universal Sentence Encoder: 512 dimensioni, ottimo per frasi brevi
- Sentence-BERT: open source, vari formati, performance eccellenti
- Cohere embed-multilingual: supporto multilingue robusto
Il processo è semplice:
const text = "Il nostro prodotto risolve il problema della produttività"
const embedding = await openai.embeddings.create({
model: "text-embedding-3-small",
input: text
})
// embedding.data[0].embedding → [0.12, -0.34, 0.56, ...]
Una volta generato, l'embedding viene salvato in un database vettoriale (pgvector, Pinecone, Weaviate, Qdrant) ottimizzato per ricerche rapide di similarità.
Spazi vettoriali e similarità semantica
Immagina uno spazio a migliaia di dimensioni dove ogni "punto" rappresenta un possibile significato. Testi semanticamente simili si trovano vicini in questo spazio.
Per misurare quanto due testi sono simili, si calcola la distanza (o similarità) tra i loro vettori. Le metriche più comuni:
Cosine similarity
Misura l'angolo tra due vettori. Valore da -1 (opposti) a +1 (identici).
- 0.9-1.0 → molto simili
- 0.7-0.9 → simili
- 0.5-0.7 → correlati
- <0.5 → poco correlati
Dot product
Prodotto scalare tra vettori. Più alto = più simili. Usato quando vettori sono normalizzati.
Euclidean distance
Distanza geometrica diretta. Più bassa = più simili. Meno efficiente della cosine per testi.
Nel marketing, usiamo tipicamente cosine similarity perché è robusta a variazioni di lunghezza del testo.
Ricerca semantica: come funziona
La semantic search sfrutta gli embedding per trovare contenuti rilevanti basandosi sul significato, non sulle parole esatte.
Step 1: Indicizzazione
Tutti i documenti della knowledge base vengono trasformati in embedding e salvati nel database vettoriale con metadata (ID documento, categoria, data).
Step 2: Query
L'utente pone una domanda: "Quali sono le principali frustrazioni dei nostri clienti enterprise?"
Anche la query viene trasformata in embedding usando lo stesso modello usato per indicizzare.
Step 3: Similarity search
Il database vettoriale calcola la similarità tra l'embedding della query e gli embedding di tutti i documenti, ritornando i top K più simili (es. top 5).
Step 4: Retrieval
I documenti più rilevanti vengono recuperati e possono essere:
- Mostrati all'utente direttamente
- Usati come contesto per RAG (passati a un LLM per generare una risposta)
Esempio pratico
Query: "problemi con il nostro servizio clienti"
Documenti indicizzati:
- "I clienti si lamentano dei tempi di risposta lunghi" → similarity: 0.89
- "Il team di supporto è sottodimensionato" → similarity: 0.82
- "Nuova feature di chat in arrivo" → similarity: 0.45
- "Piano marketing Q2" → similarity: 0.12
Il sistema recupera i documenti 1 e 2, che parlano di problemi nel customer service anche senza usare le parole esatte della query.
Applicazioni nel marketing
1. Ricerca intelligente in knowledge base
Un marketing manager può interrogare anni di ricerche, report, brief usando linguaggio naturale. "Cosa sappiamo sulle preferenze dei millennial riguardo alla sostenibilità?" trova tutti i contenuti rilevanti anche se usano termini come "Gen Y", "eco-conscious", "green".
2. Clustering di segmenti consumer
Trasformando le descrizioni di consumatori in embedding, puoi usare algoritmi di clustering (k-means, DBSCAN) per identificare segmenti naturali basati su somiglianze comportamentali e attitudinali, non solo demografiche.
3. Raccomandazione di contenuti
"Persone interessate a questo articolo hanno anche apprezzato...". Gli embedding permettono di trovare contenuti semanticamente simili, migliorando engagement e retention.
4. Duplicate detection e consolidamento
In grandi knowledge base, è facile avere informazioni duplicate o sovrapposte. Gli embedding aiutano a identificare contenuti molto simili per consolidarli.
5. Auto-tagging e categorizzazione
Invece di taggare manualmente ogni contenuto, puoi usare embedding per categorizzare automaticamente: confronta l'embedding di un nuovo contenuto con gli embedding dei centroidi delle categorie esistenti.
6. Matching di bisogni e soluzioni
Embedding di "pain point dei clienti" e di "feature di prodotti". Trova automaticamente quali feature risolvono quali pain, supportando la costruzione di value proposition.
Chunking: dimensione ottimale degli embedding
Un documento lungo (es. report di 20 pagine) dovrebbe essere trasformato in un singolo embedding o diviso in pezzi?
Il problema del "dilution"
Un embedding di un documento lungo cattura il tema generale ma perde dettagli specifici. Se una singola sezione del report parla di un topic rilevante, ma il resto parla d'altro, l'embedding complessivo potrebbe non essere sufficientemente simile alla query.
La soluzione: chunking semantico
Dividi documenti lunghi in "chunks" (pezzi) di 200-500 parole, ciascuno con un embedding separato. Questo permette retrieval più preciso.
Strategie di chunking:
- Fixed size: ogni 300 parole (semplice ma può spezzare concetti)
- Paragrafo-based: ogni paragrafo è un chunk (rispetta struttura)
- Semantic chunking: usa AI per identificare "unità di significato" (es. ogni argomento distinto)
Per marketing, è utile chunking ibrido: rispetta strutture logiche (sezioni, Q&A pairs) ma evita chunk troppo grandi.
Overlap per contesto
È utile avere overlap tra chunk consecutivi (es. ultime 50 parole di chunk N diventano prime 50 di chunk N+1). Questo garantisce che concetti a cavallo tra due chunk non vadano persi.
Embedding multimodali: oltre il testo
I modelli più avanzati (CLIP, ImageBind) creano embedding non solo da testo ma anche da immagini, audio, video, nello stesso spazio vettoriale.
Questo significa che puoi:
- Cercare immagini usando una descrizione testuale ("donna sorridente con laptop")
- Trovare video che parlano di un topic specifico senza trascrizioni
- Raggruppare asset creativi per "mood" visivo
Per marketing, questo abilita gestione intelligente di archivi visuali: "trova tutte le creative che comunicano innovazione tecnologica" recupera immagini, video, infografiche rilevanti.
Limitazioni e considerazioni
Context window dei modelli
Gli embedding hanno un limite di token in input (es. 8192 token = ~6000 parole). Documenti più lunghi devono essere chunked.
Qualità dipende dal modello
Non tutti i modelli di embedding sono uguali. Alcuni eccellono in domini specifici (tecnico, medico), altri sono generalisti. Per marketing B2B, modelli addestrati su testi business performano meglio.
"Lost in the middle"
Quando si recuperano molti chunk (es. top 20), i chunk "in mezzo" vengono spesso ignorati da LLM che tendono a focalizzarsi su primi e ultimi. Meglio limitare retrieval a top 3-5 più rilevanti.
Multilingue
Modelli di embedding standard (es. OpenAI) funzionano bene in inglese ma possono degradare in altre lingue. Per progetti multilingue, usare modelli esplicitamente multilingue (Cohere, mUSE).
Aggiornamento embedding
Se cambi il modello di embedding, devi ri-generare tutti gli embedding esistenti. Altrimenti query (con nuovo modello) e documenti (con vecchio modello) vivono in spazi vettoriali diversi e similarity non funziona.
Embedding e RAG: la coppia perfetta
Gli embedding sono il "motore di ricerca" di RAG. Il workflow completo:
- Indicizzazione: Documenti → Chunks → Embedding → Vector DB
- Query: Utente pone domanda → Embedding della query
- Retrieval: Similarity search → Top K chunks rilevanti
- Augmentation: Chunks + Query → Context per LLM
- Generation: LLM genera risposta usando il context
Senza embedding di qualità, il retrieval fallisce e l'LLM non ha il contesto giusto. Gli embedding sono il fondamento dell'intelligenza semantica.
Best practices per embedding in marketing
1. Usa metadata strutturati
Oltre all'embedding, salva metadata (categoria, data, autore, confidenza). Puoi filtrare prima della similarity search: "cerca solo in competitive intel, ultimi 6 mesi".
2. Hybrid search
Combina similarity search (semantica) con keyword search (esatta). Alcuni database vettoriali (Weaviate, Qdrant) supportano questo natively.
3. Reranking
Dopo retrieval, usa un modello di reranking (es. Cohere rerank) per riordinare i risultati basandosi su rilevanza più sofisticata.
4. Testa diversi modelli
Fai benchmark: genera embedding di sample documenti con 2-3 modelli diversi, poi testa query rappresentative e confronta qualità retrieval.
5. Monitora similarity threshold
Se similarity è sempre <0.6, forse i documenti indicizzati non coprono il dominio delle query. Serve arricchire la knowledge base.
Il futuro: embedding adattivi e context-aware
I prossimi modelli di embedding saranno context-aware: lo stesso testo avrà embedding diversi a seconda del contesto (es. "apple" in un documento tech vs food avrà embedding diversi).
Inoltre, embedding task-specific: invece di un embedding generico, modelli che si adattano al tipo di ricerca (es. embedding ottimizzato per trovare pain point vs embedding ottimizzato per trovare soluzioni competitive).
Per architetture multi-agente, ogni agente potrebbe avere il suo spazio vettoriale ottimizzato per il suo dominio di expertise.
Maps Intelligence utilizza OpenAI text-embedding-3-small (1536 dimensioni) per vettorializzare automaticamente tutti i dati di progetto (competitive intel, social listening, SEO, consumer insight, brand strategy), memorizzandoli in pgvector e rendendoli interrogabili via similarity search con threshold 0.35, garantendo retrieval semantico preciso per la RAG chat.
