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 les la recherche dans le domaine de la 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 votre récupération et votre classement de recherche. Exemple :

  • Vos représentations vectorielles continues ont été entraînées avec des mots personnalisés, tels que des termes internes dont la similarité sémantique ne serait pas capturée par un entraînement sur des modèles données (par exemple, des termes propres à une organisation qui n'apparaissent que dans des documents.
  • 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 représentations vectorielles continues 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. Mettre à jour votre schéma: mettez à jour votre schéma avec votre propriété de clé. spécifications des champs et des dimensions
  4. Spécifiez votre représentation vectorielle continue : spécifiez votre représentation vectorielle continue 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 représentations vectorielles continues doivent être fournies sous forme de tableaux unidimensionnels
  • La dimensionnalité de l'encapsulation doit être comprise entre 1 et 768 inclus
  • Les représentations vectorielles continues sont compatibles avec le texte et les images. Les vidéos ne sont pas acceptées
  • Jusqu'à deux champs peuvent être marqués comme champs de propriété de clé d'intégration. Vous pourriez utiliser deux champs pour des cas comme les tests A/B de vos représentations vectorielles continues
  • Actuellement, les désignations des propriétés de clé des champs de représentation vectorielle continue ne peuvent plus être supprimées après elles sont configurées

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

Vous pouvez ingérer les représentations vectorielles continues d'un document dans un ou deux champs inclus dans le les données ou métadonnées de ce document lors de son ingestion.

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 tests A/B entre les 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 instructions pour préparer les données structurées dans le Préparer les données pour l'ingestion de la documentation

    • Données non structurées avec métadonnées : lorsque vous préparez vos données, incluez les éléments suivants : la représentation vectorielle continue de chaque document sous forme de tableau unidimensionnel dans un champ dans les 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 est indiquée dans son propre champ dans les 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) Préparer les données pour l'ingestion de la documentation

  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 associé au schéma souhaité. à 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 disposez d'un deuxième champ de représentation vectorielle continue, répétez cette étape pour ce champ.

  7. Dans la colonne Dimension, indiquez le nombre de dimensions correspondantes représentation vectorielle continue.

    Si vous disposez d'un deuxième champ de représentation vectorielle continue, 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 entrepôt de données.

REST

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

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

    • "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 fichier JSON formaté ci-dessus serait inclus en tant que une 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 entrepôt de données.

Spécifiez ensuite votre représentation vectorielle continue.

Spécifier votre représentation vectorielle continue

Une fois l'indexation à partir de la mise à jour de schéma terminée, vous pouvez envoyer des requêtes de recherche qui incluent une spécification de représentation vectorielle continue.

Il existe deux façons de spécifier une représentation vectorielle continue:

  • Spécifier une empreinte globalement : pour spécifier la même empreinte pour toutes les requêtes de recherche, mettez à jour vos paramètres de diffusion pour inclure une spécification d'empreinte à 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. Le paramètre global est alors ignoré est définie.

Spécifier une représentation vectorielle continue 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 de représentation vectorielle continue à toutes les requêtes de recherche, mettre à jour vos paramètres d'inférence avec une spécification de représentation vectorielle continue.

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

    Agent Builder

  2. Cliquez sur Afficher pour le datastore 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 appuyez sur la touche Entrée. L'expression de classement est une 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 Vertex AI Search pour mesurer la pertinence d'un document. Le score est compris entre 0 et 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 comme vous l'avez fait 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 de représentation vectorielle continue à toutes les requêtes de recherche, Remplacez servingConfig par 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 donne une pondération 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 indiquez à 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 le Instructions pour fournir des spécifications d'intégration par demande pour les 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é sur la représentation vectorielle continue .
    • 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 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 est compris entre 0 et 1,0, limites incluses.
      • dotProduct(): fonction prédéfinie fournie par Vertex AI Search. Vous devez indiquer le même nom de champ à cette fonction comme vous l'avez fait 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 sa pertinence le score et les valeurs de produit scalaire. Exemple :

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

Étape suivante