Incorpora il testo con i modelli TensorFlow preaddestrati

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

I modelli NNLM, SWIVEL e BERT

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

Modello Dimensione modello Dimensione di incorporamento Caso d'uso Descrizione
NPN <150MB 50 Frasi brevi, notizie, tweet, recensioni Modello linguistico della rete neurale
GIRA <150MB 20 Frasi brevi, notizie, tweet, recensioni Studente di formazione sull'incorporamento di vettori a livello di sottomatrici
BERT ~200MB 768 Frasi brevi, notizie, tweet, recensioni, brevi paragrafi Rappresentazioni dell'encoder bidirezionale dai trasformatori

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

Autorizzazioni obbligatorie

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

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

  • Per caricare il modello in 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 dell'oggetto
    • bigquery.models.getData sul modello
    • bigquery.jobs.create

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • BigQuery: ti vengono addebitati dei costi per le query eseguite in BigQuery.
  • BigQuery ML: ti vengono addebitati dei costi per il modello creato e per l'inferenza che esegui in BigQuery ML.
  • Cloud Storage: ti vengono addebitati dei costi per gli oggetti archiviati in Cloud Storage.
  • Vertex AI: se segui le istruzioni per generare il modello BERT, ti vengono addebitati dei costi per il deployment del modello in un endpoint.

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Per maggiori informazioni, consulta le seguenti risorse:

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API BigQuery, BigQuery Connection, and Vertex AI.

    Abilita le API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API BigQuery, BigQuery Connection, and Vertex AI.

    Abilita le API

crea un set di dati

Per creare un set di dati denominato tf_models_tutorial in cui 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 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 ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attivare 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 blocco note di Colab. Altrimenti, seleziona uno dei seguenti modelli:

NNLM

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

    pip install bigquery-ml-utils
    
  2. Generare 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 il percorso di 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 tua cartella locale in un bucket Cloud Storage, utilizza lo strumento gsutil:

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

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

GIREVOLE

  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 il percorso di 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 tua cartella locale in un bucket Cloud Storage, utilizza lo strumento gsutil:

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

    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. Generare 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 il percorso di 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 tua cartella locale in un bucket Cloud Storage, utilizza lo strumento gsutil:

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

    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 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 ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

GIREVOLE

Utilizza l'istruzione CREATE MODEL:

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

    Vai a BigQuery

  2. Nell'Editor 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 ulteriori 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 su 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 segui questi passaggi:

    • In Nome, inserisci BERT.
    • In Regione, seleziona una regione che corrisponda a quella del bucket Cloud Storage.
  3. Fai clic su Continua ed esegui le seguenti operazioni:

    • In Versione framework del modello, seleziona 2.8.
    • In Posizione artefatto del modello, inserisci il percorso del bucket Cloud Storage in cui hai archiviato 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, segui questi passaggi:

  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 Deployment su endpoint.

  5. In Nome endpoint, inserisci bert_model_endpoint.

  6. Fai clic su Continua.

  7. Seleziona le risorse di computing.

  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 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 località della tua connessione BigQuery
    • CONNECTION_ID: l'ID della tua connessione BigQuery

      Quando vengono visualizzati i dettagli della connessione nella console Google Cloud, si tratta del valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempio projects/myproject/locations/connection_location/connections/myconnection

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

  3. Fai clic su Esegui.

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

Genera incorporamenti di testo

In questa sezione utilizzerai 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   |                                        |
| ...                   |                                        |
+-----------------------+----------------------------------------+

GIREVOLE

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. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.