Exploration de la recherche vectorielle dans Databases for PostgreSQL à l'aide de pgvector

pgVector est une extension pour votre IBM Cloud® Databases for PostgreSQL qui ajoute la prise en charge de la recherche de similarités vectorielles. Il permet de stocker et d'interroger des vecteurs (tableaux de nombres) et de calculer leur similarité. Ceci est particulièrement utile dans les applications d'apprentissage automatique où l'on peut vouloir trouver des vecteurs (par exemple, des caractéristiques d'images ou des intégrations de mots) qui sont similaires à un vecteur donné.

pgVector est supporté par PostgreSQL version 15 et plus.

Définition et gestion des colonnes de vecteurs

Pour utiliser pgVector afin de stocker et d'effectuer des recherches de similarité sur des données vectorielles dans Databases for PostgreSQL, procédez comme suit :

  1. Utilisez la requête ci-dessous pour activer l'extension :

    CREATE EXTENSION pg_vector;
    
  2. Vous pouvez créer une table avec une colonne de vecteurs en spécifiant la dimension des vecteurs à stocker, comme dans la requête suivante :

    eg:
    exampledb=# CREATE TABLE sample_image (id SERIAL PRIMARY KEY, embedded_vector vector(5));
    CREATE TABLE
    
  3. Insérer des entrées de données et les récupérer à l'aide d'une instruction SELECT.

    eg:
    exampledb=# INSERT INTO sample_image (embedded_vector) values ('[1,2,3,4,5]');
    INSERT 0 1
    exampledb=# INSERT INTO sample_image (embedded_vector) values (array[0.1, 0.2, 0.3, 0.4, 0.5]);
    INSERT 0 1
    
    
    exampledb=# select  * from sample_image;
    id |    embedded_vector
    ----+-----------------------
    1 | [1,2,3,4,5]
    2 | [0.1,0.2,0.3,0.4,0.5]
    (2 rows)
    
    
  4. Pour améliorer les performances de la recherche, créez un index sur la colonne vectorielle.

    Hierarchical Navigable Small World (HNSW) et Inverse Vertex File Flat (IVFFlat) sont des méthodes d'indexation utilisées dans le contexte de la recherche de similarité vectorielle, couramment employées dans des applications impliquant l'apprentissage automatique, l'exploration de données ou la recherche d'informations.

    exampledb=# CREATE INDEX sample_image_embedded_vector_idx on sample_image using hnsw(embedded_vector vector_l2_ops);
    CREATE INDEX
    
  5. Il existe plusieurs opérateurs disponibles dans pgvector qui peuvent vous aider à effectuer des recherches sur les voisins les plus proches de manière efficace. Pour plus d'informations sur les opérateurs pris en charge et des exemples d'utilisation, voir la documentation pgvector {: external}.

    exampledb=# select * from sample_image ORDER BY embedded_vector <=>'[0.1,0.2,0.3,0.4,0.5]'::vector ;
    id |    embedded_vector
    ----+-----------------------
    2 | [0.1,0.2,0.3,0.4,0.5]
    1 | [1,2,3,4,5]
    (2 rows)