Incorporare testo con modelli TensorFlow preaddestrati

Questo tutorial mostra come generare incorporamenti di testo NNLM, SWIVEL e BERT in BigQuery utilizzando modelli TensorFlow preaddestrati. Un embedding di testo è una rappresentazione vettoriale densa di un testo tale che se due testi sono semanticamente simili, i rispettivi embedding sono vicini nello spazio vettoriale di embedding.

I modelli NNLM, SWIVEL e BERT

I modelli NNLM, SWIVEL e BERT variano in termini di dimensioni, precisione, scalabilità e costi. Utilizza la seguente tabella per determinare quale modello utilizzare:

Modello Dimensione modello Dimensione di embedding Caso d'uso Descrizione
NNLM <150MB 50 Frasi brevi, notizie, tweet, recensioni Modello linguistico basato su rete neurale
SWIVEL <150MB 20 Frasi brevi, notizie, tweet, recensioni Submatrix-wise Vector Embedding Learner
BERT ~200MB 768 Frasi brevi, notizie, tweet, recensioni, brevi paragrafi Bidirectional Encoder Representations from Transformers

In questo tutorial, i modelli NNLM e SWIVEL sono modelli TensorFlow importati, mentre il modello BERT è un modello remoto su Vertex AI.

Autorizzazioni obbligatorie

  • Per creare il set di dati, devi disporre dell'autorizzazione Identity and Access Management (IAM) bigquery.datasets.create.

  • Per creare il bucket, devi disporre dell'autorizzazione IAM storage.buckets.create.

  • Per caricare il modello su Cloud Storage, devi disporre delle autorizzazioni IAM storage.objects.create e storage.objects.get.

  • Per creare la risorsa di connessione, devi disporre delle seguenti autorizzazioni IAM:

    • bigquery.connections.create
    • bigquery.connections.get
  • Per caricare il modello in BigQuery ML, devi disporre delle seguenti autorizzazioni IAM:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni IAM:

    • bigquery.tables.getData nella tabella degli oggetti
    • bigquery.models.getData sul modello
    • bigquery.jobs.create

Costi

In questo documento, utilizzi i seguenti componenti fatturabili di 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.

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero avere diritto a una prova gratuita.

Per maggiori informazioni, consulta le seguenti risorse:

Prima di iniziare

  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

  8. Crea un set di dati

    Per creare un set di dati denominato tf_models_tutorial per archiviare i modelli che crei, seleziona una delle seguenti opzioni:

    SQL

    Utilizza l'istruzione CREATE SCHEMA:

    1. Nella console Google Cloud , vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nell'editor di query, inserisci la seguente istruzione:

      CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;

      Sostituisci PROJECT_ID con l'ID progetto.

    3. Fai clic su Esegui.

    Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

    bq

    1. Nella console Google Cloud , attiva Cloud Shell.

      Attiva Cloud Shell

    2. Per creare il set di dati, esegui il comando bq mk:

      bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial

      Sostituisci PROJECT_ID con l'ID progetto.

    Genera e carica un modello su Cloud Storage

    Per istruzioni più dettagliate sulla generazione di incorporamenti di testo utilizzando modelli TensorFlow preaddestrati, consulta il notebook Colab. In caso contrario, seleziona uno dei seguenti modelli:

    NNLM

    1. Installa la libreria bigquery-ml-utils utilizzando pip:

      pip install bigquery-ml-utils
      
    2. Genera un modello NNLM. Il seguente codice Python carica un modello NNLM da TensorFlow Hub e lo prepara per 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)
      

      Sostituisci OUTPUT_MODEL_PATH con un percorso a una cartella locale in cui puoi archiviare temporaneamente il modello.

    3. (Facoltativo) Stampa la firma del modello generato:

      import tensorflow as tf
      
      reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
      print(reload_embedding_model.signatures["serving_default"])
      
    4. Per copiare il modello generato dalla cartella locale a un bucket Cloud Storage, utilizza Google Cloud CLI:

      gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
      

      Sostituisci BUCKET_PATH con il nome del bucket Cloud Storage in cui stai copiando il modello.

    SWIVEL

    1. Installa la libreria bigquery-ml-utils utilizzando pip:

      pip install bigquery-ml-utils
      
    2. Genera un modello SWIVEL. Il seguente codice Python carica un modello SWIVEL da TensorFlow Hub e lo prepara per 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)
      

      Sostituisci OUTPUT_MODEL_PATH con un percorso a una cartella locale in cui puoi archiviare temporaneamente il modello.

    3. (Facoltativo) Stampa la firma del modello generato:

      import tensorflow as tf
      
      reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
      print(reload_embedding_model.signatures["serving_default"])
      
    4. Per copiare il modello generato dalla cartella locale a un bucket Cloud Storage, utilizza Google Cloud CLI:

      gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
      

      Sostituisci BUCKET_PATH con il nome del bucket Cloud Storage in cui stai copiando il modello.

    BERT

    1. Installa la libreria bigquery-ml-utils utilizzando pip:

      pip install bigquery-ml-utils
      
    2. Genera un modello BERT. Il seguente codice Python carica un modello BERT da TensorFlow Hub e lo prepara per 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)
      

      Sostituisci OUTPUT_MODEL_PATH con un percorso a una cartella locale in cui puoi archiviare temporaneamente il modello.

    3. (Facoltativo) Stampa la firma del modello generato:

      import tensorflow as tf
      
      reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
      print(reload_embedding_model.signatures["serving_default"])
      
    4. Per copiare il modello generato dalla cartella locale a un bucket Cloud Storage, utilizza Google Cloud CLI:

      gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursive
      

      Sostituisci BUCKET_PATH con il nome del bucket Cloud Storage in cui stai copiando il modello.

    Carica il modello in BigQuery

    Seleziona uno dei seguenti modelli:

    NNLM

    Utilizza l'istruzione CREATE MODEL:

    1. Nella console Google Cloud , vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nell'editor di query, inserisci la seguente istruzione:

      CREATE OR REPLACE MODEL tf_models_tutorial.nnlm_model
      OPTIONS (
        model_type = 'TENSORFLOW',
        model_path = 'gs://BUCKET_NAME/nnlm_model/*');

      Sostituisci BUCKET_NAME con il nome del bucket che hai creato in precedenza.

    3. Fai clic su Esegui.

    Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

    SWIVEL

    Utilizza l'istruzione CREATE MODEL:

    1. Nella console Google Cloud , vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nell'editor di query, inserisci la seguente istruzione:

      CREATE OR REPLACE MODEL tf_models_tutorial.swivel_model
      OPTIONS (
        model_type = 'TENSORFLOW',
        model_path = 'gs://BUCKET_NAME/swivel_model/*');

      Sostituisci BUCKET_NAME con il nome del bucket che hai creato in precedenza.

    3. Fai clic su Esegui.

    Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

    BERT

    Per caricare il modello BERT in BigQuery, importa il modello BERT in Vertex AI, esegui il deployment del modello in un endpoint Vertex AI, crea una connessione e poi crea un modello remoto in BigQuery.

    Per importare il modello BERT in Vertex AI:

    1. Nella console Google Cloud , vai alla pagina Model Registry di Vertex AI.

      Vai a Model Registry

    2. Fai clic su Importa e poi segui questi passaggi:

      • In Nome, inserisci BERT.
      • Per Regione, seleziona una regione che corrisponda a quella del bucket Cloud Storage.
    3. Fai clic su Continua, quindi procedi nel seguente modo:

      • In Versione framework modello, seleziona 2.8.
      • Per Posizione dell'artefatto del modello, inserisci il percorso del bucket Cloud Storage in cui hai memorizzato il file del modello. Ad esempio, gs://BUCKET_PATH/bert_model.
    4. Fai clic su Importa. Al termine dell'importazione, il modello viene visualizzato nella pagina Registro dei modelli.

    Per eseguire il deployment del modello BERT su un endpoint Vertex AI e connetterlo a BigQuery:

    1. Nella console Google Cloud , vai alla pagina Model Registry di Vertex AI.

      Vai a Model Registry

    2. Fai clic sul nome del modello.

    3. Fai clic su Deployment e test.

    4. Fai clic su Esegui il deployment su endpoint.

    5. In Nome endpoint, inserisci bert_model_endpoint.

    6. Fai clic su Continua.

    7. Seleziona le risorse di calcolo.

    8. Fai clic su Esegui il deployment.

    9. Crea una connessione alle risorse Cloud BigQuery e concedi l'accesso all'account di servizio della connessione.

    Per creare un modello remoto basato sull'endpoint Vertex AI, utilizza l'istruzione CREATE MODEL:

    1. Nella console Google Cloud , vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nell'editor di query, inserisci la seguente istruzione:

      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");

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto
      • CONNECTION_LOCATION: la posizione della tua connessione BigQuery
      • CONNECTION_ID: l'ID della tua connessione BigQuery

        Quando visualizzi i dettagli della connessione nella console Google Cloud , questo è il valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempio projects/myproject/locations/connection_location/connections/myconnection

      • ENDPOINT_LOCATION: la posizione dell'endpoint Vertex AI. Ad esempio: "us-central1".
      • ENDPOINT_ID: l'ID dell'endpoint del modello

    3. Fai clic su Esegui.

    Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

    Generare incorporamenti di testo

    In questa sezione utilizzi la funzione di inferenza ML.PREDICT() per generare incorporamenti di testo della colonna review dal set di dati pubblico bigquery-public-data.imdb.reviews. La query limita la tabella a 500 righe per ridurre la quantità di dati elaborati.

    NNLM

    SELECT
      *
    FROM
      ML.PREDICT(
        MODEL `tf_models_tutorial.nnlm_model`,
        (
        SELECT
          review AS content
        FROM
          `bigquery-public-data.imdb.reviews`
        LIMIT
          500)
      );

    Il risultato è simile al seguente:

    +-----------------------+----------------------------------------+
    | 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)
      );

    Il risultato è simile al seguente:

    +----------------------+----------------------------------------+
    | 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)
      );

    Il risultato è simile al seguente:

    +--------------+---------------------+----------------------------------------+
    | embedding    | remote_model_status | content                                |
    +--------------+---------------------+----------------------------------------+
    | -0.694072425 | null                | Isabelle Huppert must be one of the... |
    |  0.439208865 |                     |                                        |
    |  0.99988997  |                     |                                        |
    | -0.993487895 |                     |                                        |
    | ...          |                     |                                        |
    +--------------+---------------------+----------------------------------------+
    

    Esegui la pulizia

    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.