Nel post precedente abbiamo descritto i database vettoriali, e come utilizzati all’interno del mondo dell’intelligenza artificiale. In particolare, abbiamo visto come il contenuto viene trasformato in embeddings (vettori N dimensionali) e memorizzati per le ricerche. In questo post vedremo come sia possibile rappresentare visivamente gli embeddings e plottarli all’interno di un grafico. Il tutto utilizzando python ed alcune sue librerie.
Gli embeddings sono rappresentazioni numeriche di dati (come frasi, parole o documenti) in uno spazio multidimensionale. Questa tecnica trasforma il testo in vettori numerici sfruttando modelli di NLP, permettendo confronti matematici tra i significati dei testi e analisi avanzate come clustering o search semantico. La visualizzazione delle distanze fra embeddings aiuta a percepire relazioni fra concetti e similarità semantica tra frasi.
Esempio in Python: da frasi a embedding e visualizzazione
Di seguito viene fornito un esempio completo in Python che mostra come:
- Generare gli embeddings di alcune frasi.
- Ridurre la dimensionalità a 2D con UMAP.
- Plottare i punti su un grafico scatter interattivo.
Dipendenze
Per riprodurre l’esempio sono necessarie le seguenti librerie:
pythonpip install openai umap-learn matplotlib
Codice Python
import openai
import umap
import numpy as np
import matplotlib.pyplot as plt
# API key OpenAI. Inserire la propria.
openai.api_key = "YOUR_OPENAI_API_KEY"
# Frasi di esempio
sentences = [
"Oggi c'è il sole",
"La giornata è bellissima",
"Amo fare trekking in montagna",
"La pizza è il mio piatto preferito",
"I gatti sono agili",
"Il mare oggi è calmo"
]
# Generazione degli embeddings tramite OpenAI
def get_embeddings(text_list):
response = openai.Embedding.create(
input=text_list,
model="text-embedding-3-small"
)
# Estrae gli embeddings vettoriali dal risultato
return np.array([r['embedding'] for r in response['data']])
embeddings = get_embeddings(sentences)
# Riduzione dimensionale a 2D per poter visualizzare i dati
reducer = umap.UMAP(n_neighbors=3, metric='cosine', random_state=42)
embeddings_2d = reducer.fit_transform(embeddings)
# Plot scatter 2D
plt.figure(figsize=(8, 5))
plt.scatter(embeddings_2d[:, 0], embeddings_2d[:, 1])
# Mostra etichette delle frasi
for idx, txt in enumerate(sentences):
plt.annotate(txt, (embeddings_2d[idx, 0], embeddings_2d[idx, 1]), fontsize=9)
plt.title("Visualizzazione 2D di Embeddings di Frasi Campione")
plt.xlabel("Dimensione 1")
plt.ylabel("Dimensione 2")
plt.grid(True)
plt.show()
Risultati: come interpretare il grafico
- Frasi semanticamente simili appariranno vicine nel piano: ad esempio, “Oggi c’è il sole” e “La giornata è bellissima” compariranno accanto, come prevedibile.
- Frasi meno correlate (“La pizza è il mio piatto preferito” vs “I gatti sono agili”) saranno distanti.
Conclusioni
L’embedding è uno strumento potente per rappresentare e confrontare il significato dei testi. Visualizzare questi vettori aiuta a comprendere, con immediatezza, la struttura semantica dei dati trattati in progetti di NLP, analisi testuale e applicazioni di intelligenza artificiale.