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 incorporación 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 y storage.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 objetos
    • bigquery.models.getData en el modelo
    • bigquery.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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Para obtener más información, consulta los siguientes recursos:

Antes de comenzar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the 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:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente sentencia:

    CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
    

    Reemplaza PROJECT_ID con el ID del proyecto.

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

  2. Para crear el conjunto de datos, ejecuta el bq mkcomando:

    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

  1. Instala la bigquery-ml-utilsbiblioteca con pip:

    pip install bigquery-ml-utils
    
  2. 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 puedes almacenar el modelo de forma temporal.

  3. 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"])
    
  4. Para copiar el modelo generado de tu carpeta local a un bucket de Cloud Storage, usa la herramienta de gsutil:

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

    Reemplaza BUCKET_PATH por el nombre del bucket de Cloud Storage en el que copias el modelo.

SWIVEL

  1. Instala la bigquery-ml-utilsbiblioteca con pip:

    pip install bigquery-ml-utils
    
  2. 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 puedes almacenar el modelo de forma temporal.

  3. 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"])
    
  4. Para copiar el modelo generado de tu carpeta local a un bucket de Cloud Storage, usa la herramienta de gsutil:

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

    Reemplaza BUCKET_PATH por el nombre del bucket de Cloud Storage en el que copias el modelo.

BERT

  1. Instala la bigquery-ml-utilsbiblioteca con pip:

    pip install bigquery-ml-utils
    
  2. 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 puedes almacenar el modelo de forma temporal.

  3. 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"])
    
  4. Para copiar el modelo generado de tu carpeta local a un bucket de Cloud Storage, usa la herramienta de gsutil:

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

    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:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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.

  3. 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:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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.

  3. 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:

  1. En la consola de Google Cloud, ve a la página Model Registry de Vertex AI.

    Ir a Model Registry

  2. 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.
  3. 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.
  4. Haga clic en Import. 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:

  1. En la consola de Google Cloud, ve a la página Model Registry de Vertex AI.

    Ir a Model Registry

  2. Haz clic en el nombre de tu modelo.

  3. Haz clic en Implementar y probar.

  4. Haz clic en Implementar en el extremo.

  5. En Nombre del extremo, ingresa bert_model_endpoint.

  6. Haz clic en Continuar.

  7. Selecciona tus recursos de procesamiento.

  8. Haz clic en Implementar.

  9. 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:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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 proyecto
    • CONNECTION_LOCATION: la ubicación de tu conexión de BigQuery
    • CONNECTION_ID el ID de tu conexión de BigQuery

      Cuando 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

  3. 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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.