Insertar texto con modelos preentrenados de TensorFlow
En este tutorial se explica cómo generar insertos de texto de NNLM, SWIVEL y BERT en BigQuery mediante modelos de TensorFlow preentrenados. Una incrustación de texto es una representación vectorial densa de un fragmento de texto de forma que, si dos fragmentos de texto son semánticamente similares, sus respectivas incrustaciones están cerca en el espacio vectorial de incrustación.
Modelos NNLM, SWIVEL y BERT
Los modelos NNLM, SWIVEL y BERT varían en tamaño, precisión, escalabilidad y coste. Consulta la siguiente tabla para determinar qué modelo debes usar:
Modelo | Tamaño del modelo | Dimensión de inserción | Caso práctico | Descripción |
---|---|---|---|---|
NNLM | <150 MB | 50 | Frases cortas, noticias, tuits y reseñas | Modelo de lenguaje de red neuronal |
GIRAR | <150 MB | 20 | Frases cortas, noticias, tuits y reseñas | Aprendizaje de inserciones de vectores por submatrices |
BERT | ~200 MB | 17. | Frases cortas, noticias, tuits, reseñas y párrafos breves | Representaciones de codificador bidireccional de transformadores |
En este tutorial, los modelos NNLM y SWIVEL son modelos de TensorFlow importados, y el modelo BERT es un modelo remoto en Vertex AI.
Permisos obligatorios
Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de Gestión de Identidades y Accesos (IAM).Para crear el contenedor, necesitas el permiso
storage.buckets.create
IAM.Para subir el modelo a Cloud Storage, necesitas los permisos de gestión de identidades y accesos
storage.objects.create
ystorage.objects.get
.Para crear el recurso de conexión, necesitas los siguientes permisos de gestión de identidades y accesos:
bigquery.connections.create
bigquery.connections.get
Para cargar el modelo en BigQuery ML, necesitas los siguientes permisos de gestión de identidades y accesos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para ejecutar la inferencia, necesitas los siguientes permisos de gestión de identidades y accesos:
bigquery.tables.getData
en la tabla de objetosbigquery.models.getData
en el modelobigquery.jobs.create
Costes
En este documento, se utilizan los siguientes componentes facturables 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.
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Para obtener más información, consulta los siguientes recursos:
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
Sustituye
PROJECT_ID
por el ID del proyecto.Haz clic en
Ejecutar.En la Google Cloud consola, activa Cloud Shell.
Para crear el conjunto de datos, ejecuta el comando
bq mk
:bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial
Sustituye
PROJECT_ID
por el ID del proyecto.Instala la biblioteca
bigquery-ml-utils
con pip:pip install bigquery-ml-utils
Genera un modelo NNLM. El siguiente código de Python carga un modelo NNLM de TensorFlow Hub y lo prepara para BigQuery:
from bigquery_ml_utils import model_generator import tensorflow_text # 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)
Sustituye
OUTPUT_MODEL_PATH
por la ruta a una carpeta local donde puedas almacenar el modelo temporalmente.Opcional: Imprime la firma del modelo generado:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])
Para copiar el modelo generado de tu carpeta local a un segmento de Cloud Storage, usa la CLI de Google Cloud:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
Sustituye
BUCKET_PATH
por el nombre del segmento de Cloud Storage al que vas a copiar el modelo.Instala la biblioteca
bigquery-ml-utils
con pip:pip install bigquery-ml-utils
Genera un modelo SWIVEL. El siguiente código de Python carga un modelo SWIVEL de TensorFlow Hub y lo prepara para BigQuery:
from bigquery_ml_utils import model_generator import tensorflow_text # 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)
Sustituye
OUTPUT_MODEL_PATH
por la ruta a una carpeta local donde puedas almacenar el modelo temporalmente.Opcional: Imprime la firma del modelo generado:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])
Para copiar el modelo generado de tu carpeta local a un segmento de Cloud Storage, usa la CLI de Google Cloud:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
Sustituye
BUCKET_PATH
por el nombre del segmento de Cloud Storage al que vas a copiar el modelo.Instala la biblioteca
bigquery-ml-utils
con pip:pip install bigquery-ml-utils
Genera un modelo BERT. El siguiente código Python carga un modelo BERT de TensorFlow Hub y lo prepara para BigQuery:
from bigquery_ml_utils import model_generator import tensorflow_text # 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)
Sustituye
OUTPUT_MODEL_PATH
por la ruta a una carpeta local donde puedas almacenar el modelo temporalmente.Opcional: Imprime la firma del modelo generado:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])
Para copiar el modelo generado de tu carpeta local a un segmento de Cloud Storage, usa la CLI de Google Cloud:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursive
Sustituye
BUCKET_PATH
por el nombre del segmento de Cloud Storage al que vas a copiar el modelo.En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE OR REPLACE MODEL
tf_models_tutorial.nnlm_model
OPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/nnlm_model/*');Sustituye
BUCKET_NAME
por el nombre del bucket que has creado anteriormente.Haz clic en
Ejecutar.En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE OR REPLACE MODEL
tf_models_tutorial.swivel_model
OPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/swivel_model/*');Sustituye
BUCKET_NAME
por el nombre del bucket que has creado anteriormente.Haz clic en
Ejecutar.En la Google Cloud consola, ve a la página Registro de modelos de Vertex AI.
Haz clic en Importar y, a continuación, haz lo siguiente:
- En Nombre, escribe
BERT
. - En Región, selecciona una región que coincida con la de tu segmento de Cloud Storage.
- En Nombre, escribe
Haz clic en Continuar y, a continuación, haz lo siguiente:
- En Versión del framework del modelo, selecciona
2.8
. - En Ubicación del artefacto del modelo, introduce la ruta al segmento de Cloud Storage en el que has almacenado el archivo del modelo. Por ejemplo,
gs://BUCKET_PATH/bert_model
.
- En Versión del framework del modelo, selecciona
Haz clic en Importar. Una vez que se haya completado la importación, el modelo aparecerá en la página Registro de modelos.
En la Google Cloud consola, ve a la página Registro de modelos de Vertex AI.
Haz clic en el nombre del modelo.
Haz clic en Desplegar y probar.
Haz clic en Implementar en endpoint.
En Endpoint name (Nombre del endpoint), introduce
bert_model_endpoint
.Haz clic en Continuar.
Selecciona tus recursos de computación.
Haz clic en Desplegar.
Crea una conexión de recursos de Cloud de BigQuery y concede acceso a la cuenta de servicio de la conexión.
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
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");Haz los cambios siguientes:
PROJECT_ID
: el ID del proyectoCONNECTION_LOCATION
: la ubicación de tu conexión de BigQueryCONNECTION_ID
: el ID de tu conexión de BigQueryCuando consultas los detalles de la conexión en la consola de Google Cloud , este es el valor de la última sección del ID de conexión completo que se muestra en ID de conexión, por ejemplo:
projects/myproject/locations/connection_location/connections/myconnection
ENDPOINT_LOCATION
: la ubicación de tu endpoint de Vertex AI. Por ejemplo, "us-central1".ENDPOINT_ID
: el ID de tu modelo endpoint
Haz clic en
Ejecutar.- 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.
Crear conjunto de datos
Para crear un conjunto de datos llamado tf_models_tutorial
en el que se almacenarán los modelos que crees, selecciona una de las siguientes opciones:
SQL
Usa la instrucción CREATE SCHEMA
:
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
bq
Generar y subir un modelo a Cloud Storage
Para obtener instrucciones más detalladas sobre cómo generar inserciones de texto con modelos de TensorFlow preentrenados, consulta el cuaderno de Colab. De lo contrario, selecciona uno de los siguientes modelos:
NNLM
SWIVEL
BERT
Cargar el modelo en BigQuery
Selecciona uno de los siguientes modelos:
NNLM
Usa la instrucción CREATE MODEL
:
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
SWIVEL
Usa la instrucción CREATE MODEL
:
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
BERT
Para cargar el modelo BERT en BigQuery, importa el modelo BERT a Vertex AI, despliégalo en un endpoint de Vertex AI, crea una conexión y, a continuación, crea un modelo remoto en BigQuery.
Para importar el modelo BERT a Vertex AI, sigue estos pasos:
Para desplegar el modelo BERT en un endpoint de Vertex AI y conectarlo a BigQuery, sigue estos pasos:
Para crear un modelo remoto basado en el endpoint de Vertex AI, usa la instrucción CREATE MODEL
:
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
Generar embeddings de texto
En esta sección, usará la función de inferencia ML.PREDICT()
para generar las inserciones de texto de la columna review
del conjunto de datos público bigquery-public-data.imdb.reviews
. La consulta limita la tabla a 500 filas para reducir la cantidad de datos procesados.
NNLM
SELECT * FROM ML.PREDICT( MODEL `tf_models_tutorial.nnlm_model`, ( SELECT review AS content FROM `bigquery-public-data.imdb.reviews` LIMIT 500) );
El resultado es similar al siguiente:
+-----------------------+----------------------------------------+ | 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) );
El resultado es similar al siguiente:
+----------------------+----------------------------------------+ | 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) );
El resultado es similar al siguiente:
+--------------+---------------------+----------------------------------------+ | embedding | remote_model_status | content | +--------------+---------------------+----------------------------------------+ | -0.694072425 | null | Isabelle Huppert must be one of the... | | 0.439208865 | | | | 0.99988997 | | | | -0.993487895 | | | | ... | | | +--------------+---------------------+----------------------------------------+