La recherche en IA te passionne ?
Les papers et avancées qui comptent, expliqués simplement, chaque soir. Gratuit.
Inclus dès l'inscription : notre sélection des meilleurs guides & comparatifs IA.
Choisis ton rythme
Gratuit · Pas de spam · Désabonnement en 1 clic
Un tutoriel détaille la construction d'une base vectorielle en Python avec NumPy et sentence-transformers, sans matériel spécialisé ni clé API. Les exemples chiffrés montrent des tailles d’index prévisibles, des temps d’encodage modestes et un tri purement sémantique. La pertinence s’évalue au score, avec l’idée d’un seuil à définir en production.
Des résultats classés en continu et filtrés par un seuil
La recherche vectorielle retourne systématiquement k éléments, même si aucun n'est pertinent. Par exemple, pour la requête « la meilleure façon de changer un pneu », les trois meilleurs documents affichent des scores de +0.111, +0.096 et +0.068, sans lien avec la question. Le score sert alors de repère unique pour juger la pertinence. La comparaison entre un score de +0.111 et un autre de +0.630 sur une requête différente illustre l'écart possible. En production, il est suggéré de fixer un seuil et de ne rien retourner en dessous.
Représentations compactes : 384 float32 par document
Dans l’exemple, l’index contient 25 vecteurs de dimension 384, stockés en float32, pour une taille de 37.5 KiB. Chaque document est représenté par 384 nombres de 4 octets, soit 1 536 octets, quelle que soit sa longueur initiale. Cette taille fixe rend l’index prévisible et, selon le tutoriel, économique à parcourir. Côté performance, l’encodage de 25 documents a pris 0.14 seconde, soit 6 millisecondes par élément en moyenne, avec un chargement de modèle mesuré à 1.64 seconde.
Recherche sémantique : au-delà du recouvrement lexical
Le système transforme les textes et la requête en vecteurs et recherche les directions les plus proches, privilégiant le sens plutôt que les mots partagés. À la question sur l’énergie d’une cellule, le meilleur résultat mentionne les mitochondries et partage un seul mot avec la requête, tandis que le deuxième n’en partage aucun. Le tutoriel indique qu’un index par mots-clés aurait classé différemment ces réponses, voire ne les aurait pas trouvées. Des essais sans recouvrement lexical explicite, comme « pourquoi mon pain a un goût aigre » ou « super-héros », renvoient néanmoins des documents pertinents sur le levain ou des personnages de comics, avec des scores compris entre +0.353 et +0.630, alors que les termes « pain », « aigre » et « super-héros » seraient absents du corpus.
Mise en place locale sans GPU ni API
La démonstration s’exécute localement sans GPU ni clé API. Un petit modèle est téléchargé lors de la première exécution, et le traitement s’appuie sur NumPy. Deux paquets sont à installer, numpy et sentence-transformers. Trois fichiers sont utilisés : vector_db.py pour l’implémentation, corpus.py avec 25 documents annotés, et test.py pour la validation, que l’on peut lancer à tout moment. Le script tutorial.py débute par quelques imports et deux aides d’affichage, show() pour rendre score, sujet et extrait, et header() pour étiqueter les sections ; à ce stade, l’exécution ne produit aucune sortie tant que rien n’est appelé.
API minimale : indexer, chercher, filtrer par métadonnées
Instancier la base charge le modèle d’encodage, puis add() convertit et stocke les documents. L’exemple mentionne un état avec 25 éléments en dimension 384 et un modèle sentence-transformers/all-MiniLM-L6-v2. Chaque document est ajouté avec une métadonnée de type dictionnaire comprenant une clé topic. Lors de la recherche, un paramètre where permet de conserver uniquement les éléments dont les métadonnées correspondent aux clés fournies.





