Partager via


Comment activer et utiliser pgvector sur Azure Database pour PostgreSQL - Serveur flexible

S’APPLIQUE À : Azure Database pour PostgreSQL – Serveur flexible

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

Avant de pouvoir activer pgvector sur votre instance Azure Database pour PostgreSQL - Serveur flexible, vous devez l’ajouter à votre liste d’autorisation comme décrit dans comment utiliser les extensions PostgreSQL et vérifier qu’il est correctement ajouté en exécutant SHOW azure.extensions;.

Important

Notez que même si toutes les communautés PostgreSQL ont tendance à faire référence à cette extension en tant que pgvector, le nom du binaire et l’extension elle-même est simplement vector. Prenez cela en compte, car il s’agit du nom que vous devez utiliser pour la liste d’autorisation ou pour sa création sur n’importe quelle base de données via la commande CREATE EXTENSION.

Vous pouvez ensuite installer l’extension en vous connectant à votre base de données cible et en exécutant la commande CREATE EXTENSION. Vous devez répéter la commande séparément pour chaque base de données dans laquelle vous souhaitez que l’extension soit disponible.

CREATE EXTENSION vector;

Remarque

Pour supprimer l’extension de la base de données actuellement connectée, utilisez DROP EXTENSION vector;.

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.