Incorpore texto com modelos do TensorFlow pré-treinados
Este tutorial mostra como gerar incorporações de texto NNLM, SWIVEL e BERT no BigQuery usando modelos do TensorFlow pré-formados. Uma incorporação de texto é uma representação vetorial densa de um fragmento de texto, de modo que, se dois fragmentos de texto forem semanticamente semelhantes, as respetivas incorporações estão próximas no espaço vetorial de incorporação.
Os modelos NNLM, SWIVEL e BERT
Os modelos NNLM, SWIVEL e BERT variam em tamanho, precisão, escalabilidade e custo. Use a tabela seguinte para ajudar a determinar que modelo usar:
Modelo | Tamanho do modelo | Dimensão de incorporação | Exemplo de utilização | Descrição |
---|---|---|---|---|
NNLM | <150MB | 50 | Frases curtas, notícias, tweets, críticas | Modelo de linguagem de rede neural |
SWIVEL | <150MB | 20 | Frases curtas, notícias, tweets, críticas | Submatrix-wise Vector Embedding Learner |
BERT | ~200MB | 768 | Frases curtas, notícias, tweets, críticas, parágrafos curtos | Representações de codificadores bidirecionais de transformadores |
Neste tutorial, os modelos NNLM e SWIVEL são modelos do TensorFlow importados, e o modelo BERT é um modelo remoto no Vertex AI.
Autorizações necessárias
Para criar o conjunto de dados, precisa da autorização de
bigquery.datasets.create
gestão de identidade e de acesso (IAM).Para criar o contentor, precisa da autorização
storage.buckets.create
IAM.Para carregar o modelo para o Cloud Storage, precisa das autorizações de IAM
storage.objects.create
estorage.objects.get
.Para criar o recurso de ligação, precisa das seguintes autorizações do IAM:
bigquery.connections.create
bigquery.connections.get
Para carregar o modelo no BigQuery ML, precisa das seguintes autorizações do IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para executar a inferência, precisa das seguintes autorizações de IAM:
bigquery.tables.getData
na tabela de objetosbigquery.models.getData
no modelobigquery.jobs.create
Custos
Neste documento, usa os seguintes componentes faturáveis do Trusted Cloud by S3NS:
- 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 obter mais informações, consulte os seguintes recursos:
Antes de começar
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted 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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Trusted Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
Substitua
PROJECT_ID
pelo ID do seu projeto.Clique em
Executar.Na Trusted Cloud consola, ative o Cloud Shell.
Para criar o conjunto de dados, execute o comando
bq mk
:bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial
Substitua
PROJECT_ID
pelo ID do seu projeto.Instale a biblioteca
bigquery-ml-utils
usando o pip:pip install bigquery-ml-utils
Gere um modelo NNLM. O código Python seguinte carrega um modelo NNLM do TensorFlow Hub e prepara-o para o 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)
Substitua
OUTPUT_MODEL_PATH
por um caminho para uma pasta local onde pode armazenar temporariamente o modelo.Opcional: imprima a assinatura do modelo gerado:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])
Para copiar o modelo gerado da sua pasta local para um contentor do Cloud Storage, use a CLI do Google Cloud:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
Substitua
BUCKET_PATH
pelo nome do contentor do Cloud Storage para o qual está a copiar o modelo.Instale a biblioteca
bigquery-ml-utils
usando o pip:pip install bigquery-ml-utils
Gere um modelo SWIVEL. O código Python seguinte carrega um modelo SWIVEL do TensorFlow Hub e prepara-o para o 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)
Substitua
OUTPUT_MODEL_PATH
por um caminho para uma pasta local onde pode armazenar temporariamente o modelo.Opcional: imprima a assinatura do modelo gerado:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])
Para copiar o modelo gerado da sua pasta local para um contentor do Cloud Storage, use a CLI do Google Cloud:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
Substitua
BUCKET_PATH
pelo nome do contentor do Cloud Storage para o qual está a copiar o modelo.Instale a biblioteca
bigquery-ml-utils
usando o pip:pip install bigquery-ml-utils
Gere um modelo BERT. O código Python seguinte carrega um modelo BERT do TensorFlow Hub e prepara-o para o 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)
Substitua
OUTPUT_MODEL_PATH
por um caminho para uma pasta local onde pode armazenar temporariamente o modelo.Opcional: imprima a assinatura do modelo gerado:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])
Para copiar o modelo gerado da sua pasta local para um contentor do Cloud Storage, use a CLI do Google Cloud:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursive
Substitua
BUCKET_PATH
pelo nome do contentor do Cloud Storage para o qual está a copiar o modelo.Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE OR REPLACE MODEL
tf_models_tutorial.nnlm_model
OPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/nnlm_model/*');Substitua
BUCKET_NAME
pelo nome do contentor que criou anteriormente.Clique em
Executar.Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE OR REPLACE MODEL
tf_models_tutorial.swivel_model
OPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/swivel_model/*');Substitua
BUCKET_NAME
pelo nome do contentor que criou anteriormente.Clique em
Executar.Na Trusted Cloud consola, aceda à página Registo de modelos do Vertex AI.
Clique em Importar e, de seguida, faça o seguinte:
- Em Nome, introduza
BERT
. - Em Região, selecione uma região que corresponda à região do seu contentor do Cloud Storage.
- Em Nome, introduza
Clique em Continuar e, de seguida, faça o seguinte:
- Para Versão da estrutura do modelo, selecione
2.8
. - Para Localização do artefacto do modelo, introduza o caminho para o contentor do Cloud Storage onde armazenou o ficheiro do modelo. Por exemplo,
gs://BUCKET_PATH/bert_model
.
- Para Versão da estrutura do modelo, selecione
Clique em Importar. Após a conclusão da importação, o modelo é apresentado na página Registo de modelos.
Na Trusted Cloud consola, aceda à página Registo de modelos do Vertex AI.
Clique no nome do modelo.
Clique em Implementar e testar.
Clique em Implementar no ponto final.
Para Nome do ponto final, introduza
bert_model_endpoint
.Clique em Continuar.
Selecione os recursos de computação.
Clique em Implementar.
Crie uma ligação de recursos do Google Cloud ao BigQuery e conceda acesso à conta de serviço da ligação.
Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
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");Substitua o seguinte:
PROJECT_ID
: o ID do projetoCONNECTION_LOCATION
: a localização da sua ligação ao BigQueryCONNECTION_ID
: o ID da sua ligação ao BigQueryQuando vê os detalhes da associação na consola Trusted Cloud , este é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo
projects/myproject/locations/connection_location/connections/myconnection
ENDPOINT_LOCATION
: a localização do seu ponto final da Vertex AI. Por exemplo: "us-central1".ENDPOINT_ID
: o ID do ponto final do seu modelo
Clique em
Executar.- In the Trusted 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.
Crie um conjunto de dados
Para criar um conjunto de dados denominado tf_models_tutorial
para armazenar os modelos que criar, selecione uma das seguintes opções:
SQL
Use a declaração
CREATE SCHEMA
:
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Gere e carregue um modelo para o Cloud Storage
Para obter instruções mais detalhadas sobre a geração de incorporações de texto com modelos do TensorFlow pré-treinados, consulte o bloco de notas do Colab. Caso contrário, selecione um dos seguintes modelos:
NNLM
GIRAR
BERT
Carregue o modelo no BigQuery
Selecione um dos seguintes modelos:
NNLM
Use a declaração
CREATE MODEL
:
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
GIRAR
Use a declaração
CREATE MODEL
:
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
BERT
Para carregar o modelo BERT no BigQuery, importe o modelo BERT para o Vertex AI, implemente o modelo num ponto final do Vertex AI, crie uma ligação e, em seguida, crie um modelo remoto no BigQuery.
Para importar o modelo BERT para o Vertex AI, siga estes passos:
Para implementar o modelo BERT num ponto final do Vertex AI e associá-lo ao BigQuery, siga estes passos:
Para criar um modelo remoto com base no ponto final da Vertex AI,
use a declaração CREATE MODEL
:
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
Gere incorporações de texto
Nesta secção, usa a
ML.PREDICT()
função de inferência
para gerar incorporações de texto da coluna review
do conjunto de dados público
bigquery-public-data.imdb.reviews
. A consulta limita a tabela a 500 linhas para reduzir a quantidade de dados processados.
NNLM
SELECT * FROM ML.PREDICT( MODEL `tf_models_tutorial.nnlm_model`, ( SELECT review AS content FROM `bigquery-public-data.imdb.reviews` LIMIT 500) );
O resultado é semelhante ao seguinte:
+-----------------------+----------------------------------------+ | embedding | content | +-----------------------+----------------------------------------+ | 0.08599445223808289 | Isabelle Huppert must be one of the... | | -0.04862852394580841 | | | -0.017750458791851997 | | | 0.8658871650695801 | | | ... | | +-----------------------+----------------------------------------+
GIRAR
SELECT * FROM ML.PREDICT( MODEL `tf_models_tutorial.swivel_model`, ( SELECT review AS content FROM `bigquery-public-data.imdb.reviews` LIMIT 500) );
O resultado é semelhante ao seguinte:
+----------------------+----------------------------------------+ | 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) );
O resultado é semelhante ao seguinte:
+--------------+---------------------+----------------------------------------+ | embedding | remote_model_status | content | +--------------+---------------------+----------------------------------------+ | -0.694072425 | null | Isabelle Huppert must be one of the... | | 0.439208865 | | | | 0.99988997 | | | | -0.993487895 | | | | ... | | | +--------------+---------------------+----------------------------------------+