Semantic Search
La ricerca semantica ordina documenti e immagini in base al significato di una query anziché alle parole esatte, usando embedding, ricerca del vicino più prossimo e reranker.
La ricerca semantica classifica documenti, immagini o altri elementi in base alla somiglianza tra il loro significato e quello di una query, anziché in base alle parole che hanno in comune. Una ricerca di «il mio gatto ha fame» può restituire una pagina intitolata «Orari dei pasti per un gattino appena arrivato», anche se le due frasi non condividono alcuna parola. I sistemi moderni lo fanno con gli embedding: un encoder neurale mappa query ed elementi in vettori vicini quando i loro significati sono simili, mentre la ricerca vettoriale individua gli elementi più vicini. La ricerca web si è orientata in questa direzione nel 2019, quando Google ha iniziato ad applicare BERT per comprendere le query di ricerca, un cambiamento che, secondo l'azienda, ha interessato una ricerca su dieci in lingua inglese negli Stati Uniti.
Come funziona la ricerca semantica#
La maggior parte dei sistemi di ricerca semantica recupera i risultati con un bi-encoder e li perfeziona con un reranker. Il bi-encoder crea in anticipo un embedding per ogni documento e archivia i vettori in un database vettoriale. Al momento della query, viene convertita in embedding solo la query e un indice approssimato dei vicini più prossimi restituisce i candidati principali in base alla similarità coseno. Sentence-BERT (2019) ha reso questo approccio pratico per le frasi: trovare la coppia più simile tra 10.000 frasi richiedeva circa 65 ore con un cross-encoder BERT e circa 5 secondi usando gli embedding delle frasi. Dense Passage Retrieval (2020) ha poi dimostrato che gli embedding appresi superavano il ranking BM25 basato su parole chiave di 9-19 punti in accuratezza nel recupero dei 20 brani principali per attività di question answering open-domain. Infine, un reranker cross-encoder legge insieme la query e ciascun candidato per riordinare con maggiore precisione l'elenco ristretto.
Questo esempio confronta la sovrapposizione delle parole con la similarità degli embedding usando la libreria Sentence Transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
documents = [
"How to reset a forgotten account password",
"Feeding schedule for a new kitten",
"Quarterly sales report for the retail division",
"Best hiking trails near Denver",
]
query = "my cat is hungry"
# Keyword search: documents sharing at least one word with the query
query_words = set(query.lower().split())
print("Keyword matches:", [d for d in documents if query_words & set(d.lower().split())])
# Semantic search: rank documents by cosine similarity of their embeddings
doc_embeddings = model.encode(documents)
query_embedding = model.encode(query)
scores = model.similarity(query_embedding, doc_embeddings)[0]
best = int(scores.argmax())
print(f"Semantic match: {documents[best]!r} (cosine {scores[best]:.2f})")La corrispondenza delle parole chiave restituisce un elenco vuoto, perché nessun documento contiene «mio», «gatto», «ha» o «fame». La ricerca semantica restituisce gli orari dei pasti per il gattino con una similarità coseno di 0,56, il documento semanticamente più vicino.
Ricerca semantica e termini correlati#
- Ricerca per parole chiave: classifica i documenti in base alle corrispondenze esatte dei termini usando formule come BM25. Gestisce nomi, numeri di parte e parole rare che gli embedding possono appiattire, ma non coglie sinonimi e parafrasi.
- Ricerca ibrida: esegue insieme il recupero per parole chiave e quello semantico, combinandone i risultati; è una configurazione comune nei sistemi di ricerca in produzione e nei sistemi RAG.
- Segmentazione semantica: attività di visione artificiale non correlata che assegna una classe a ogni pixel di un'immagine e condivide con la ricerca semantica solo la parola «semantica».
- Caching semantico: applica la stessa corrispondenza basata sul significato alle richieste LLM, riutilizzando una risposta memorizzata quando un nuovo prompt ha lo stesso significato di uno precedente.
Applicazioni nel mondo reale#
- Generazione aumentata dal recupero (RAG): trova i brani necessari a un modello linguistico anche quando le parole usate dall'utente differiscono da quelle della documentazione.
- Ricerca di brevetti: individua anteriorità che descrivono la stessa invenzione usando una terminologia diversa.
- Ricerca di prodotti al dettaglio: associa una query come «scarpe per andare al lavoro sotto la pioggia» a scarpe da ginnastica impermeabili le cui descrizioni non usano mai quelle parole.
- Sistemi di raccomandazione: suggeriscono articoli o prodotti con embedding vicini a quelli già scelti dall'utente.
Cercare immagini in base al significato#
I modelli addestrati con apprendimento contrastivo su coppie immagine-didascalia, come CLIP, mappano testi e immagini nello stesso spazio, così una query testuale può classificare foto prive di tag o didascalie. La soluzione di ricerca semantica di immagini Ultralytics funziona in questo modo: la sua classe VisualAISearch calcola una volta gli embedding CLIP di ogni immagine in una cartella, converte ogni query testuale nello stesso spazio e restituisce fino a 30 immagini la cui similarità coseno rispetto alla query supera una soglia, ordinate dalla più alla meno simile. Una query come «un cane seduto su una panchina» individua così le foto corrispondenti in una raccolta senza etichette.










