Incorpora texto con modelos de TensorFlow previamente entrenados
En este instructivo, se muestra cómo generar incorporaciones de texto NNLM, SWIVEL y BERT en BigQuery mediante modelos de TensorFlow previamente entrenados. Una incorporación de texto es una representación vectorial densa de un fragmento de texto, de modo que si dos fragmentos de texto son semánticamente similares, sus incorporaciones respectivas están cerca en el espacio del vector de incorporación.
Los modelos NNLM, SWIVEL y BERT
Los modelos NNLM, SWIVEL y BERT varían en tamaño, exactitud, escalabilidad y costo. Usa la siguiente tabla para determinar qué modelo usar:
Modelo | Tamaño del modelo | Dimensión de embedding | Caso de uso | Descripción |
---|---|---|---|---|
NNLM | <150MB | 50 | Frases cortas, noticias, tweets y opiniones | Neural Network Language Model |
SWIVEL | <150MB | 20 | Frases cortas, noticias, tweets y opiniones | Submatrix-wise Vector Embedding Learner |
BERT | ~200MB | 768 | Frases cortas, noticias, tweets, opiniones, párrafos cortos | Bidirectional Encoder Representations from Transformers |
En este instructivo, los modelos NNLM y SWIVEL son modelos importados de TensorFlow y el modelo BERT es un modelo remoto en Vertex AI.
Permisos necesarios
Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de Identity and Access Management (IAM).Para crear el bucket, necesitas el permiso de IAM
storage.buckets.create
.Para subir el modelo a Cloud Storage, necesitas los permisos de IAM
storage.objects.create
ystorage.objects.get
.Para crear el recurso de conexión, necesitas los siguientes permisos de IAM:
bigquery.connections.create
bigquery.connections.get
Para cargar el modelo en BigQuery ML, necesitas los siguientes permisos de IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para ejecutar inferencias, necesitas los siguientes permisos de IAM:
bigquery.tables.getData
en la tabla de objetosbigquery.models.getData
en el modelobigquery.jobs.create
Costos
En este documento, usarás 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 costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información, consulta los siguientes recursos:
Antes de comenzar
- 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.
-
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.
Crea un conjunto de datos
Para crear un conjunto de datos llamado tf_models_tutorial
y almacenar los modelos que creas, selecciona una de las siguientes opciones:
SQL
Usa la sentencia CREATE SCHEMA
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ingresa la siguiente sentencia:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
Reemplaza
PROJECT_ID
con el ID del proyecto.Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
bq
En la consola de Google Cloud, activa Cloud Shell.
Para crear el conjunto de datos, ejecuta el
bq mk
comando:bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial
Reemplaza
PROJECT_ID
con el ID del proyecto.
Genera y sube un modelo a Cloud Storage
Para obtener instrucciones más detalladas sobre cómo generar incorporaciones de texto con modelos de TensorFlow previamente entrenados, consulta el notebook de Colab. De lo contrario, selecciona uno de los siguientes modelos:
NNLM
Instala la
bigquery-ml-utils
biblioteca con pip:pip install bigquery-ml-utils
Genera un modelo de NNLM. El siguiente código de Python carga un modelo NNLM desde TensorFlow Hub y lo prepara para 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)
Reemplaza
OUTPUT_MODEL_PATH
por una ruta de acceso a una carpeta local en la que puedas almacenar el modelo de forma temporal.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 bucket de Cloud Storage, usa Google Cloud CLI:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
Reemplaza
BUCKET_PATH
por el nombre del bucket de Cloud Storage en el que copias el modelo.
SWIVEL
Instala la
bigquery-ml-utils
biblioteca con pip:pip install bigquery-ml-utils
Genera un modelo SWIVEL. El siguiente código de Python carga un modelo SWIVEL desde TensorFlow Hub y lo prepara para 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)
Reemplaza
OUTPUT_MODEL_PATH
por una ruta de acceso a una carpeta local en la que puedas almacenar el modelo de forma temporal.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 bucket de Cloud Storage, usa Google Cloud CLI:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
Reemplaza
BUCKET_PATH
por el nombre del bucket de Cloud Storage en el que copias el modelo.
BERT
Instala la
bigquery-ml-utils
biblioteca con pip:pip install bigquery-ml-utils
Generar un modelo BERT. El siguiente código de Python carga un modelo BERT desde TensorFlow Hub y lo prepara para 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)
Reemplaza
OUTPUT_MODEL_PATH
por una ruta de acceso a una carpeta local en la que puedas almacenar el modelo de forma temporal.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 bucket de Cloud Storage, usa Google Cloud CLI:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursive
Reemplaza
BUCKET_PATH
por el nombre del bucket de Cloud Storage en el que copias el modelo.
Carga el modelo en BigQuery
Selecciona uno de los siguientes modelos:
NNLM
Usa la sentencia CREATE MODEL
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ingresa la siguiente sentencia:
CREATE OR REPLACE MODEL
tf_models_tutorial.nnlm_model
OPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/nnlm_model/*');Reemplaza
BUCKET_NAME
por el nombre del bucket que creaste previamente.Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
SWIVEL
Usa la sentencia CREATE MODEL
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ingresa la siguiente sentencia:
CREATE OR REPLACE MODEL
tf_models_tutorial.swivel_model
OPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/swivel_model/*');Reemplaza
BUCKET_NAME
por el nombre del bucket que creaste previamente.Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
BERT
Para cargar el modelo BERT en BigQuery, importa el modelo BERT a Vertex AI, implementa el modelo en un extremo de Vertex AI, crea una conexión y, luego, crea un modelo remoto en BigQuery.
Para importar el modelo de BERT a Vertex AI, sigue estos pasos:
En la consola de Google Cloud, ve a la página Model Registry de Vertex AI.
Haz clic en Importar y, luego, haz lo siguiente:
- En Nombre, ingresa
BERT
. - En Región, selecciona una región que coincida con la región del bucket de Cloud Storage.
- En Nombre, ingresa
Haz clic en Continuar y, luego, haz lo siguiente:
- En Versión del framework del modelo, selecciona
2.8
. - En Ubicación del artefacto del modelo, ingresa la ruta del bucket de Cloud Storage en el que almacenaste 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 complete la importación, tu modelo aparecerá en la página Model Registry.
Para implementar el modelo BERT en un extremo de Vertex AI y conectarlo a BigQuery, sigue estos pasos:
En la consola de Google Cloud, ve a la página Model Registry de Vertex AI.
Haz clic en el nombre de tu modelo.
Haz clic en Implementar y probar.
Haz clic en Implementar en el extremo.
En Nombre del extremo, ingresa
bert_model_endpoint
.Haz clic en Continuar.
Selecciona tus recursos de procesamiento.
Haz clic en Implementar.
Crea una conexión de recursos de Cloud de BigQuery y otorga acceso a la cuenta de servicio de la conexión.
Para crear un modelo remoto basado en el extremo de Vertex AI, usa la sentencia CREATE MODEL
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oració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");Reemplaza lo siguiente:
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 ves los detalles de conexión en la consola de Google Cloud, este es el valor en la última sección del ID de conexión completamente calificado que se muestra en Conexión ID, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT_LOCATION
: ubicación del extremo de tu Vertex AI. Por ejemplo: “us-central1”.ENDPOINT_ID
: es el ID del extremo del modelo
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
Generar incorporaciones de texto
En esta sección, usarás la
ML.PREDICT()
función de inferencia
para generar incorporaciones de texto de la columna review
a partir del conjunto de datos públicos
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 | | | | ... | | | +--------------+---------------------+----------------------------------------+
Limpia
- 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.