Freedam

Embeddings vectoriels

Aussi appelé embeddings ou vector embeddings

Un embedding vectoriel (vector embedding) est une liste de nombres, produite par un modèle d’apprentissage automatique, qui représente un contenu de sorte que les éléments de sens ou d’apparence proches reçoivent des nombres proches. Une phrase, une photo ou un visage devient un point dans un espace de plusieurs centaines de dimensions, et la distance entre deux points mesure leur ressemblance. Les embeddings sont la base de la recherche sémantique et de la recherche visuelle ; cette entrée traite des embeddings eux-mêmes et de leur stockage.

Mis à jour le

Comment un embedding est produit

  • Un modèle. Un modèle de texte transforme des mots en vecteurs, un modèle d’image transforme des pixels en vecteurs, et un modèle conjoint texte et image est entraîné pour qu’une photo et la légende qui la décrit se retrouvent proches.
  • Un nombre fixe de dimensions. Chaque modèle produit toujours la même longueur, couramment 384, 512, 768 ou 1 024 nombres. Aucun nombre pris seul n’a de sens lisible ; l’information est dans la liste entière.
  • Normalisation. Les vecteurs sont souvent mis à l’échelle à une longueur de 1, pour que leur comparaison soit une simple multiplication.
  • Un modèle par comparaison. Une requête et les éléments auxquels elle est comparée doivent être encodés par le même modèle. Les vecteurs de deux modèles ne peuvent pas être comparés : changer de modèle oblige donc à recalculer les embeddings de toute la bibliothèque.

Mesurer la similarité

Mesure Ce qu’elle compare Usage typique
Similarité cosinus L’angle entre deux vecteurs, sans tenir compte de leur longueur Embeddings de texte et d’image
Distance euclidienne (L2) La distance en ligne droite entre deux points Petites empreintes, certains modèles d’image
Produit scalaire L’angle et la longueur ensemble ; égal au cosinus pour des vecteurs normalisés Classement rapide de vecteurs normalisés

Bases de données vectorielles et index

Une base de données vectorielle stocke des embeddings et répond rapidement à une question : quels vecteurs stockés sont les plus proches de celui-ci ? Comparer une requête à chaque vecteur est exact mais lent dès qu’une bibliothèque contient des millions d’éléments. Les index de recherche approchée des plus proches voisins (ANN) sacrifient un peu de rappel pour un gain de vitesse important. Le plus répandu est HNSW (Hierarchical Navigable Small World), un index en graphe décrit par Malkov et Yashunin en 2016.

Il y a deux façons d’en faire fonctionner un :

  • une base de données vectorielle dédiée, synchronisée avec la base principale ;
  • une extension vectorielle à l’intérieur d’une base générale, comme l’extension open source pgvector pour PostgreSQL. Les filtres, les permissions et les jointures s’exécutent alors dans la même requête que la recherche de similarité, et il n’y a pas de second système à synchroniser.

À quoi servent les embeddings dans un DAM

Contenu encodé Utilisé pour
Le texte du média : titre, description, tags, légendes, texte OCR Trouver des médias par le sens d’une requête
La requête de recherche La comparaison avec les embeddings de texte stockés
L’image elle-même Trouver des images ressemblantes, des recadrages et des doublons
Chaque visage détecté Reconnaître la même personne d’une photo à l’autre

Limites et erreurs courantes :

  • Les embeddings ne connaissent pas les identifiants. Un SKU, un code de campagne ou un nom de fichier n’a pas de sens pour un modèle de langage. La recherche par mots-clés les gère toujours, c’est pourquoi la plupart des systèmes combinent les deux dans une recherche hybride.
  • Un index renvoie toujours des voisins, même quand aucun n’est pertinent. Un seuil de similarité décide de ce qui compte comme une correspondance.
  • Des vecteurs périmés. Si la description d’un média change et que son embedding n’est pas recalculé, la recherche continue de correspondre à l’ancienne description.
  • Les embeddings de visages sont des données personnelles. Selon le RGPD, les données biométriques traitées pour identifier une personne sont une catégorie particulière (article 9), qui demande une base légale et une politique de conservation claire.

Les embeddings vectoriels dans Freedam

  • Les embeddings sont stockés dans PostgreSQL avec l’extension pgvector et recherchés par des index HNSW, dans la même base de données que les médias. Il n’y a pas de service de recherche séparé.
  • Chaque média reçoit un embedding de texte multilingue de 768 dimensions, construit à partir de son texte descriptif (les champs sont listés dans l’entrée recherche sémantique). Il est recalculé quand ce texte change, et ignoré quand le texte est le même que la fois précédente.
  • Les images reçoivent aussi un embedding visuel calculé à partir de leur aperçu, utilisé par la recherche visuelle et la détection de quasi-doublons. Les visages détectés ont leurs propres embeddings, et un seuil de reconnaissance (0,6 par défaut) décide quand deux visages comptent comme la même personne.
  • Chaque recherche exécute ensemble le classement par mots-clés (BM25) et la similarité vectorielle, et fusionne les résultats. Sur la page Configuration de la recherche, les administrateurs règlent le poids de chacun, le nombre de candidats vectoriels par recherche (200 par défaut) et des seuils de similarité qui dépendent de la longueur de la requête.
  • Sur la page IA, les administrateurs choisissent quel modèle produit les embeddings des médias et les embeddings des expressions recherchées.

Détails : Recherche par le sens et Configuration de la recherche dans la documentation Freedam (en anglais), et l’article d’ingénierie Ce qu’il faut vraiment pour construire une bonne recherche d’images.

Questions fréquentes

Quelle différence entre un embedding vectoriel et une base de données vectorielle ?

Un embedding est la liste de nombres qui représente un élément. Une base de données vectorielle stocke de nombreux embeddings et trouve ceux qui sont les plus proches d’une requête. La base peut être un produit dédié ou une extension d’une base existante.

Combien de dimensions doit avoir un embedding ?

C’est le modèle qui décide, pas l’utilisateur. Plus de dimensions peuvent contenir des distinctions plus fines mais demandent plus de stockage et des comparaisons plus lentes. Pour la recherche dans une photothèque, les modèles de 512 à 1 024 dimensions sont courants, et la qualité du modèle compte plus que sa taille.

Peut-on chercher des images avec des mots grâce aux embeddings ?

Oui, de deux façons. Un modèle conjoint texte et image place une requête et une image dans le même espace, si bien que la requête peut être comparée directement à l’image. Sinon, le système décrit d’abord chaque image avec des mots (tags, légendes, texte OCR) et compare la requête à ce texte.

Termes associés

Nordi

Cherchez dans la bibliothèque de Nordi par le sens et par l’image

Saisissez une description dans la bibliothèque de Nordi et trouvez des photos taguées avec d’autres mots, puis déposez une photo dans la recherche visuelle pour trouver des images qui lui ressemblent.

Vous entrez dans l'espace de travail de Nordi en tant qu'administrateur.