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
etstorage.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'objetsbigquery.models.getData
sur le modèlebigquery.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.
Pour en savoir plus, consultez les ressources suivantes :
Avant de commencer
- 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.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API BigQuery, BigQuery Connection, and Vertex AI.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API BigQuery, BigQuery Connection, and Vertex AI.
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
:
Dans la console Google Cloud, accédez à la page BigQuery.
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.Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
bq
Dans la console Google Cloud, activez Cloud Shell.
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
Installez la bibliothèque
bigquery-ml-utils
à l'aide de pip :pip install bigquery-ml-utils
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.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"])
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
Installez la bibliothèque
bigquery-ml-utils
à l'aide de pip :pip install bigquery-ml-utils
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.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"])
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
Installez la bibliothèque
bigquery-ml-utils
à l'aide de pip :pip install bigquery-ml-utils
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.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"])
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
:
Dans la console Google Cloud, accédez à la page BigQuery.
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.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
:
Dans la console Google Cloud, accédez à la page BigQuery.
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.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 :
Dans la console Google Cloud, accédez à la page Registre de modèles de Vertex AI.
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.
- Dans le champ Nom, saisissez
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
.
- Dans la liste déroulante Version de framework du modèle, sélectionnez
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 :
Dans la console Google Cloud, accédez à la page Registre de modèles de Vertex AI.
Cliquez sur le nom de votre modèle.
Cliquez sur Déployer et tester.
Cliquez sur Déployer sur un point de terminaison.
Dans le champ Nom du point de terminaison, saisissez
bert_model_endpoint
.Cliquez sur Continuer.
Sélectionnez vos ressources de calcul.
Cliquez sur Déployer.
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
:
Dans la console Google Cloud, accédez à la page BigQuery.
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 projetCONNECTION_LOCATION
: emplacement de votre connexion BigQueryCONNECTION_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
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
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.