Incorporare il testo con modelli TensorFlow preaddestrati
Questo tutorial mostra come generare embedding di testo NNLM, SWIVEL e BERT in BigQuery utilizzando modelli TensorFlow preaddestrati. Un embedding di testo è una rappresentazione vettoriale densa di un testo, in modo che se due testi sono semanticamente simili, i rispettivi embedding sono vicini nello spazio vettoriale dell'embedding.
Modelli NNLM, SWIVEL e BERT
I modelli NNLM, SWIVEL e BERT variano in termini di dimensioni, accuratezza, scalabilità e costo. Utilizza la tabella seguente 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 di rete neurale |
SWIVEL | <150MB | 20 | Frasi brevi, notizie, tweet, recensioni | Apprendimento di embedding vettoriali per sottomatrici |
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
bigquery.datasets.create
Identity and Access Management (IAM).Per creare il bucket, devi disporre dell'
storage.buckets.create
autorizzazione IAM.Per caricare il modello in Cloud Storage, devi disporre delle autorizzazioni IAM
storage.objects.create
estorage.objects.get
.Per creare la risorsa di connessione, sono necessarie le seguenti autorizzazioni IAM:
bigquery.connections.create
bigquery.connections.get
Per caricare il modello in BigQuery ML, sono necessarie le 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 oggettibigquery.models.getData
sul modellobigquery.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.
Per maggiori informazioni, consulta le seguenti risorse:
Prima di iniziare
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
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
:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, inserisci la seguente istruzione:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
Sostituisci
PROJECT_ID
con l'ID progetto.Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.
bq
Nella console Google Cloud, attiva Cloud Shell.
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.
Generare e caricare un modello su Cloud Storage
Per istruzioni più dettagliate sulla generazione di embedding di testo utilizzando modelli di TensorFlow preaddestrati, consulta il blocco note di Colab. In caso contrario, seleziona uno dei seguenti modelli:
NNLM
Installa la libreria
bigquery-ml-utils
utilizzando pip:pip install bigquery-ml-utils
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 il percorso di una cartella locale in cui puoi memorizzare temporaneamente il modello.(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"])
Per copiare il modello generato dalla cartella locale in 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
Installa la libreria
bigquery-ml-utils
utilizzando pip:pip install bigquery-ml-utils
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 memorizzare temporaneamente il modello.(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"])
Per copiare il modello generato dalla cartella locale in 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
Installa la libreria
bigquery-ml-utils
utilizzando pip:pip install bigquery-ml-utils
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 il percorso di una cartella locale in cui puoi memorizzare temporaneamente il modello.(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"])
Per copiare il modello generato dalla cartella locale in 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
:
Nella console Google Cloud, vai alla pagina BigQuery.
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.Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.
SWIVEL
Utilizza
l'istruzione CREATE MODEL
:
Nella console Google Cloud, vai alla pagina BigQuery.
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.Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire 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:
Nella console Google Cloud, vai alla pagina Model Registry di Vertex AI.
Fai clic su Importa e segui questi passaggi:
- In Nome, inserisci
BERT
. - Per Regione, seleziona una regione corrispondente a quella del tuo bucket Cloud Storage.
- In Nome, inserisci
Fai clic su Continua, quindi segui questi passaggi:
- In Versione framework 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
.
- In Versione framework modello, seleziona
Fai clic su Importa. Al termine dell'importazione, il modello viene visualizzato nella pagina Registry dei modelli.
Per eseguire il deployment del modello BERT in un endpoint Vertex AI e collegarlo a BigQuery:
Nella console Google Cloud, vai alla pagina Model Registry di Vertex AI.
Fai clic sul nome del modello.
Fai clic su Deployment e test.
Fai clic su Esegui il deployment nell'endpoint.
In Nome endpoint, inserisci
bert_model_endpoint
.Fai clic su Continua.
Seleziona le risorse di calcolo.
Fai clic su Esegui il deployment.
Crea una connessione alla risorsa 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
:
Nella console Google Cloud, vai alla pagina BigQuery.
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 progettoCONNECTION_LOCATION
: la posizione della connessione BigQueryCONNECTION_ID
: l'ID della connessione BigQueryQuando visualizzi i dettagli della connessione nella console Google Cloud, questo è il valore nell'ultima sezione dell'ID connessione visualizzato in ID connessione, ad esempio
projects/myproject/locations/connection_location/connections/myconnection
ENDPOINT_LOCATION
: la posizione del tuo endpoint Vertex AI. Ad esempio: "us-central1".ENDPOINT_ID
: l'ID dell'endpoint del tuo modello
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.
Genera incorporamenti di testo
In questa sezione utilizzerai la
funzione di inferenza ML.PREDICT()
per generare embedding di testo della colonna review
del 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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.