Utiliser des représentations vectorielles continues personnalisées

Si vous avez déjà créé vos propres représentations vectorielles continues personnalisées pour vos données, vous pouvez les importer dans Vertex AI Search et les utiliser lorsque vous effectuez des requêtes avec Vertex AI Search.

Cette fonctionnalité est disponible pour les magasins de données contenant des données structurées génériques ou des données non structurées avec des métadonnées. Cette fonctionnalité n'est pas disponible pour la recherche dans les contenus multimédias et les services de santé.

Par défaut, Vertex AI Search génère automatiquement des représentations vectorielles continues sans aucune configuration nécessaire. Si vous ne savez pas comment créer des représentations vectorielles continues, Google vous recommande de laisser Vertex AI Search créer et utiliser des représentations vectorielles continues à votre place. Toutefois, si vous avez créé vos propres représentations vectorielles continues pour vos données, vous pouvez préférer les utiliser plutôt que celles générées par la recherche Vertex AI, en particulier si vos représentations vectorielles continues personnalisées contiennent un contexte supplémentaire qui peut enrichir la récupération et le classement de vos recherches. Exemple :

  • Vos représentations vectorielles continues ont été entraînées sur des mots personnalisés, tels que des termes internes dont la similarité sémantique ne serait pas capturée par l'entraînement sur des données publiques (par exemple, des termes propres à une organisation qui n'apparaissent que dans des documents privés).
  • Vous avez créé des représentations vectorielles continues pour les profils utilisateur et vous souhaitez les utiliser pour créer un classement de documents personnalisé et pertinent sur le plan sémantique. Vous pouvez utiliser vos représentations vectorielles continues pour obtenir un classement basé sur la personnalisation, ce qui peut améliorer les représentations vectorielles continues de Google pour le classement basé sur la pertinence.

Pour utiliser vos propres représentations vectorielles continues:

  1. Avant de commencer: vérifiez que vos embeddings répondent à toutes les exigences
  2. Ingérer des données avec des représentations vectorielles continues: ingérez vos documents avec leurs représentations vectorielles continues.
  3. Mettez à jour votre schéma: mettez à jour votre schéma avec les champs de propriété clés et les spécifications de dimension.
  4. Spécifiez votre empreinte: spécifiez votre empreinte de manière globale ou par requête de recherche.

Avant de commencer

Avant de commencer, assurez-vous que vos représentations vectorielles continues répondent aux conditions suivantes:

  • Les représentations vectorielles continues sont compatibles avec les données structurées et non structurées avec des métadonnées.
  • Les embeddings doivent être fournis sous la forme de tableaux unidimensionnels.
  • La dimensionnalité de l'espace d'encapsulation doit être comprise entre 1 et 768 inclus
  • Les embeddings sont compatibles avec le texte et les images. Les vidéos ne sont pas acceptées
  • Vous pouvez taguer jusqu'à deux champs en tant que champs de propriété de clé d'intégration. Vous pouvez utiliser deux champs pour des cas tels que les tests A/B pour vos représentations vectorielles continues.
  • Les désignations de propriétés de clé de champ d'embedding ne peuvent actuellement pas être supprimées une fois définies.

Ingérer des données avec des représentations vectorielles continues

Vous pouvez ingérer les embeddings d'un document dans un à deux champs inclus dans les données ou les métadonnées de ce document lors de l'ingestion du document.

Pour ingérer des données avec des représentations vectorielles continues:

  1. Préparez vos données pour l'ingestion en fonction de leur type:

    • Données structurées: lorsque vous préparez vos données, incluez les représentations vectorielles continues de chaque document sous forme de tableaux unidimensionnels dans un à deux champs du document. Vous pouvez fournir jusqu'à deux représentations vectorielles continues (par exemple, si vous effectuez un test A/B entre des représentations vectorielles continues). Chaque intégration doit être fournie dans son propre champ dans le document, par exemple : "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Suivez les consignes de préparation des données structurées dans la documentation Préparer les données pour l'ingestion.

    • Données non structurées avec métadonnées: lorsque vous préparez vos données, incluez l'imbrication de chaque document en tant que tableau unidimensionnel dans un champ des métadonnées du document. Vous pouvez fournir jusqu'à deux embeddings (par exemple, lors d'un test A/B entre des embeddings). Chaque représentation vectorielle continue doit être fournie dans son propre champ dans les métadonnées du document, par exemple : "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Suivez les conseils pour préparer des données non structurées avec des métadonnées pour votre méthode d'ingestion (Cloud Storage ou BigQuery) dans la documentation Préparer les données pour l'ingestion.

  2. Suivez les instructions correspondant à votre type de données dans Créer un moteur et ingérer des données avec Vertex AI Search pour ingérer vos documents avec des représentations vectorielles continues.

Ensuite, mettez à jour votre schéma pour qu'il utilise les champs d'intégration appropriés.

Mettre à jour votre schéma

Mettez à jour votre schéma avec des mises en correspondance de propriétés clés et des dimensions pour vos champs d'intégration à l'aide de la console Google Cloud ou de l'API.

Console

Pour mettre à jour votre schéma à l'aide de la console Google Cloud, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Agent Builder.

    Agent Builder

  2. Dans le menu de navigation, cliquez sur Data stores (Datastores).

  3. Dans la colonne Nom, cliquez sur le data store contenant le schéma que vous souhaitez mettre à jour.

  4. Cliquez sur l'onglet Schéma pour afficher le schéma de vos données.

  5. Cliquez sur le bouton Modifier.

  6. Recherchez votre champ d'encapsulation dans le schéma, puis dans la colonne Propriétés clés, sélectionnez embedding_vector comme propriété clé pour ce champ.

    Si vous avez un deuxième champ d'encapsulation, répétez cette étape pour ce champ.

  7. Dans la colonne Dimension, saisissez le nombre de dimensions pour ce champ d'embedding.

    Si vous avez un deuxième champ d'encapsulation, répétez cette étape pour ce champ.

  8. Cliquez sur Enregistrer pour appliquer les modifications apportées au schéma.

    Après avoir mis à jour votre schéma, la réindexation peut prendre jusqu'à 24 heures, selon la taille de votre data store.

REST

Pour mettre à jour votre schéma à l'aide de l'API, procédez comme suit:

  1. En suivant les instructions REST de la section Mettre à jour un schéma, spécifiez le mappage des propriétés clés et le nombre de dimensions pour chaque champ d'encapsulation:

    • "keyPropertyMapping": "embedding_vector"
    • "dimension": NUMBER_OF_DIMENSIONS

    Par exemple, voici un schéma JSON formaté avec 768 dimensions pour le champ example_embedding_vector:

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "example_embedding_vector": {
            "type": "array",
            "keyPropertyMapping": 'embedding_vector',
            "dimension": 768,
            "items": {
              "type": "number"
            }
          }
        }
      }
    

    Dans une requête de mise à jour de schéma, le JSON formaté ci-dessus serait inclus en tant que chaîne JSON:

      "jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
    

    Après avoir mis à jour votre schéma, la réindexation peut prendre jusqu'à 24 heures, selon la taille de votre data store.

Spécifiez ensuite votre représentation vectorielle continue.

Spécifier votre empreinte

Une fois l'indexation de votre mise à jour de schéma terminée, vous pouvez envoyer des requêtes de recherche incluant une spécification d'embedding.

Il existe deux façons de spécifier un embedding:

  • Spécifier une imbrication globalement: pour spécifier la même imbrication pour toutes les requêtes de recherche, mettez à jour vos paramètres de diffusion pour inclure une spécification d'imbrication à l'aide de la console Google Cloud ou de l'API.
  • Spécifier une imbrication par requête de recherche: envoyez embeddingSpec dans chaque requête de recherche à l'aide de l'API. Cette opération remplace le paramètre global, le cas échéant.

Spécifier un embedding de manière globale

Vous pouvez spécifier le même embedding pour toutes les requêtes de recherche à l'aide de la console Google Cloud ou de l'API.

Console

Pour fournir la même spécification d'intégration à toutes les requêtes de recherche, mettez à jour vos paramètres de diffusion avec une spécification d'intégration.

  1. Dans la console Google Cloud, accédez à la page Agent Builder.

    Agent Builder

  2. Cliquez sur Afficher pour le data store contenant le schéma que vous souhaitez mettre à jour.

  3. Accédez à la page Configurations, puis cliquez sur l'onglet Diffusion.

  4. Pour Chemin d'accès au champ d'intégration, saisissez le nom du champ que vous avez mappé à la propriété de clé d'intégration.

  5. Pour Expression de classement, saisissez une ou plusieurs fonctions pour contrôler le classement des résultats. Les variables sont pondérées en fonction de l'expression que vous saisissez. L'expression de classement est une fonction unique ou plusieurs fonctions jointes par + au format function, { " + ", function }.

    Les fonctions compatibles sont les suivantes :

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Les variables suivantes sont acceptées:

    • relevance_score: variable prédéfinie fournie par Vertex AI Search pour mesurer la pertinence d'un document. Le score varie de 0 à 1, 0 (limites incluses).
    • dotProduct(): fonction prédéfinie fournie par Vertex AI Search. Vous devez fournir le même nom de champ à cette fonction que pour embeddingVector.fieldPath.

    Exemple :

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)

REST

Pour fournir la même spécification d'encapsulation à toutes les requêtes de recherche, mettez à jour servingConfig avec embeddingConfig.

  1. Appliquez un correctif à l'entité servingConfig avec les champs que vous souhaitez mettre à jour. Spécifiez les champs que vous mettez à jour avec updateMask.

    Dans l'exemple suivant, embeddingConfig utilise des représentations vectorielles continues dans le champ example_embedding_field et attribue un poids de 0,5 à relevance_score.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search",
          "embeddingConfig": {
            "fieldPath": "example_embedding_field"
          },
          "ranking_expression": "0.5 * relevance_score"
        }' \
    'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
    
    • fieldPath: nom du champ que vous avez mappé à la propriété de clé d'embedding.
    • ranking_expression: contrôle le classement des résultats. Les variables sont pondérées en fonction de l'expression que vous saisissez. L'expression de classement est une seule fonction ou plusieurs fonctions jointes par + au format function, { " + ", function }.

    Les fonctions compatibles sont les suivantes :

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Les variables suivantes sont acceptées:

    • relevance_score: variable prédéfinie fournie par Vertex AI Search.
    • dotProduct(): fonction prédéfinie fournie par Vertex AI Search. Le produit scalaire est normalisé. Vous devez fournir à cette fonction le même nom de champ que pour embeddingVector.fieldPath.

    Exemple :

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. Lorsque vous envoyez des requêtes de recherche, servingConfig.embeddingConfig est automatiquement inclus.

    Si vous envoyez une requête de recherche qui inclut explicitement un autre embeddingSpec, il remplace servingConfig.embeddingConfig. Consultez les instructions Par requête pour savoir comment fournir des spécifications d'intégration pour des requêtes de recherche uniques.

Spécifier un embedding par requête de recherche

Vous pouvez fournir une spécification d'intégration pour une seule requête de recherche à l'aide de l'API. Une spécification d'intégration par requête remplace toute spécification d'intégration globale.

  1. Envoyez une requête de recherche incluant embeddingSpec.

    L'exemple suivant de embeddingSpec utilise des représentations vectorielles continues dans le champ example_embedding_field, spécifie "Exemple de requête" comme vecteur d'entrée et attribue un poids de 0,5 à relevance_score et de 0,3 à example_embedding_field lors du calcul du classement.

      "embeddingSpec": {
        "embeddingVectors": [{
          "fieldPath": "example_embedding_field",
          "vector": [
            0.96241474,
            -0.45999944,
            0.108588696
          ]
        }]
      },
      "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
    
    • fieldPath: nom du champ que vous avez mappé à la propriété de clé d'embedding.
    • vector: vecteur d'entrée fourni sous forme de tableau.
    • ranking_expression: contrôle le classement des résultats. Les variables sont pondérées en fonction de l'expression que vous saisissez. L'expression de classement est une seule fonction ou plusieurs fonctions jointes par + au format function, { " + ", function }.

      Les fonctions compatibles sont les suivantes :

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      Les variables suivantes sont acceptées:

      • relevance_score: variable prédéfinie fournie par Vertex AI Search pour mesurer la pertinence d'un document. Le score varie de 0 à 1, 0 (limites incluses).
      • dotProduct(): fonction prédéfinie fournie par Vertex AI Search. Vous devez fournir le même nom de champ à cette fonction que pour embeddingVector.fieldPath.

      Exemple :

      • 0.3 * relevance_score
      • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. Obtenez les résultats dans la réponse à la recherche. Chaque résultat de recherche inclut son score de pertinence et les valeurs du produit scalaire. Exemple :

    "modelScores": {
      "dotProduct(example_embedding_field)": [0.02150772698223591],
      "relevance_score": [ 0.8828125 ]
    }
    
    • dotProduct(): produit scalaire calculé pour le document de résultats de recherche.
    • relevance_score: score de pertinence calculé pour le document de résultats de recherche.

Étape suivante