Générer des représentations vectorielles continues de texte avec des modèles TensorFlow pré-entraînés

Ce tutoriel explique comment générer des représentations vectorielles continues de texte NNLM, SWIVEL et BERT dans BigQuery à l'aide de modèles TensorFlow pré-entraînés. Une représentation vectorielle continue de texte est une représentation vectorielle dense d'un texte dont la particularité est que si deux éléments de texte sont sémantiquement similaires, leurs représentations vectorielles continues respectives seront proches dans l'espace de représentation vectorielle continue.

Modèles NNLM, SWIVEL et BERT

La taille, la précision, l'évolutivité et les coûts des modèles NNLM, SWIVEL et BERT sont différents. Utilisez le tableau suivant pour déterminer quel modèle utiliser :

Modèle Taille du modèle Dimension de représentation vectorielle continue Cas d'utilisation Description
NNLM < 150 Mo 50 Phrases courtes, actualités, tweets, avis Modèle de langage de réseau de neurones
SWIVEL < 150 Mo 20 Phrases courtes, actualités, tweets, avis Algorithme de représentation vectorielle continue au niveau de la matrice
BERT ~ 200 Mo 768 Phrases courtes, actualités, tweets, avis, paragraphes courts Représentations d'encodage bidirectionnel à partir de transformateurs

Dans ce tutoriel, les modèles NNLM et SWIVEL sont des modèles TensorFlow importés, et le modèle BERT est un modèle distant sur Vertex AI.

Autorisations requises

  • Pour créer l'ensemble de données, vous devez disposer de l'autorisation Identity and Access Management (IAM) bigquery.datasets.create.

  • Pour créer le bucket, vous devez disposer de l'autorisation IAM storage.buckets.create.

  • Pour importer le modèle dans Cloud Storage, vous devez disposer des autorisations IAM storage.objects.create et storage.objects.get.

  • Pour créer la ressource de connexion, vous devez disposer des autorisations IAM suivantes :

    • bigquery.connections.create
    • bigquery.connections.get
  • Pour charger le modèle dans BigQuery ML, vous devez disposer des autorisations IAM suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Pour exécuter une inférence, vous devez disposer des autorisations IAM suivantes :

    • bigquery.tables.getData sur la table d'objets
    • bigquery.models.getData sur le modèle
    • bigquery.jobs.create

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • BigQuery : des frais sont facturés pour les requêtes que vous exécutez dans BigQuery.
  • BigQuery ML : des frais sont facturés pour le modèle que vous créez et l'inférence que vous effectuez dans BigQuery ML.
  • Cloud Storage : des frais sont facturés pour les objets que vous stockez dans Cloud Storage.
  • Vertex AI : si vous suivez les instructions de génération du modèle BERT, le déploiement du modèle sur un point de terminaison vous est facturé.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Pour en savoir plus, consultez les ressources suivantes :

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API BigQuery, BigQuery Connection, and Vertex AI.

    Activer les API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activer les API BigQuery, BigQuery Connection, and Vertex AI.

    Activer les API

Créer un ensemble de données

Pour créer un ensemble de données nommé tf_models_tutorial afin de stocker les modèles que vous créez, sélectionnez l'une des options suivantes :

SQL

Utilisez l'instruction CREATE SCHEMA :

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

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
    

    Remplacez PROJECT_ID par l'ID du projet.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

bq

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

  2. Pour créer l'ensemble de données, exécutez la commande bq mk :

    bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial
    

    Remplacez PROJECT_ID par l'ID du projet.

Générer et importer un modèle dans Cloud Storage

Pour obtenir des instructions plus détaillées sur la génération de représentations vectorielles continues de texte à l'aide de modèles TensorFlow pré-entraînés, consultez le notebook Colab. Sinon, sélectionnez l'un des modèles suivants :

NNLM

  1. Installez la bibliothèque bigquery-ml-utils à l'aide de pip :

    pip install bigquery-ml-utils
    
  2. Générez un modèle NNLM. Le code Python suivant charge un modèle NNLM à partir de TensorFlow Hub et le prépare pour BigQuery :

    from bigquery_ml_utils import model_generator
    
    # Establish an instance of TextEmbeddingModelGenerator.
    text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator()
    
    # Generate an NNLM model.
    text_embedding_model_generator.generate_text_embedding_model('nnlm', OUTPUT_MODEL_PATH)
    

    Remplacez OUTPUT_MODEL_PATH par un chemin d'accès à un dossier local dans lequel vous pouvez stocker temporairement le modèle.

  3. Facultatif : imprimez la signature du modèle généré :

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. Pour copier le modèle généré à partir de votre dossier local dans un bucket Cloud Storage, utilisez l'outil gsutil :

    gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model
    

    Remplacez BUCKET_PATH par le nom du bucket Cloud Storage dans lequel vous copiez le modèle.

SWIVEL

  1. Installez la bibliothèque bigquery-ml-utils à l'aide de pip :

    pip install bigquery-ml-utils
    
  2. Générez un modèle SWIVEL. Le code Python suivant charge un modèle SWIVEL à partir de TensorFlow Hub et le prépare pour BigQuery :

    from bigquery_ml_utils import model_generator
    
    # Establish an instance of TextEmbeddingModelGenerator.
    text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator()
    
    # Generate a SWIVEL model.
    text_embedding_model_generator.generate_text_embedding_model('swivel', OUTPUT_MODEL_PATH)
    

    Remplacez OUTPUT_MODEL_PATH par un chemin d'accès à un dossier local dans lequel vous pouvez stocker temporairement le modèle.

  3. Facultatif : imprimez la signature du modèle généré :

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. Pour copier le modèle généré à partir de votre dossier local dans un bucket Cloud Storage, utilisez l'outil gsutil :

    gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model
    

    Remplacez BUCKET_PATH par le nom du bucket Cloud Storage dans lequel vous copiez le modèle.

BERT

  1. Installez la bibliothèque bigquery-ml-utils à l'aide de pip :

    pip install bigquery-ml-utils
    
  2. Générez un modèle BERT. Le code Python suivant charge un modèle BERT à partir de TensorFlow Hub et le prépare pour BigQuery :

    from bigquery_ml_utils import model_generator
    
    # Establish an instance of TextEmbeddingModelGenerator.
    text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator()
    
    # Generate a BERT model.
    text_embedding_model_generator.generate_text_embedding_model('bert', OUTPUT_MODEL_PATH)
    

    Remplacez OUTPUT_MODEL_PATH par un chemin d'accès à un dossier local dans lequel vous pouvez stocker temporairement le modèle.

  3. Facultatif : imprimez la signature du modèle généré :

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. Pour copier le modèle généré à partir de votre dossier local dans un bucket Cloud Storage, utilisez l'outil gsutil :

    gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model
    

    Remplacez BUCKET_PATH par le nom du bucket Cloud Storage dans lequel vous copiez le modèle.

Charger le modèle dans BigQuery

Sélectionnez l'un des modèles suivants :

NNLM

Utilisez l'instruction CREATE MODEL :

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

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE OR REPLACE MODEL tf_models_tutorial.nnlm_model
    OPTIONS (
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/nnlm_model/*');
    

    Remplacez BUCKET_NAME par le nom du bucket que vous avez créé précédemment.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez la page Exécuter une requête interactive.

SWIVEL

Utilisez l'instruction CREATE MODEL :

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

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE OR REPLACE MODEL tf_models_tutorial.swivel_model
    OPTIONS (
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/swivel_model/*');
    

    Remplacez BUCKET_NAME par le nom du bucket que vous avez créé précédemment.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez la page Exécuter une requête interactive.

BERT

Pour charger le modèle BERT dans BigQuery, importez le modèle BERT dans Vertex AI, déployez-le sur un point de terminaison Vertex AI, créez une connexion, puis créez un modèle distant dans BigQuery.

Pour importer le modèle BERT dans Vertex AI, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Registre de modèles de Vertex AI.

    Accéder à la page "Registre de modèles"

  2. Cliquez sur Importer, puis procédez comme suit :

    • Dans le champ Nom, saisissez BERT.
    • Dans le champ Région, sélectionnez une région correspondant à la région de votre bucket Cloud Storage.
  3. Cliquez sur Continuer, puis procédez comme suit :

    • Dans la liste déroulante Version de framework du modèle, sélectionnez 2.8.
    • Pour Emplacement de l'artefact de modèle, saisissez le chemin d'accès au bucket Cloud Storage dans lequel vous avez stocké le fichier de modèle. Exemple : gs://BUCKET_PATH/bert_model.
  4. Cliquez sur Importer. Une fois l'importation terminée, votre modèle s'affiche sur la page Registre de modèles.

Pour déployer le modèle BERT sur un point de terminaison Vertex AI et le connecter à BigQuery, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Registre de modèles de Vertex AI.

    Accéder à la page "Registre de modèles"

  2. Cliquez sur le nom de votre modèle.

  3. Cliquez sur Déployer et tester.

  4. Cliquez sur Déployer sur un point de terminaison.

  5. Dans le champ Nom du point de terminaison, saisissez bert_model_endpoint.

  6. Cliquez sur Continuer.

  7. Sélectionnez vos ressources de calcul.

  8. Cliquez sur Déployer.

  9. Créez une connexion de ressource Cloud BigQuery et accordez l'accès au compte de service de la connexion.

Pour créer un modèle distant basé sur le point de terminaison Vertex AI, utilisez l'instruction CREATE MODEL :

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

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE OR REPLACE MODEL tf_models_tutorial.bert_model
    INPUT(content STRING)
    OUTPUT(embedding ARRAY<FLOAT64>)
    REMOTE WITH CONNECTION `PROJECT_ID.CONNECTION_LOCATION.CONNECTION_ID`
    OPTIONS (
      ENDPOINT = "https://ENDPOINT_LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/ENDPOINT_LOCATION/endpoints/ENDPOINT_ID");
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet
    • CONNECTION_LOCATION : emplacement de votre connexion BigQuery
    • CONNECTION_ID : ID de votre connexion BigQuery.

      Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de 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_LOCATION : emplacement de votre point de terminaison Vertex AI Exemple: "us-central1".
    • ENDPOINT_ID : ID du point de terminaison de votre modèle

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez la page Exécuter une requête interactive.

Générer des représentations vectorielles continues de texte

Dans cette section, vous utilisez la fonction d'inférence ML.PREDICT() pour générer des représentations vectorielles continues de texte de la colonne review dans l'ensemble de données public bigquery-public-data.imdb.reviews. La requête limite la table à 500 lignes afin de réduire la quantité de données traitées.

NNLM

SELECT
  *
FROM
  ML.PREDICT(
    MODEL `tf_models_tutorial.nnlm_model`,
    (
    SELECT
      review AS content
    FROM
      `bigquery-public-data.imdb.reviews`
    LIMIT
      500)
  );

Le résultat ressemble à ce qui suit :

+-----------------------+----------------------------------------+
| embedding             | content                                |
+-----------------------+----------------------------------------+
|  0.08599445223808289  | Isabelle Huppert must be one of the... |
| -0.04862852394580841  |                                        |
| -0.017750458791851997 |                                        |
|  0.8658871650695801   |                                        |
| ...                   |                                        |
+-----------------------+----------------------------------------+

SWIVEL

SELECT
  *
FROM
  ML.PREDICT(
    MODEL `tf_models_tutorial.swivel_model`,
    (
    SELECT
      review AS content
    FROM
      `bigquery-public-data.imdb.reviews`
    LIMIT
      500)
  );

Le résultat ressemble à ce qui suit :

+----------------------+----------------------------------------+
| embedding            | content                                |
+----------------------+----------------------------------------+
|  2.5952553749084473  | Isabelle Huppert must be one of the... |
| -4.015787601470947   |                                        |
|  3.6275434494018555  |                                        |
| -6.045154333114624   |                                        |
| ...                  |                                        |
+----------------------+----------------------------------------+

BERT

SELECT
  *
FROM
  ML.PREDICT(
    MODEL `tf_models_tutorial.bert_model`,
    (
    SELECT
      review AS content
    FROM
      `bigquery-public-data.imdb.reviews`
    LIMIT
      500)
  );

Le résultat ressemble à ce qui suit :

+--------------+---------------------+----------------------------------------+
| embedding    | remote_model_status | content                                |
+--------------+---------------------+----------------------------------------+
| -0.694072425 | null                | Isabelle Huppert must be one of the... |
|  0.439208865 |                     |                                        |
|  0.99988997  |                     |                                        |
| -0.993487895 |                     |                                        |
| ...          |                     |                                        |
+--------------+---------------------+----------------------------------------+

Effectuer un nettoyage

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.