Effectuer une recherche de similarité vectorielle

Ce document explique comment effectuer des recherches de similarité vectorielle dans AlloyDB pour PostgreSQL à l'aide de l'extension pgvector. La recherche de similarités vectorielles, également appelée recherche des plus proches voisins, vous permet de trouver les points de données de vos données qui sont les plus similaires à un vecteur de requête donné.

Vous pouvez interroger votre base de données AlloyDB pour trouver des vecteurs sémantiquement similaires après avoir stocké et indexé des embeddings. Utilisez les fonctionnalités de requête pgvector pour trouver les voisins les plus proches d'un vecteur d'embedding.

Pour en savoir plus sur le stockage des embeddings vectoriels et la création d'un index, consultez respectivement Stocker des embeddings vectoriels et Créer des index.

Pour exécuter une recherche par similarité, spécifiez la table, la colonne d'embedding, la fonction de distance, l'embedding cible et le nombre de lignes à renvoyer. Vous pouvez également utiliser la fonction embedding() pour traduire du texte en vecteur, puis comparer le vecteur aux embeddings stockés à l'aide des opérateurs pgvector.

Pour trouver les voisins sémantiques les plus proches d'un vecteur d'embedding, vous pouvez exécuter l'exemple de requête suivant, dans lequel vous définissez la même fonction de distance que celle utilisée lors de la création de l'index.

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

Remplacez les éléments suivants :

  • TABLE : table contenant l'embedding auquel comparer le texte.

  • EMBEDDING_COLUMN : colonne contenant les embeddings stockées.

  • DISTANCE_FUNCTION_QUERY : fonction de distance à utiliser avec cette requête. Choisissez l'une des options suivantes en fonction de la fonction de distance utilisée lors de la création de l'index :

    • Distance L2 : <->

    • Produit interne : <#>

    • Distance de cosinus : <=>

  • EMBEDDING : vecteur d'embedding pour lequel vous souhaitez trouver les plus proches voisins sémantiques qui sont stockés.

  • ROW_COUNT : nombre de lignes à afficher.

    Spécifiez 1 si vous souhaitez n'obtenir que la meilleure correspondance.

Pour en savoir plus sur d'autres exemples de requêtes, consultez Interroger.

Vous pouvez également utiliser la fonction embedding() pour traduire le texte en vecteur et trouver les lignes de la base de données présentant les embeddings les plus similaires sur le plan de la sémantique. L'extension PostgreSQL pgvector standard est personnalisée pour AlloyDB et est appelée vector. Vous appliquez le vecteur à l'un des opérateurs pgvector correspondant aux plus proches voisins, par exemple <=> pour la distance cosinus.

Comme embedding() renvoie un tableau real, vous devez convertir explicitement l'appel embedding() en type de données vector pour utiliser ces valeurs avec les opérateurs pgvector.

  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Remplacez les éléments suivants :

  • MODEL_ID : ID du modèle à interroger.

    Si vous utilisez Vertex AI Model Garden, spécifiez text-embedding-005 comme ID de modèle. Il s'agit des modèles cloud qu'AlloyDB peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.

  • VERSION_TAG (facultatif) : tag de version du modèle à interroger. Ajoutez le préfixe @ au tag.

    Si vous utilisez l'un des modèles text-embedding-005 en anglais avec Vertex AI, spécifiez l'un des tags de version (par exemple, text-embedding-005) listés dans la section Versions de modèle.

    Google vous recommande vivement de toujours spécifier le tag de version. Si vous ne spécifiez pas le tag de version, AlloyDB utilise la dernière version du modèle, ce qui peut entraîner des résultats inattendus.

  • TEXT : texte à traduire en embedding vectoriel.

Pour accélérer votre recherche KNN filtrée, vous pouvez utiliser le moteur en colonnes AlloyDB. Pour en savoir plus, consultez Accélérer votre recherche vectorielle filtrée (aperçu) et Configurer le moteur colonnaire.

Étapes suivantes