Cos'e un embedding
Un embedding e una rappresentazione numerica densa di un concetto (parola, frase, documento, immagine) sotto forma di vettore a N dimensioni. L'intuizione fondamentale e che il significato puo essere catturato dalla posizione nello spazio: concetti simili si trovano vicini, concetti diversi lontani.
A differenza delle rappresentazioni sparse (one-hot encoding, dove ogni parola e un vettore con un solo "1" e migliaia di "0"), gli embedding sono densi (ogni dimensione contiene un valore floating-point significativo) e a dimensionalita relativamente bassa (tipicamente 256-3072 dimensioni vs centinaia di migliaia nel one-hot).
Gli embedding sono il ponte tra il linguaggio umano e la matematica. Trasformano testo, immagini e audio in punti di uno spazio geometrico dove le operazioni vettoriali corrispondono a relazioni semantiche.
Word2Vec e GloVe
Word2Vec (Mikolov et al., 2013) e stato il punto di svolta che ha reso gli embedding mainstream nel NLP. Due architetture:
- CBOW (Continuous Bag of Words): predice una parola dal contesto circostante.
- Skip-gram: predice le parole di contesto data una parola centrale. Funziona meglio con dati limitati e parole rare.
La scoperta sensazionale e stata che gli embedding catturano relazioni semantiche come operazioni aritmetiche: vec("re") - vec("uomo") + vec("donna") ≈ vec("regina"). Questo suggerisce che la rete ha appreso dimensioni di significato implicite come genere, regalita, tempo verbale.
GloVe (Global Vectors, Stanford 2014) combina le statistiche globali di co-occorrenza del corpus con l'apprendimento locale di Word2Vec, ottenendo embedding che catturano meglio le relazioni globali tra parole.
Embedding moderni e contestuali
Word2Vec e GloVe producono embedding statici: ogni parola ha un unico vettore. Il limite e evidente: "pesca" (frutto) e "pesca" (attivita) hanno lo stesso embedding. I modelli moderni risolvono questo con embedding contestuali:
Modelli di embedding attuali
OpenAI text-embedding-3-large: 3072 dimensioni, stato dell'arte commerciale.
Cohere embed-v3: ottimizzato per ricerca e classificazione multilingue.
BGE / E5 (open source): prestazioni competitive, eseguibili in locale.
Sentence-BERT: embedding a livello di frase, ottimo per similarita semantica.
Questi modelli, basati su Transformer, generano un vettore diverso per la stessa parola in base al contesto, risolvendo il problema della polisemia. Possono produrre embedding per singole parole, frasi intere o interi documenti.
Similarita coseno
La similarita coseno e la metrica standard per confrontare embedding. Misura il coseno dell'angolo tra due vettori, indipendentemente dalla loro lunghezza:
cos(A, B) = (A . B) / (||A|| * ||B||)
Valore 1: vettori identici (semanticamente uguali).
Valore 0: vettori ortogonali (non correlati).
Valore -1: vettori opposti (semanticamente opposti).
Alternative includono la distanza euclidea (sensibile alla magnitudine) e il prodotto scalare (dot product, piu veloce ma meno robusto). In pratica, per embedding normalizzati (norma = 1), coseno e dot product coincidono.
Vector database
Un vector database e un sistema di archiviazione ottimizzato per memorizzare, indicizzare e cercare vettori ad alta dimensionalita in modo efficiente. A differenza di un database relazionale che cerca per corrispondenza esatta, un vector DB trova i vettori piu "simili" a una query tramite ricerca Approximate Nearest Neighbor (ANN).
Gli algoritmi di indicizzazione principali sono:
- HNSW (Hierarchical Navigable Small World): grafi navigabili multilivello. Ottimo rapporto velocita/accuratezza, alto consumo di memoria.
- IVF (Inverted File Index): partiziona lo spazio in cluster. Veloce con molti vettori, richiede training dell'indice.
- PQ (Product Quantization): comprime i vettori per ridurre la memoria. Utile per miliardi di vettori.
Confronto: Pinecone, Weaviate, Chroma
| Database | Tipo | Ideale per | Caratteristiche |
|---|---|---|---|
| Pinecone | Cloud managed | Produzione, scalabilita | Fully managed, serverless, filtraggio metadati, nessuna infrastruttura |
| Weaviate | Open source / Cloud | Ricerca ibrida, GraphQL | Ricerca vettoriale + keyword (BM25), moduli di embedding integrati |
| Chroma | Open source | Prototipazione, locale | Semplicissimo da usare, in-memory, ideale per sviluppo e POC |
| Qdrant | Open source / Cloud | Performance, filtraggio | Rust-based, molto veloce, filtraggio avanzato su metadati |
| pgvector | Estensione PostgreSQL | Integrazione con DB esistente | Nessun database aggiuntivo, ideale se hai gia PostgreSQL |
La scelta dipende dal contesto: per un prototipo rapido, Chroma in locale e perfetto; per produzione enterprise, Pinecone o Weaviate offrono scalabilita e gestione semplificata; se hai gia PostgreSQL, pgvector evita infrastruttura aggiuntiva.
Uso in RAG e ricerca semantica
Embedding e vector database sono i mattoni fondamentali della RAG (Retrieval Augmented Generation). La pipeline e:
- I documenti vengono suddivisi in chunk e trasformati in embedding (fase offline).
- Gli embedding vengono indicizzati nel vector database.
- Quando arriva una query, viene convertita in embedding con lo stesso modello.
- Il vector database restituisce i chunk piu simili (ricerca per similarita coseno).
- I chunk recuperati vengono inseriti nel prompt del LLM come contesto.
Oltre alla RAG, gli embedding alimentano la ricerca semantica (trovare risultati per significato, non solo parole chiave), i sistemi di raccomandazione (prodotti simili in e-commerce), il clustering di documenti e il rilevamento di duplicati o plagio.
La qualita degli embedding determina la qualita del retrieval, che a sua volta determina la qualita delle risposte del LLM. Investire nella scelta del modello di embedding e spesso piu impattante della scelta del LLM generatore. Per comprendere come i testi vengono trasformati in token prima di diventare embedding, consulta l'articolo dedicato.