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
.