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, precisión, 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, tuits, opiniones Neural Network Language Model
SWIVEL <150MB 20 Frases cortas, noticias, tuits, opiniones Submatrix-wise Vector Embedding Learner
BERT ~200MB 768 Frases cortas, noticias, tuits, opiniones y 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 storage.buckets.create de IAM.

  • 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: se generan costos por las consultas que ejecutas en BigQuery.
  • BigQuery ML: se generan costos por el modelo que creas y la inferencia que realizas en BigQuery ML.
  • Cloud Storage: se generan costos por los objetos que almacenas en Cloud Storage.
  • Vertex AI: Si sigues las instrucciones para generar el modelo BERT, se generan costos por implementar el modelo en un extremo.

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. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de BigQuery, BigQuery Connection, and Vertex AI.

    Habilita las API

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

    Go to project selector

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita las API de BigQuery, BigQuery Connection, and Vertex AI.

    Habilita las API

Crea un conjunto de datos

Si deseas crear un conjunto de datos llamado tf_models_tutorial para 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 comando bq mk:

    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 entrenados previamente, consulta el notebook de Colab. De lo contrario, selecciona uno de los siguientes modelos:

NNLM

  1. Instala la biblioteca bigquery-ml-utils con pip:

    pip install bigquery-ml-utils
    
  2. Genera un modelo 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 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 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 biblioteca bigquery-ml-utils 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 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 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 biblioteca bigquery-ml-utils con pip:

    pip install bigquery-ml-utils
    
  2. Genera 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 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 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 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 de acceso al 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: Es la ubicación de tu extremo de 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, debes usar la función de inferencia ML.PREDICT() 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. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.