Chercher par ressemblance
En 2020, comparer des documents par leurs vecteurs demandait d’assembler soi-même la chaîne. L’état de l’art de l’époque, et ce que les bases vectorielles ont réellement changé depuis.
Une recherche par mots-clés retrouve ce qu’on sait nommer. Une recherche par ressemblance retrouve ce qu’on sait seulement reconnaître, et l’opération est différente : on remplace le mot par un vecteur, et la question « lequel contient ce terme » par « lequel est le plus proche ». Tout ce qui a suivi tient dans cette substitution, y compris ce qu’on appelle aujourd’hui base vectorielle.
La chaîne se montait en trois pièces, et il fallait les trois. D’abord les vecteurs : on prenait un réseau entraîné pour la classification, on retirait sa dernière couche et l’on gardait ce qui restait, quelques centaines de nombres par document. Ensuite un index approché (Annoy, publié par Spotify, ou FAISS, publié par Facebook) parce qu’un million de vecteurs comparés un à un est hors de portée d’une requête interactive. Enfin le stockage, et c’était la pièce bricolée : le plus souvent une base classique posée à côté de l’index, avec la charge de les tenir cohérents.
Le mot approché n’est pas une réserve de prudence, c’est le cœur du sujet. Ces index acceptent de manquer parfois le plus proche voisin en échange d’une réponse cent fois plus rapide. On règle un curseur entre exactitude et vitesse, on mesure ce qu’on perd sur un échantillon dont on connaît la réponse, et on décide. Ce compromis est resté identique ; c’est la seule chose de 2020 que je réécrirais mot pour mot.
Pas la mathématique : les mêmes familles d’index, et souvent les mêmes bibliothèques en dessous. Ce qu’elles ont changé est l’exploitation. L’index et les données vivent dans le même système, une écriture devient visible dans les deux, on filtre par métadonnée en même temps qu’on cherche par distance, et la sauvegarde couvre l’ensemble. C’est un progrès d’ingénierie et non de science : c’est-à-dire exactement la pièce qui manquait.
Ce qui a rendu le sujet central n’est pas la base, c’est le vecteur. Les embeddings de 2020 étaient spécialisés : un modèle pour les images, un autre par langue pour le texte, et rapprocher deux langues demandait un modèle fait pour cela. Depuis, un même espace accueille des textes de plusieurs langues et parfois d’autres médias, et leur qualité est telle que la recherche par ressemblance sert désormais à nourrir un modèle de langage plutôt qu’à répondre elle-même. La pièce qui a le plus progressé est donc celle dont on parlait le moins.
Je ne compare pas les produits du moment : ils bougent trop pour qu’un article daté leur rende service. Et je ne conseille pas une base vectorielle à qui a moins de quelques dizaines de milliers de vecteurs : une comparaison exhaustive tenue en mémoire y répond plus vite qu’un service à administrer, et s’écrit en une après-midi. Le seuil compte davantage que le choix, et c’est la question qu’on pose le moins souvent.