Incorporar texto com modelos pré-treinados do TensorFlow
Neste tutorial, mostramos como gerar embeddings de texto NNLM, SWIVEL e BERT no BigQuery usando modelos pré-treinados do TensorFlow. Um embedding de texto é uma representação vetorial densa de um texto. Assim, se dois trechos de texto são semanticamente parecidos, os respectivos embeddings estão próximos no espaço vetorial de embedding.
Os modelos NNLM, SWIVEL e BERT
Os modelos NNLM, SWIVEL e BERT variam em tamanho, acurácia, escalonabilidade e custo. Use a tabela a seguir para ajudar a determinar qual modelo usar:
Modelo | Tamanho do modelo | Dimensão do embedding | Caso de uso | Descrição |
---|---|---|---|---|
NNLM | <150MB | 50 | Frases curtas, notícias, tweets, avaliações | Modelo de linguagem de rede neural |
SWIVEL | <150MB | 20 | Frases curtas, notícias, tweets, avaliações | Aprendiz de embedding de vetores em submatriz |
BERT | ~200MB | 768 | Frases curtas, notícias, tweets, avaliações, parágrafos curtos | Representações de codificadores bidirecionais de transformadores |
Neste tutorial, os modelos NNLM e SWIVEL são modelos importados do TensorFlow, e o modelo BERT é um modelo remoto na Vertex AI.
Permissões necessárias
Para criar o conjunto de dados, você precisa da permissão
bigquery.datasets.create
do Identity and Access Management (IAM).Para criar o bucket, você precisa da permissão
storage.buckets.create
do IAM.Para fazer upload do modelo no Cloud Storage, você precisa das permissões
storage.objects.create
estorage.objects.get
.Para criar o recurso de conexão, você precisa das seguintes permissões do IAM:
bigquery.connections.create
bigquery.connections.get
Para carregar o modelo no BigQuery ML, você precisa das seguintes permissões do IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para executar a inferência, você precisa das seguintes permissões do IAM:
bigquery.tables.getData
na tabela de objetosbigquery.models.getData
no modelobigquery.jobs.create
Custos
Neste documento, você usará os seguintes componentes faturáveis do 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 gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Para saber mais, acesse os recursos a seguir:
Antes de começar
- 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.
crie um conjunto de dados
Para criar um conjunto de dados chamado tf_models_tutorial
e armazenar os modelos
criados, selecione uma das seguintes opções:
SQL
Use a
instrução CREATE SCHEMA
:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
Substitua
PROJECT_ID
pela ID do seu projeto.Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
bq
No Console do Google Cloud, 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
pela ID do seu projeto.
Gerar e fazer upload de um modelo no Cloud Storage
Para instruções mais detalhadas sobre como gerar embeddings de texto usando modelos do TensorFlow pré-treinados, consulte o bloco do Colab. Ou Selecione uma destas opções:
NNLM
Instale a biblioteca
bigquery-ml-utils
(link em inglês) usando o pip:pip install bigquery-ml-utils
Gerar um modelo NNLM. O código Python a seguir carrega um modelo NNLM do TensorFlow Hub e o prepara para o 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)
Substitua
OUTPUT_MODEL_PATH
por um caminho para uma pasta local em que é possível 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 pasta local para um bucket 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 bucket do Cloud Storage para o qual você está copiando o modelo.
SWIVEL
Instale a biblioteca
bigquery-ml-utils
(link em inglês) usando o pip:pip install bigquery-ml-utils
Gerar um modelo SWIVEL. O código Python a seguir carrega um modelo SWIVEL do TensorFlow Hub e o prepara para o 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)
Substitua
OUTPUT_MODEL_PATH
por um caminho para uma pasta local em que é possível 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 pasta local para um bucket 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 bucket do Cloud Storage para o qual você está copiando o modelo.
BERT
Instale a biblioteca
bigquery-ml-utils
(link em inglês) usando o pip:pip install bigquery-ml-utils
Gerar um modelo BERT. O código Python a seguir carrega um modelo BERT do TensorFlow Hub e o prepara para o 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)
Substitua
OUTPUT_MODEL_PATH
por um caminho para uma pasta local em que é possível 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 pasta local para um bucket 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 bucket do Cloud Storage para o qual você está copiando o modelo.
Carregar o modelo no BigQuery
Selecione um dos seguintes modelos:
NNLM
Use a
instrução CREATE MODEL
:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instruçã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 bucket que você criou anteriormente.Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
SWIVEL
Use a
instrução CREATE MODEL
:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instruçã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 bucket que você criou anteriormente.Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
BERT
Para carregar o modelo BERT no BigQuery, importe o modelo do BERT para a Vertex AI, implante-o em um endpoint da Vertex AI, crie uma conexão e crie um modelo remoto no BigQuery.
Para importar o modelo BERT para a Vertex AI, siga estas etapas:
No console do Google Cloud, acesse a página Model Registry da Vertex AI.
Clique em Import e faça o seguinte:
- Em Nome, insira
BERT
. - Em Região, selecione uma região que corresponda à região do seu bucket do Cloud Storage.
- Em Nome, insira
Clique em Continuar e faça o seguinte:
- Em Versão do framework do modelo, selecione
2.8
. - Em Local do artefato do modelo, insira o caminho para o
bucket do Cloud Storage em que você armazenou o arquivo de modelo. Por exemplo,
gs://BUCKET_PATH/bert_model
.
- Em Versão do framework do modelo, selecione
Clique em Importar. Depois que a importação for concluída, o modelo aparecerá na página Model Registry.
Para implantar o modelo BERT em um endpoint da Vertex AI e conectá-lo ao BigQuery, siga estas etapas:
No console do Google Cloud, acesse a página Model Registry da Vertex AI.
Clique no nome do modelo.
Clique em Implantar e testar.
Clique em Implantar no endpoint.
Em Nome do endpoint, insira
bert_model_endpoint
.Clique em Continuar.
Selecione os recursos de computação.
Clique em Implantar.
Crie uma conexão de recursos do Cloud BigQuery e conceda acesso à conta de serviço da conexão.
Para criar um modelo remoto com base no endpoint da Vertex AI,
use a
instrução CREATE MODEL
:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instruçã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:
PROJECT_ID
: o ID do projeto;CONNECTION_LOCATION
: o local da sua conexão do BigQueryCONNECTION_ID
: o ID da conexão do BigQueryQuando você visualiza os detalhes da conexão no console do Google Cloud, esse é o valor na última seção do ID da conexão totalmente qualificado, mostrado em ID da conexão, por exemplo,
projects/myproject/locations/connection_location/connections/myconnection
ENDPOINT_LOCATION
: o local do endpoint da Vertex AI. Por exemplo: "us-central1".ENDPOINT_ID
: o ID do endpoint do modelo
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
Gerar embeddings de texto
Nesta seção, você usa a
função de inferência ML.PREDICT()
para gerar embeddings de texto da coluna review
a partir 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 será semelhante ao seguinte:
+-----------------------+----------------------------------------+ | 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) );
O resultado será 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 será semelhante ao seguinte:
+--------------+---------------------+----------------------------------------+ | embedding | remote_model_status | content | +--------------+---------------------+----------------------------------------+ | -0.694072425 | null | Isabelle Huppert must be one of the... | | 0.439208865 | | | | 0.99988997 | | | | -0.993487895 | | | | ... | | | +--------------+---------------------+----------------------------------------+
Limpar
- 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.