Comment activer et utiliser pgvector pour Azure Cosmos DB for PostgreSQL

S’APPLIQUE À : Azure Cosmos DB for PostgreSQL (avec l’extension de base de données Citus pour PostgreSQL)

L’extension pgvector ajoute une recherche de similarité vectorielle open source à PostgreSQL.

Cet article nous présente les fonctionnalités supplémentaires activées par pgvector. Concerne les concepts de similarité et d’incorporation des vecteurs, et fournit des conseils sur la façon d’activer l’extension pgvector. Nous apprenons à créer, stocker et interroger les vecteurs. Vous pouvez également vous référer au fichier README officiel du projet.

Activer l’extension

Les extensions PostgreSQL doivent être activées dans votre base de données pour être utilisables. Pour activer l’extension, exécutez la commande dans l'outil psql afin de charger les objets empaquetés dans votre base de données.

SELECT CREATE_EXTENSION('vector');

Notes

Pour désactiver une extension, utilisez drop_extension()

Concepts

Similarité des vecteurs

La similarité vectorielle est une méthode utilisée pour mesurer la similarité de deux éléments en les représentant sous forme de vecteurs, qui sont des séries de nombres. Les vecteurs sont souvent utilisés pour représenter des points de données, où chaque élément du vecteur représente une caractéristique ou un attribut du point de données.

La similarité vectorielle est généralement calculée à l’aide de métriques de distance, telles que la similarité Euclidean distance ou cosine. La distance euclidienne mesure la distance en ligne droite entre deux vecteurs dans un espace à n dimensions, tandis que la similarité en cosinus mesure le cosinus de l'angle entre deux vecteurs. Les valeurs des métriques de similarité sont généralement comprises entre 0 et 1, avec des valeurs higher indiquant une plus grande similarité entre les vecteurs.

La similarité vectorielle est largement utilisée dans diverses applications, telles que les systèmes de recommandation, la classification de texte, la reconnaissance d’images et les clustering. Par exemple, dans les systèmes de recommandation, la similarité vectorielle peut être utilisée pour identifier des éléments similaires en fonction des préférences de l’utilisateur. Dans la classification de texte, la similarité vectorielle peut être utilisée pour déterminer la similarité entre deux documents ou phrases en fonction de leurs représentations vectorielles.

Incorporations

L’incorporation est une technique d’évaluation de la « relation » de texte, d’images, de vidéos ou d’autres types d’informations. L'évaluation permet aux modèles de machine learning d'identifier efficacement les relations et les similitudes entre les données, ce qui facilite l'identification des modèles par les algorithmes et améliore la précision des prédictions. Par exemple, dans une tâche d’analyse des sentiments, les mots avec des incorporations similaires peuvent avoir des scores de sentiment similaires.

Bien démarrer

Créez une table tblvector avec une colonne embedding de type vector(3) représentant un vecteur tridimensionnel.

CREATE TABLE tblvector(
    id bigserial PRIMARY KEY,
    embedding vector(3)
    );

Une fois que vous avez généré une incorporation à l’aide d’un service comme l’API OpenAI, vous pouvez stocker le vecteur résultant dans votre base de données. Définition d’un vecteur comme vector(3) désigne [x,y,z] coordinates dans un plan à trois dimensions. La commande insère cinq nouvelles lignes dans la table tblvector avec les incorporations fournies.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');

À l’aide de l’instruction INSERT INTO ... ON CONFLICT, vous pouvez spécifier une autre action, telle que la mise à jour des enregistrements qui correspondent aux critères. Il vous permet de gérer les conflits potentiels de manière plus efficace et plus efficace.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

La commande DELETE supprime les lignes d’une table spécifiée en fonction des conditions spécifiées dans la clause WHERE. Lorsque la clause WHERE n’est pas présente, toutes les lignes de la table sont supprimées.

DELETE FROM tblvector WHERE id = 1;

Pour récupérer des vecteurs et calculer la similarité, utilisez des instructions SELECT et les opérateurs vectoriels intégrés. Par exemple, la requête calcule la distance euclidienne (distance L2) entre le vecteur donné et les vecteurs stockés dans la table tblvector, trie les résultats en fonction de la distance calculée et renvoie les cinq éléments les plus proches.

SELECT * FROM tblvector 
ORDER BY embedding <-> '[3,1,2]' 
LIMIT 5;

La requête utilise l’opérateur «<-> », qui est l’opérateur de distance utilisé pour calculer la distance entre deux vecteurs dans un espace multidimensionnel. La requête retourne toutes les lignes dont la distance est inférieure à 6 par rapport au vecteur [3,1,2].

SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;

La commande récupère la valeur moyenne de la colonne « incorporation » à partir de la table « tblvector ». Par exemple, si la colonne « incorporation » contient des incorporations de mots pour un modèle de langage, la valeur moyenne de ces incorporations peut être utilisée pour représenter la phrase ou le document entier.

SELECT AVG(embedding) FROM tblvector;

Opérateurs vectoriels

pgvector introduit six nouveaux opérateurs qui peuvent être utilisés sur des vecteurs :

Opérateur Description
+ addition par élément
- soustraction par élément
* multiplication par élément
<-> Distance euclidienne
<#> produit interne négatif
<=> distance cosinus

Fonctions vectorielles

cosine_distance

Calcule la distance cosinus entre deux vecteurs.

cosine_distance(vector, vector)

Arguments

vector

Premier vector.

vector

Second vector.

Type de retour

double precision comme distance entre les deux vecteurs fournis.

inner_product

Calcule le produit interne de deux vecteurs.

inner_product(vector, vector)

Arguments

vector

Premier vector.

vector

Second vector

Type de retour

double precision comme produit interne des deux vecteurs.

l2_distance

Calcule la distance euclidienne (également appelée L2) entre deux vecteurs.

l2_distance(vector, vector)

Arguments

vector

Premier vector.

vector

Second vector

Type de retour

double precision comme distance euclidienne entre les deux vecteurs.

l1_distance

Calcule la taxi-distance (également appelée L1) entre deux vecteurs.

l1_distance(vector, vector)

Arguments

vector

Premier vector.

vector

Second vector

Type de retour

double precision comme taxi-distance entre les deux vecteurs.

vector_dims(vector)

Retourne les dimensions d’un vecteur donné.

Arguments

vector

Un vector.

Type de retour

integer représentant le nombre de dimensions du vecteur donné.

vector_norms(vector)

Calcule la norme euclidienne d’un vecteur donné.

Arguments

vector

Un vector.

Type de retour

double precision représentant la norme euclidienne du vecteur donné.

Agrégations vectorielles

AVG

Calcule la moyenne des vecteurs traités.

Arguments

vector

Un vector.

Type de retour

vector représentant la moyenne des vecteurs traités.

SUM

Arguments

vector

Un vector.

Type de retour

vector représentant la somme des vecteurs traités.

Étapes suivantes

En savoir plus sur les performances, l’indexation et les limitations à l’aide de pgvector.