Générer des embeddings de texte à l'aide de la fonction ML.GENERATE_EMBEDDING

Ce document explique comment créer un modèle distant BigQuery ML faisant référence à un modèle d'embedding. Vous utilisez ensuite ce modèle avec la fonction ML.GENERATE_EMBEDDING pour créer des embeddings de texte à l'aide des données d'une table standard BigQuery.

Les types de modèles à distance suivants sont acceptés :

Rôles requis

Pour créer un modèle à distance et utiliser la fonction ML.GENERATE_EMBEDDING, vous avez besoin des rôles IAM (Identity and Access Management) suivants :

  • Créer et utiliser des ensembles de données, des tables et des modèles BigQuery : Éditeur de données BigQuery (roles/bigquery.dataEditor) sur votre projet.
  • Créer, déléguer et utiliser des connexions BigQuery : administrateur de connexion BigQuery (roles/bigquery.connectionsAdmin) sur votre projet.

    Si vous n'avez pas configuré de connexion par défaut, vous pouvez en créer une et la définir lors de l'exécution de l'instruction CREATE MODEL. Pour ce faire, vous devez disposer du rôle Administrateur BigQuery (roles/bigquery.admin) sur votre projet. Pour en savoir plus, consultez Configurer la connexion par défaut.

  • Accordez des autorisations au compte de service de la connexion : Administrateur IAM du projet (roles/resourcemanager.projectIamAdmin) sur le projet contenant le point de terminaison Vertex AI. Il s'agit du projet actuel pour les modèles distants que vous créez en spécifiant le nom du modèle comme point de terminaison. Il s'agit du projet identifié dans l'URL des modèles distants que vous créez en spécifiant une URL comme point de terminaison.

  • Créer des jobs BigQuery : rôle Utilisateur de job BigQuery (roles/bigquery.jobUser) sur votre projet.

Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce document. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

  • Créez un ensemble de données : bigquery.datasets.create
  • Créer, déléguer et utiliser une connexion : bigquery.connections.*
  • Définissez les autorisations du compte de service : resourcemanager.projects.getIamPolicy et resourcemanager.projects.setIamPolicy.
  • Créez un modèle et exécutez l'inférence :
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Interroger les données d'une table : bigquery.tables.getData

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Avant de commencer

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Créer un ensemble de données

Créez un ensemble de données BigQuery pour contenir vos ressources :

Console

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

    Accéder à BigQuery

  2. Dans le panneau de gauche, cliquez sur Explorer :

    Bouton du volet "Explorateur" mis en évidence.

    Si le volet de gauche n'apparaît pas, cliquez sur Développer le volet de gauche pour l'ouvrir.

  3. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  4. Cliquez sur Afficher les actions > Créer un ensemble de données.

  5. Sur la page Créer un ensemble de données, procédez comme suit :

    1. Pour ID de l'ensemble de données, saisissez un nom pour l'ensemble de données.

    2. Dans le champ Type d'emplacement, sélectionnez Région ou Multirégional.

      • Si vous avez sélectionné Région, choisissez un emplacement dans la liste Région.
      • Si vous avez sélectionné Multirégional, sélectionnez États-Unis ou Europe dans la liste Multirégional.
    3. Cliquez sur Créer un ensemble de données.

bq

  1. Pour créer un ensemble de données, exécutez la commande bq mk en spécifiant l'option --location :

    bq --location=LOCATION mk -d DATASET_ID

    Remplacez les éléments suivants :

    • LOCATION : emplacement de l'ensemble de données.
    • DATASET_ID est l'ID de l'ensemble de données que vous créez.
  2. Vérifiez que l'ensemble de données a été créé :

    bq ls

Créer une connexion

Vous pouvez ignorer cette étape si vous avez configuré une connexion par défaut ou si vous disposez du rôle Administrateur BigQuery.

Créez une connexion de ressource cloud pour que le modèle distant puisse l'utiliser, et obtenez le compte de service de la connexion. Créez la connexion dans le même emplacement que l'ensemble de données que vous avez créé à l'étape précédente.

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, cliquez sur Ajouter des données :

    Élément d'UI "Ajouter des données".

    La boîte de dialogue Ajouter des données s'ouvre.

  3. Dans le panneau Filtrer par, dans la section Type de source de données, sélectionnez Applications métier.

    Vous pouvez également saisir Vertex AI dans le champ Rechercher des sources de données.

  4. Dans la section Sources de données recommandées, cliquez sur Vertex AI.

  5. Cliquez sur la fiche de solution Modèles Vertex AI : fédération BigQuery.

  6. Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes, BigLake et Spanner (ressource Cloud).

  7. Dans le champ ID de connexion, saisissez un nom pour votre connexion.

  8. Cliquez sur Créer une connexion.

  9. Cliquez sur Accéder à la connexion.

  10. Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.

bq

  1. Dans un environnement de ligne de commande, créez une connexion :

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Le paramètre --project_id remplace le projet par défaut.

    Remplacez les éléments suivants :

    • REGION : votre région de connexion
    • PROJECT_ID : ID de votre projet Google Cloud
    • CONNECTION_ID : ID de votre connexion

    Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.

    Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Le résultat ressemble à ce qui suit :

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Utilisez la ressource google_bigquery_connection.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

L'exemple suivant crée une connexion de ressources Cloud nommée my_cloud_resource_connection dans la région US :


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Pour appliquer votre configuration Terraform dans un projet Google Cloud , suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud , accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Attribuer un rôle au compte de service de la connexion au modèle distant

Vous devez attribuer le rôle d'utilisateur Vertex AI au compte de service de la connexion.

Si vous envisagez de spécifier le point de terminaison en tant qu'URL lors de la création du modèle distant (par exemple, endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/text-embedding-005'), accordez ce rôle dans le projet que vous spécifiez dans l'URL.

Si vous envisagez de spécifier le point de terminaison à l'aide du nom du modèle lors de la création du modèle distant (par exemple endpoint = 'text-embedding-005'), accordez ce rôle dans le projet dans lequel vous prévoyez de créer le modèle distant.

L'attribution du rôle dans un autre projet génère l'erreur bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Pour accorder le rôle, procédez comme suit :

Console

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Accorder l'accès.

    La boîte de dialogue Ajouter des comptes principaux s'ouvre.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis Utilisateur Vertex AI.

  5. Cliquez sur Enregistrer.

gcloud

Exécutez la commande gcloud projects add-iam-policy-binding :

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None

Remplacez les éléments suivants :

  • PROJECT_NUMBER : votre numéro de projet
  • MEMBER : ID du compte de service que vous avez copié précédemment

Choisir une méthode de déploiement de modèle ouvert

Si vous créez un modèle distant sur un modèle ouvert compatible, vous pouvez déployer automatiquement le modèle ouvert en même temps que vous créez le modèle distant en spécifiant l'ID de modèle Vertex AI Model Garden ou Hugging Face dans l'instruction CREATE MODEL. Vous pouvez également déployer manuellement le modèle ouvert en premier, puis l'utiliser avec le modèle à distance en spécifiant le point de terminaison du modèle dans l'instruction CREATE MODEL. Pour en savoir plus, consultez Déployer des modèles ouverts.

Créer un modèle distant BigQuery ML

Créez un modèle distant :

Nouveaux modèles ouverts

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

    Accéder à BigQuery

  2. À l'aide de l'éditeur SQL, créez un modèle distant :

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      {HUGGING_FACE_MODEL_ID = 'HUGGING_FACE_MODEL_ID' |
         MODEL_GARDEN_MODEL_NAME = 'MODEL_GARDEN_MODEL_NAME'}
      [, HUGGING_FACE_TOKEN = 'HUGGING_FACE_TOKEN' ]
      [, MACHINE_TYPE = 'MACHINE_TYPE' ]
      [, MIN_REPLICA_COUNT = MIN_REPLICA_COUNT ]
      [, MAX_REPLICA_COUNT = MAX_REPLICA_COUNT ]
      [, RESERVATION_AFFINITY_TYPE = {'NO_RESERVATION' | 'ANY_RESERVATION' | 'SPECIFIC_RESERVATION'} ]
      [, RESERVATION_AFFINITY_KEY = 'compute.googleapis.com/reservation-name' ]
      [, RESERVATION_AFFINITY_VALUES = RESERVATION_AFFINITY_VALUES ]
      [, ENDPOINT_IDLE_TTL = ENDPOINT_IDLE_TTL ]
    );

    Remplacez l'élément suivant :

    • PROJECT_ID : ID de votre projet.
    • DATASET_ID : ID de l'ensemble de données pour contenir le modèle. Cet ensemble de données doit se trouver dans le même emplacement que la connexion que vous utilisez.
    • MODEL_NAME : nom du modèle
    • REGION : région utilisée par la connexion.
    • CONNECTION_ID : ID de votre connexion BigQuery.

      Vous pouvez obtenir cette valeur en affichant les détails de la connexion dans la console Google Cloud et en copiant la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion. Par exemple, projects/myproject/locations/connection_location/connections/myconnection.

    • HUGGING_FACE_MODEL_ID : valeur STRING spécifiant l'ID du modèle pour un modèle Hugging Face compatible, au format provider_name/model_name. Par exemple, deepseek-ai/DeepSeek-R1. Pour obtenir l'ID du modèle, cliquez sur son nom dans le Hugging Face Model Hub, puis copiez l'ID du modèle en haut de la fiche du modèle.
    • MODEL_GARDEN_MODEL_NAME : valeur STRING qui spécifie l'ID et la version d'un modèle Vertex AI Model Garden compatible, au format publishers/publisher/models/model_name@model_version. Par exemple : publishers/openai/models/gpt-oss@gpt-oss-120b. Pour obtenir l'ID du modèle, cliquez sur la fiche du modèle dans Vertex AI Model Garden, puis copiez l'ID du modèle à partir du champ ID du modèle. Vous pouvez obtenir la version par défaut du modèle en la copiant à partir du champ Version de la fiche du modèle. Pour afficher d'autres versions de modèle que vous pouvez utiliser, cliquez sur Déployer le modèle, puis sur le champ ID de ressource.
    • HUGGING_FACE_TOKEN : valeur STRING qui spécifie le jeton d'accès utilisateur Hugging Face à utiliser. Vous ne pouvez spécifier une valeur pour cette option que si vous spécifiez également une valeur pour l'option HUGGING_FACE_MODEL_ID.

      Le jeton doit au moins disposer du rôle read, mais les jetons avec un champ d'application plus large sont également acceptables. Cette option est obligatoire lorsque le modèle identifié par la valeur HUGGING_FACE_MODEL_ID est un modèle restreint ou privé Hugging Face.

      Certains modèles fermés nécessitent l'acceptation explicite de leurs conditions d'utilisation avant d'accorder l'accès. Pour accepter ces conditions, procédez comme suit :

      1. Accédez à la page du modèle sur le site Web Hugging Face.
      2. Localisez et lisez les conditions d'utilisation du modèle. Un lien vers le contrat de service se trouve généralement sur la fiche du modèle.
      3. Acceptez les conditions d'utilisation lorsque vous y êtes invité sur la page.
    • MACHINE_TYPE : valeur STRING qui spécifie le type de machine à utiliser lors du déploiement du modèle sur Vertex AI. Pour en savoir plus sur les types de machines compatibles, consultez Types de machines. Si vous ne spécifiez pas de valeur pour l'option MACHINE_TYPE, le type de machine par défaut de Vertex AI Model Garden pour le modèle est utilisé.
    • MIN_REPLICA_COUNT : valeur INT64 qui spécifie le nombre minimal d'instances répliquées utilisées lors du déploiement du modèle sur un point de terminaison Vertex AI. Le service augmente ou diminue le nombre de répliques en fonction de la charge d'inférence sur le point de terminaison. Le nombre de réplicas utilisés n'est jamais inférieur à la valeur MIN_REPLICA_COUNT ni supérieur à la valeur MAX_REPLICA_COUNT. La valeur MIN_REPLICA_COUNT doit être comprise dans la plage [1, 4096]. La valeur par défaut est 1.
    • MAX_REPLICA_COUNT : valeur INT64 qui spécifie le nombre maximal de répliques de machine utilisées lors du déploiement du modèle sur un point de terminaison Vertex AI. Le service augmente ou diminue le nombre de répliques en fonction de la charge d'inférence sur le point de terminaison. Le nombre de réplicas utilisés n'est jamais inférieur à la valeur MIN_REPLICA_COUNT ni supérieur à la valeur MAX_REPLICA_COUNT. La valeur MAX_REPLICA_COUNT doit être comprise dans la plage [1, 4096]. La valeur par défaut est MIN_REPLICA_COUNT.
    • RESERVATION_AFFINITY_TYPE : détermine si le modèle déployé utilise des réservations Compute Engine pour assurer la disponibilité des machines virtuelles (VM) lors de la diffusion des prédictions, et indique si le modèle utilise des VM de toutes les réservations disponibles ou d'une seule réservation spécifique. Pour en savoir plus, consultez Affinité de réservation Compute Engine.

      Vous ne pouvez utiliser que les réservations Compute Engine partagées avec Vertex AI. Pour en savoir plus, consultez Autoriser l'utilisation d'une réservation.

      Les valeurs acceptées sont les suivantes :

      • NO_RESERVATION : aucune réservation n'est consommée lorsque votre modèle est déployé sur un point de terminaison Vertex AI. Spécifier NO_RESERVATION a le même effet que de ne pas spécifier d'affinité de réservation.
      • ANY_RESERVATION : le déploiement de modèle Vertex AI consomme des machines virtuelles (VM) à partir de réservations Compute Engine qui se trouvent dans le projet actuel ou qui sont partagées avec le projet et qui sont configurées pour la consommation automatique. Seules les VM qui répondent aux critères suivants sont utilisées :
        • Ils utilisent le type de machine spécifié par la valeur MACHINE_TYPE.
        • Si l'ensemble de données BigQuery dans lequel vous créez le modèle distant est une région unique, la réservation doit se trouver dans la même région. Si l'ensemble de données se trouve dans la région multirégionale US, la réservation doit se trouver dans la région us-central1. Si l'ensemble de données se trouve dans la région multirégionale EU, la réservation doit se trouver dans la région europe-west4.

        S'il n'y a pas assez de capacité dans les réservations disponibles ou si aucune réservation appropriée n'est trouvée, le système provisionne des VM Compute Engine à la demande pour répondre aux besoins en ressources.

      • SPECIFIC_RESERVATION : le déploiement du modèle Vertex AI consomme des VM uniquement à partir de la réservation que vous spécifiez dans la valeur RESERVATION_AFFINITY_VALUES. Cette réservation doit être configurée pour une consommation spécifiquement ciblée. Le déploiement échoue si la réservation spécifiée n'a pas une capacité suffisante.
    • RESERVATION_AFFINITY_KEY : chaîne compute.googleapis.com/reservation-name. Vous devez spécifier cette option lorsque la valeur RESERVATION_AFFINITY_TYPE est SPECIFIC_RESERVATION.
    • RESERVATION_AFFINITY_VALUES : valeur ARRAY<STRING> qui spécifie le nom de ressource complet de la réservation Compute Engine, au format suivant :

      projects/myproject/zones/reservation_zone/reservations/reservation_name.

      Par exemple, RESERVATION_AFFINITY_values = ['projects/myProject/zones/us-central1-a/reservations/myReservationName'].

      Vous pouvez obtenir le nom et la zone de la réservation sur la page Réservations de la console Google Cloud . Pour en savoir plus, consultez Afficher les réservations.

      Vous devez spécifier cette option lorsque la valeur RESERVATION_AFFINITY_TYPE est SPECIFIC_RESERVATION.

    • ENDPOINT_IDLE_TTL : valeur INTERVAL qui spécifie la durée d'inactivité au-delà de laquelle le modèle ouvert est automatiquement non déployé à partir du point de terminaison Vertex AI.

      Pour activer le déploiement automatique, spécifiez une valeur de littéral d'intervalle comprise entre 390 minutes (6,5 heures) et 7 jours. Par exemple, spécifiez INTERVAL 8 HOUR pour que le modèle soit non déployé après huit heures d'inactivité. La valeur par défaut est de 390 minutes (6,5 heures).

      L'inactivité d'un modèle est définie comme le temps écoulé depuis l'une des opérations suivantes effectuées sur le modèle :

      Chacune de ces opérations réinitialise le délai d'inactivité à zéro. La réinitialisation est déclenchée au début du job BigQuery qui effectue l'opération.

      Une fois le modèle non déployé, les requêtes d'inférence qui lui sont envoyées renvoient une erreur. L'objet de modèle BigQuery reste inchangé, y compris les métadonnées du modèle. Pour réutiliser le modèle pour l'inférence, vous devez le redéployer en exécutant l'instruction ALTER MODEL sur le modèle et en définissant l'option DEPLOY_MODEL sur TRUE.

Modèles ouverts déployés

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

    Accéder à BigQuery

  2. À l'aide de l'éditeur SQL, créez un modèle distant :

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      ENDPOINT = 'https://ENDPOINT_REGION-aiplatform.googleapis.com/v1/projects/ENDPOINT_PROJECT_ID/locations/ENDPOINT_REGION/endpoints/ENDPOINT_ID'
    );

    Remplacez l'élément suivant :

    • PROJECT_ID : ID de votre projet.
    • DATASET_ID : ID de l'ensemble de données pour contenir le modèle. Cet ensemble de données doit se trouver dans le même emplacement que la connexion que vous utilisez.
    • MODEL_NAME : nom du modèle
    • REGION : région utilisée par la connexion.
    • CONNECTION_ID : ID de votre connexion BigQuery.

      Vous pouvez obtenir cette valeur en affichant les détails de la connexion dans la console Google Cloud et en copiant la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion. Par exemple, projects/myproject/locations/connection_location/connections/myconnection.

    • ENDPOINT_REGION : région dans laquelle le modèle ouvert est déployé.
    • ENDPOINT_PROJECT_ID : projet dans lequel le modèle ouvert est déployé.
    • ENDPOINT_ID : ID du point de terminaison HTTPS utilisé par le modèle ouvert. Pour obtenir l'ID du point de terminaison, recherchez le modèle ouvert sur la page Prédiction en ligne et copiez la valeur dans le champ ID.

Tous les autres modèles

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

    Accéder à BigQuery

  2. À l'aide de l'éditeur SQL, créez un modèle distant :

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (ENDPOINT = 'ENDPOINT');

    Remplacez l'élément suivant :

    • PROJECT_ID : ID de votre projet.
    • DATASET_ID : ID de l'ensemble de données pour contenir le modèle. Cet ensemble de données doit se trouver dans le même emplacement que la connexion que vous utilisez.
    • MODEL_NAME : nom du modèle
    • REGION : région utilisée par la connexion.
    • CONNECTION_ID : ID de votre connexion BigQuery.

      Vous pouvez obtenir cette valeur en affichant les détails de la connexion dans la console Google Cloud et en copiant la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion. Par exemple, projects/myproject/locations/connection_location/connections/myconnection.

    • ENDPOINT : nom d'un modèle d'embedding à utiliser. Pour en savoir plus, consultez ENDPOINT.

      Le modèle Vertex AI que vous spécifiez doit être disponible dans l'emplacement où vous créez le modèle distant. Pour en savoir plus, consultez Emplacements.

Générer des embeddings textuels

Générez des embeddings de texte à l'aide de la fonction ML.GENERATE_EMBEDDING en utilisant les données textuelles d'une colonne de table ou d'une requête.

En règle générale, vous devez utiliser un modèle d'embedding de texte pour les cas d'utilisation exclusivement basés sur du texte, et un modèle d'embedding multimodal pour les cas d'utilisation de recherche multimodale, où les embeddings pour le texte et le contenu visuel sont générées dans le même espace sémantique.

Vertex AI Text

Générez des embeddings textuels à l'aide d'un modèle distant sur un modèle d'embedding textuel Vertex AI :

SELECT *
FROM ML.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(FLATTEN_JSON AS flatten_json_output,
    TASK_TYPE AS task_type,
    OUTPUT_DIMENSIONALITY AS output_dimensionality)
);

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle distant sur un modèle d'embedding.
  • TABLE_NAME : nom de la table contenant le texte à intégrer. Cette table doit avoir une colonne nommée content. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • CONTENT_QUERY : requête dont le résultat contient une colonne STRING appelée content.
  • FLATTEN_JSON : BOOL qui indique s'il faut analyser l'embedding dans une colonne distincte. La valeur par défaut est TRUE.
  • TASK_TYPE : littéral de type STRING qui spécifie l'application en aval prévue pour aider le modèle à produire des embeddings de meilleure qualité. TASK_TYPE accepte les valeurs suivantes :
    • RETRIEVAL_QUERY : indique que le texte donné est une requête dans un contexte de recherche ou de récupération.
    • RETRIEVAL_DOCUMENT : indique que le texte donné est un document dans un contexte de recherche ou de récupération.

      Lorsque vous utilisez ce type de tâche, il est utile d'inclure le titre du document dans l'instruction de requête afin d'améliorer la qualité des représentations vectorielles continues. Le titre du document doit se trouver dans une colonne nommée title ou associée à un alias title, par exemple :

            SELECT *
            FROM
              ML.GENERATE_EMBEDDING(
                MODEL mydataset.embedding_model,
                (SELECT abstract as content, header as title, publication_number
                FROM mydataset.publications),
                STRUCT(TRUE AS flatten_json_output, 'RETRIEVAL_DOCUMENT' as task_type)
            );
            

      Si vous spécifiez la colonne de titre dans la requête d'entrée, le champ title du corps de la requête envoyée au modèle est renseigné. Si vous spécifiez une valeur title lorsque vous utilisez un autre type de tâche, cette entrée est ignorée et n'a aucun effet sur les résultats d'embedding.

    • SEMANTIC_SIMILARITY : indique que le texte donné sera utilisé pour la similarité textuelle sémantique (STS).
    • CLASSIFICATION : indique que les embeddings seront utilisés pour la classification.
    • CLUSTERING : indique que les embeddings seront utilisées pour le clustering.
    • QUESTION_ANSWERING : indique que les embeddings seront utilisés pour répondre aux questions.
    • FACT_VERIFICATION : indique que les embeddings seront utilisés pour la vérification de faits.
    • CODE_RETRIEVAL_QUERY : indique que les embeddings seront utilisés pour la récupération de code.
  • OUTPUT_DIMENSIONALITY : valeur INT64 qui spécifie le nombre de dimensions à utiliser lors de la génération d'embeddings. Par exemple, si vous spécifiez 256 AS output_dimensionality, la colonne de sortie ml_generate_embedding_result va contenir 256 embeddings pour chaque valeur d'entrée.

    Pour les modèles distants de plus de gemini-embedding-001, la valeur OUTPUT_DIMENSIONALITY doit être comprise dans la plage [1, 3072]. La valeur par défaut est 3072. Pour les modèles à distance text-embedding ou text-multilingual-embedding, la valeur OUTPUT_DIMENSIONALITY doit être comprise dans la plage [1, 768]. La valeur par défaut est 768.

    Si vous utilisez un modèle distant sur un modèle text-embedding, la version du modèle text-embedding doit être text-embedding-004 ou ultérieure. Si vous utilisez un modèle distant sur un modèle text-multilingual-embedding, la version du modèle text-multilingual-embedding doit être text-multilingual-embedding-002 ou ultérieure.

Exemple : intégrer du texte dans un tableau

L'exemple suivant montre une requête d'intégration de la colonne content de la table text_data :

SELECT *
FROM
  ML.GENERATE_EMBEDDING(
    MODEL `mydataset.embedding_model`,
    TABLE mydataset.text_data,
    STRUCT(TRUE AS flatten_json_output, 'CLASSIFICATION' AS task_type)
  );

Texte

Générez des embeddings textuels à l'aide d'un modèle distant sur un modèle d'embedding ouvert :

SELECT *
FROM ML.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(FLATTEN_JSON AS flatten_json_output)
);

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle distant sur un modèle d'embedding.
  • TABLE_NAME : nom de la table contenant le texte à intégrer. Cette table doit avoir une colonne nommée content. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • CONTENT_QUERY : requête dont le résultat contient une colonne STRING appelée content.
  • FLATTEN_JSON : BOOL qui indique s'il faut analyser l'embedding dans une colonne distincte. La valeur par défaut est TRUE.

Vertex AI multimodal

Générez des embeddings textuels à l'aide d'un modèle distant sur un modèle d'embedding multimodal Vertex AI :

SELECT *
FROM ML.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(FLATTEN_JSON AS flatten_json_output,
  OUTPUT_DIMENSIONALITY AS output_dimensionality)
);

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle distant sur un modèle multimodalembedding@001.
  • TABLE_NAME : nom de la table contenant le texte à intégrer. Cette table doit avoir une colonne nommée content. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • CONTENT_QUERY : requête dont le résultat contient une colonne STRING appelée content.
  • FLATTEN_JSON : BOOL qui indique s'il faut analyser l'embedding dans une colonne distincte. La valeur par défaut est TRUE.
  • OUTPUT_DIMENSIONALITY : valeur INT64 qui spécifie le nombre de dimensions à utiliser lors de la génération d'embeddings. Les valeurs acceptables sont 128, 256, 512 et 1408. La valeur par défaut est 1408. Par exemple, si vous spécifiez 256 AS output_dimensionality, la colonne de sortie ml_generate_embedding_result va contenir 256 embeddings pour chaque valeur d'entrée.

Exemple : utiliser des embeddings pour classer la similarité sémantique

L'exemple suivant intègre une collection d'avis sur des films et les classe par distance de cosinus à l'avis "Ce film était moyen" à l'aide de la fonction VECTOR_SEARCH. Plus la distance est faible, plus la similarité sémantique est élevée.

Pour en savoir plus sur la recherche vectorielle et l'index vectoriel, consultez Présentation de la recherche vectorielle.

CREATE TEMPORARY TABLE movie_review_embeddings AS (
  SELECT *
  FROM
    ML.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (
        SELECT "This movie was fantastic" AS content
        UNION ALL
        SELECT "This was the best movie I've ever seen!!" AS content
        UNION ALL
        SELECT "This movie was just okay..." AS content
        UNION ALL
        SELECT "This movie was terrible." AS content
      ),
      STRUCT(TRUE AS flatten_json_output)
    )
);

WITH average_review_embedding AS (
  SELECT ml_generate_embedding_result
  FROM
    ML.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (SELECT "This movie was average" AS content),
      STRUCT(TRUE AS flatten_json_output)
    )
)
SELECT
  base.content AS content,
  distance AS distance_to_average_review
FROM
  VECTOR_SEARCH(
    TABLE movie_review_embeddings,
    "ml_generate_embedding_result",
    (SELECT ml_generate_embedding_result FROM average_review_embedding),
    distance_type=>"COSINE",
    top_k=>-1
  )
ORDER BY distance_to_average_review;

Le résultat est le suivant :

+------------------------------------------+----------------------------+
| content                                  | distance_to_average_review |
+------------------------------------------+----------------------------+
| This movie was just okay...              | 0.062789813467745592       |
| This movie was fantastic                 |  0.18579561313064263       |
| This movie was terrible.                 |  0.35707466240930985       |
| This was the best movie I've ever seen!! |  0.41844932504542975       |
+------------------------------------------+----------------------------+

Étapes suivantes