in Architettura Software, Informatica, Intelligenza Artificiale

Cosa sono gli Embeddings e perché visualizzarli

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.