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 |
Visualização em giro | <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: a cobrança é feita pelas consultas executadas no BigQuery.
- BigQuery ML: incorrem em custos para o modelo que você cria e na inferência que realiza no BigQuery ML.
- Cloud Storage: incorrem em custos para os objetos que você armazena no Cloud Storage.
- Vertex AI: se você seguir as instruções para gerar o modelo BERT, vai ter custos para implantá-lo em um 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
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs BigQuery, BigQuery Connection, and Vertex AI.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs BigQuery, BigQuery Connection, and Vertex AI.
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 ferramenta gsutil:
gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model
Substitua
BUCKET_PATH
pelo nome do bucket do Cloud Storage para o qual você está copiando o modelo.
Visualização em giro
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 ferramenta gsutil:
gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model
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 ferramenta gsutil:
gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model
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, consulte Executar uma consulta interativa.
Visualização em giro
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, consulte 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, consulte 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 | | | ... | | +-----------------------+----------------------------------------+
Visualização em giro
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 | | | | ... | | | +--------------+---------------------+----------------------------------------+
Limpeza
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.