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ê vai usar 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 saber mais, acesse os recursos a seguir:
Antes de começar
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted 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 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.