Trasforma il significato del testo in numeri confrontabili: i mattoni fondamentali del RAG.
Nella guida sull'NLP, Bag of Words contava solo le parole. Un embedding fa qualcosa di più profondo: trasforma una frase in un vettore di numeri (visto nella guida sui fondamenti matematici) che ne cattura il significato. Frasi con significato simile avranno vettori "vicini" tra loro nello spazio.
from sentence_transformers import SentenceTransformer modello = SentenceTransformer("all-MiniLM-L6-v2") embedding = modello.encode("Python è un linguaggio di programmazione") print(embedding.shape) # es. (384,) → un vettore di 384 numeri
Un modello di embedding (spesso una rete neurale addestrata su enormi quantità di testo) legge una frase e produce un vettore che "riassume" il suo significato in uno spazio matematico, in modo che concetti simili finiscano vicini.
La misura più comune per confrontare due embedding: un valore vicino a 1 indica testi molto simili nel significato, vicino a 0 indica testi non correlati.
Cercare "a mano" l'embedding più simile tra milioni sarebbe lentissimo. I vector database (come FAISS o Chroma) indicizzano gli embedding per trovare rapidamente i più vicini a una query.
Chroma calcola automaticamente gli embedding dei testi che gli passi, e li rende ricercabili tramite similarità semantica, senza che tu debba gestire i vettori manualmente.
Invece di cercare parole esatte (come farebbe Ctrl+F), interroghi il database con una domanda in linguaggio naturale e ottieni i documenti più semanticamente rilevanti, anche se non condividono le stesse parole.
Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato di questa guida al termine.
Esempio per il punto 1
from sentence_transformers import SentenceTransformer modello = SentenceTransformer("all-MiniLM-L6-v2") frase = "Il corso di Python è molto pratico" embedding = modello.encode(frase) print(embedding.shape)
Esempio per il punto 2
emb_a = modello.encode("Il gatto dorme") emb_b = modello.encode("Il felino riposa") from sklearn.metrics.pairwise import cosine_similarity print(cosine_similarity([emb_a], [emb_b])) # valore alto: significato simile
Esempio per il punto 3
import chromadb client = chromadb.Client() collezione = client.create_collection("note_corso") print(collezione.name)
Esempio per il punto 4
collezione.add(
documents=["Il gatto dorme sul divano", "Python è un linguaggio di programmazione"],
ids=["doc1", "doc2"]
)
risultati = collezione.query(query_texts=["animale che riposa"], n_results=1)
print(risultati)
Tocca ogni termine per vederne la definizione.
Crea una collezione Chroma con 5 frasi su argomenti diversi (sport, cucina, tecnologia, ecc.). Interrogala con una domanda che non condivide parole esatte con nessuna frase, e osserva quale trova come più rilevante.
Genera gli embedding di 4 frasi (2 simili tra loro, 2 diverse). Calcola la similarità coseno tra tutte le coppie e verifica che le frasi simili abbiano un valore più alto.
Questo codice genera un errore: si confronta un embedding generato con un modello (dimensione 384) con uno generato da un modello diverso (dimensione 768). Spiega perché due embedding devono provenire dallo stesso modello per essere confrontati correttamente.
Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.