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 embeddings textuels NNLM, SWIVEL et BERT dans BigQuery à l'aide de modèles TensorFlow pré-entraînés. Un embedding textuel est une représentation vectorielle dense d'un texte dont la particularité est que si deux textes sont sémantiquement similaires, leurs embeddings respectifs sont proches l'un de l'autre dans l'espace d'embedding.
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 d'embedding | 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 d'embeddings vectoriels 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: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the inference that you perform in BigQuery ML.
- Cloud Storage: You incur costs for the objects that you store in Cloud Storage.
- Vertex AI: If you follow the instructions for generating the BERT model, then you incur costs for deploying the model to an endpoint.
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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
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 d'embeddings textuels à 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 la Google Cloud CLI :
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
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 la Google Cloud CLI :
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
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 la Google Cloud CLI :
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursive
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 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 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 Exécuter une requête interactive.
Générer des embeddings textuels
Dans cette section, vous utilisez la fonction d'inférence ML.PREDICT()
pour générer des embeddings textuels 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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.