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

  • Para subir el modelo a Cloud Storage, necesitas los permisos de gestión de identidades y accesos storage.objects.create y storage.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 objetos
    • bigquery.models.getData en el modelo
    • bigquery.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.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

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

Antes de empezar

  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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

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

      Ir a BigQuery

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

    3. Haz clic en Ejecutar.

    Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

    bq

    1. En la Google Cloud consola, 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

      Sustituye PROJECT_ID por el ID del proyecto.

    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

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

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

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

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

    BERT

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

      pip install bigquery-ml-utils
      
    2. 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.

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

    Cargar el modelo en BigQuery

    Selecciona uno de los siguientes modelos:

    NNLM

    Usa la instrucción CREATE MODEL:

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

      Ir a BigQuery

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

    3. Haz clic en Ejecutar.

    Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

    SWIVEL

    Usa la instrucción CREATE MODEL:

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

      Ir a BigQuery

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

    3. Haz clic en Ejecutar.

    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:

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

      Ir al registro de modelos

    2. 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.
    3. 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.
    4. Haz clic en Importar. Una vez que se haya completado la importación, el modelo aparecerá en la página Registro de modelos.

    Para desplegar el modelo BERT en un endpoint de Vertex AI y conectarlo a BigQuery, sigue estos pasos:

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

      Ir al registro de modelos

    2. Haz clic en el nombre del modelo.

    3. Haz clic en Desplegar y probar.

    4. Haz clic en Implementar en endpoint.

    5. En Endpoint name (Nombre del endpoint), introduce bert_model_endpoint.

    6. Haz clic en Continuar.

    7. Selecciona tus recursos de computación.

    8. Haz clic en Desplegar.

    9. Crea una conexión de recursos de Cloud de BigQuery y concede acceso a la cuenta de servicio de la conexión.

    Para crear un modelo remoto basado en el endpoint de Vertex AI, usa la instrucción CREATE MODEL:

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

      Ir a BigQuery

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

        Cuando 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

    3. Haz clic en Ejecutar.

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

    Limpieza

    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.