Utiliser des embeddings personnalisés

Si vous avez déjà créé vos propres embeddings vectoriels personnalisés pour vos données, vous pouvez les importer dans Agent Search et les utiliser lorsque vous effectuez des requêtes avec Agent Search.

Cette fonctionnalité est disponible pour les datastores contenant des données structurées personnalisées ou des données non structurées avec des métadonnées. Elle n'est pas disponible pour la recherche de contenus multimédias et de contenus liés à la santé.

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

  • Vos embeddings ont été entraînés sur des mots personnalisés, tels que des termes internes dont la similitude sémantique ne serait pas capturée par un entraînement sur des données publiques (par exemple, des termes spécifiques à l'organisation qui n'apparaissent que dans des documents privés).
  • Vous avez créé des embeddings 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 embeddings pour obtenir un classement basé sur la personnalisation, ce qui peut compléter les embeddings de documents de Google pour un classement basé sur la pertinence.

Pour utiliser vos propres embeddings :

  1. Avant de commencer : vérifiez que vos embeddings répondent à toutes les exigences.
  2. Ingérer des données avec des embeddings : ingérez vos documents avec leurs embeddings.
  3. Mettre à 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écifier votre embedding : spécifiez votre embedding soit globalement, soit par requête de recherche.

Avant de commencer

Avant de commencer, assurez-vous que vos embeddings répondent aux exigences suivantes :

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

Ingérer des données avec des embeddings

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

Pour ingérer des données avec des embeddings :

  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 embeddings de chaque document sous forme de tableaux unidimensionnels dans un ou deux champs du document. Vous pouvez fournir jusqu'à deux embeddings (par exemple, si vous effectuez un test A/B entre des embeddings). Chaque embedding doit être fourni dans son propre champ du document, par exemple: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

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

    • Données non structurées avec des métadonnées : lorsque vous préparez vos données, incluez l'embedding de chaque document sous forme de tableau unidimensionnel dans un champ des métadonnées du document. Vous pouvez fournir jusqu'à deux embeddings (par exemple, lorsque vous effectuez un test A/B entre des embeddings). Chaque embedding doit être fourni dans son propre champ des métadonnées du document, par exemple : "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Suivez les instructions 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 datastore de recherche pour ingérer vos documents avec des embeddings.

Ensuite, mettez à jour votre schéma pour utiliser les champs d'embedding appropriés.

Mettre à jour votre schéma

Mettez à jour votre schéma avec les mappages de propriétés clés et les dimensions de vos champs d'embedding à l'aide de la Google Cloud console ou de l'API.

Console

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

  1. Dans la Google Cloud console, accédez à la page Applications d'IA.

    AI Applications

  2. Dans le menu de navigation, cliquez sur Datastores.

  3. Dans la colonne Name (Nom), cliquez sur le data store dont vous souhaitez mettre à jour le schéma.

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

  5. Cliquez sur le bouton Edit (Modifier).

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

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

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

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

  8. Cliquez sur Save (Enregistrer) pour appliquer les modifications apportées à votre 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 de propriétés clés et le nombre de dimensions pour chaque champ d'embedding :

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

    Voici, par exemple, 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 schéma de mise à jour, ce JSON formaté 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.

Ensuite, spécifiez votre embedding.

Spécifier votre embedding

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

Vous pouvez spécifier un embedding de deux manières :

  • Spécifier un embedding globalement : pour spécifier le même embedding pour toutes les requêtes de recherche, mettez à jour vos paramètres de diffusion afin d'inclure une spécification d'embedding à l'aide de la console ou de l'API. Google Cloud
  • Spécifier un embedding par requête de recherche : envoyez embeddingSpec dans chaque requête de recherche à l'aide de l'API. Cela remplace le paramètre global s'il est défini.

Spécifier un embedding globalement

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

Console

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

  1. Dans la Google Cloud console, accédez à la page Applications d'IA.

    AI Applications

  2. Cliquez sur View (Afficher) pour le data store dont vous souhaitez mettre à jour le schéma.

  3. Accédez à la page Configurations , puis cliquez sur l'onglet Control (Contrôle).

  4. Pour Embedding field path (Chemin du champ d'embedding), saisissez le nom du champ que vous avez mappé à la propriété clé d'embedding.

  5. Pour Ranking expression (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 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 Agent Search pour mesurer la pertinence d'un document. Le score est compris entre 0 et 1, 0 inclus.
    • dotProduct(): fonction prédéfinie fournie par Agent Search. Vous devez fournir le même nom de champ à cette fonction que celui que vous avez utilisé 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'embedding à toutes les requêtes de recherche, mettez à jour servingConfig avec embeddingConfig.

  1. Appliquez un patch à 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 embeddings 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é 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 Agent Search.
    • dotProduct(): fonction prédéfinie fournie par Agent Search. Le produit scalaire est normalisé. Vous devez fournir le même nom de champ à cette fonction que celui que vous avez utilisé 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 embeddingSpec différent, il remplace servingConfig.embeddingConfig. Consultez les instructions Par requête pour savoir comment fournir des spécifications d'embedding pour des requêtes de recherche uniques.

Spécifier un embedding par requête de recherche

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

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

    L'exemple suivant de embeddingSpec utilise des embeddings dans le champ example_embedding_field, spécifie "Example query" (Exemple de requête) comme vecteur d'entrée, et attribue un poids de 0,5 à relevance_score et 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é 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 qui sont 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 Agent Search pour mesurer la pertinence d'un document. Le score est compris entre 0 et 1, 0 inclus.
      • dotProduct(): fonction prédéfinie fournie par Agent Search. Vous devez fournir le même nom de champ à cette fonction que celui que vous avez utilisé 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 de recherche. Chaque résultat de recherche inclut son score de pertinence et ses valeurs de produit scalaire. Exemple :

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

Étape suivante