Semantic Search
La recherche sémantique classe les documents et les images selon le sens d’une requête plutôt que ses termes exacts, à l’aide de plongements, de recherches par plus proche voisin et de réordonnanceurs.
La recherche sémantique classe les documents, images ou autres éléments selon la proximité de leur sens avec celui d’une requête, plutôt qu’en fonction des mots qu’ils ont en commun. La recherche « mon chat a faim » peut renvoyer une page intitulée « Programme d’alimentation pour un jeune chat », même si les deux formulations n’ont aucun mot en commun. Les systèmes modernes s’appuient sur des représentations vectorielles : un encodeur neuronal transforme les requêtes et les éléments en vecteurs proches lorsque leur sens est similaire, et la recherche vectorielle trouve les éléments les plus proches. La recherche Web a évolué dans cette direction en 2019, lorsque Google a commencé à utiliser BERT pour comprendre les requêtes de recherche, un changement qui, selon l’entreprise, a affecté une recherche en anglais sur dix aux États-Unis.
Fonctionnement de la recherche sémantique#
La plupart des systèmes de recherche sémantique récupèrent les résultats avec un bi-encodeur, puis les affinent avec un réordonnanceur. Le bi-encodeur transforme chaque document en vecteur une seule fois, à l’avance, puis les vecteurs sont stockés dans une base de données vectorielle. Au moment de la requête, seule celle-ci est vectorisée, et un index de recherche approchée des plus proches voisins renvoie les meilleurs candidats selon la similarité cosinus. Sentence-BERT (2019) a rendu cette approche pratique pour les phrases : trouver la paire la plus similaire parmi 10 000 phrases prenait environ 65 heures avec un encodeur croisé BERT, contre environ 5 secondes avec ses représentations vectorielles de phrases. Dense Passage Retrieval (2020) a ensuite montré que les représentations vectorielles apprises surpassaient le classement par mots-clés BM25 de 9 à 19 points en précision de récupération des 20 premiers passages pour des tâches de réponse aux questions en domaine ouvert. Enfin, un réordonnanceur à encodeur croisé lit ensemble la requête et chaque candidat afin de réorganiser plus précisément la liste restreinte.
Cet exemple compare le chevauchement de mots et la similarité des représentations vectorielles avec la bibliothèque 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 correspondance par mots-clés renvoie une liste vide, car aucun document ne contient « mon », « chat », « a » ou « faim ». La recherche sémantique renvoie le programme d’alimentation pour jeune chat avec une similarité cosinus de 0,56 : c’est le document dont le sens est le plus proche.
Recherche sémantique et notions connexes#
- Recherche par mots-clés : Classe les documents selon la correspondance exacte des termes, à l’aide de formules comme BM25. Elle traite bien les noms, les numéros de pièce et les mots rares que les représentations vectorielles peuvent estomper, mais ne repère pas les synonymes ni les paraphrases.
- Recherche hybride : Exécute conjointement la récupération par mots-clés et la récupération sémantique, puis fusionne les résultats. C’est une configuration courante dans les systèmes de recherche en production et les systèmes RAG.
- Segmentation sémantique : Tâche de vision par ordinateur sans rapport, qui attribue une classe à chaque pixel d’une image et ne partage avec la recherche sémantique que le mot « sémantique ».
- Mise en cache sémantique : Applique la même correspondance fondée sur le sens aux requêtes LLM et réutilise une réponse stockée lorsqu’une nouvelle invite signifie la même chose qu’une invite précédente.
Applications concrètes#
- Génération augmentée par récupération (RAG) : Trouve les passages dont un modèle de langage a besoin, même lorsque la formulation de l’utilisateur diffère de celle de la documentation.
- Recherche de brevets : Fait ressortir des antériorités décrivant la même invention avec une terminologie différente.
- Recherche de produits dans le commerce de détail : Associe une requête comme « chaussures pour les trajets sous la pluie » à des baskets imperméables dont les annonces n’emploient jamais ces mots.
- Systèmes de recommandation : Suggèrent des articles ou des produits dont les représentations vectorielles sont proches de celles des éléments déjà choisis par l’utilisateur.
Rechercher des images par leur sens#
Les modèles entraînés avec l’apprentissage contrastif sur des paires image-légende, comme CLIP, placent le texte et les images dans un même espace vectoriel. Une requête textuelle peut donc classer des photos sans étiquette ni légende. La solution de recherche sémantique d’images d’Ultralytics repose sur ce principe : sa classe VisualAISearch vectorise une fois chaque image d’un dossier avec CLIP, vectorise chaque requête textuelle dans le même espace et renvoie jusqu’à 30 images dont la similarité cosinus avec la requête dépasse un seuil, classées de la plus à la moins similaire. Une requête comme « un chien assis sur un banc » trouve alors les photos correspondantes dans une collection non étiquetée.










