Brief IA : Index vectoriel local : tailles fixes et scores seuils en Python

Index vectoriel local : tailles fixes et scores seuils en Python

Brief IA
Tom Levy·3 min·0 vues

Un guide pratique montre comment construire une base vectorielle locale en Python avec sentence-transformers et NumPy. Les exemples indiquent un encodage en 384 float32 par document, une taille d’index de 37.5 KiB pour 25 éléments, et des temps courts d’encodage après le chargement du modèle. La recherche renvoie toujours k résultats, la pertinence se juge aux scores et un seuil est recommandé.

En bref
1Un guide pratique montre comment construire une base vectorielle locale en Python avec sentence-transformers et NumPy.
2Les exemples indiquent un encodage en 384 float32 par document, une taille d’index de 37.5 KiB pour 25 éléments, et des temps courts d’encodage après le chargement du modèle.
3La recherche renvoie toujours k résultats, la pertinence se juge aux scores et un seuil est recommandé.
4Le système accepte un filtrage par métadonnées et fonctionne sans GPU ni clé API.
💡Pourquoi c'est importantLa méthode permet de déployer une recherche sémantique efficace localement, sans dépendre d’infrastructures externes ou de ressources matérielles avancées.
Le brief IA que lisent les pros

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

📄
L'analyse en français

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.

Suivez Brief IA

L'actu IA du jour, aussi dans votre fil.

Commentaires