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 e storage.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 objetos
    • bigquery.models.getData no modelo
    • bigquery.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. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Para saber mais, acesse os recursos a seguir:

Antes de começar

  1. 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.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs BigQuery, BigQuery Connection, and Vertex AI.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs BigQuery, BigQuery Connection, and Vertex AI.

    Ative as 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:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
    

    Substitua PROJECT_ID pela ID do seu projeto.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

  2. 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

  1. Instale a biblioteca bigquery-ml-utils (link em inglês) usando o pip:

    pip install bigquery-ml-utils
    
  2. 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.

  3. 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"])
    
  4. 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

  1. Instale a biblioteca bigquery-ml-utils (link em inglês) usando o pip:

    pip install bigquery-ml-utils
    
  2. 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.

  3. 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"])
    
  4. 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

  1. Instale a biblioteca bigquery-ml-utils (link em inglês) usando o pip:

    pip install bigquery-ml-utils
    
  2. 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.

  3. 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"])
    
  4. 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:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. 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.

  3. 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:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. 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.

  3. 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:

  1. No console do Google Cloud, acesse a página Model Registry da Vertex AI.

    Acesse o Model Registry

  2. 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.
  3. 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.
  4. 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:

  1. No console do Google Cloud, acesse a página Model Registry da Vertex AI.

    Acesse o Model Registry

  2. Clique no nome do modelo.

  3. Clique em Implantar e testar.

  4. Clique em Implantar no endpoint.

  5. Em Nome do endpoint, insira bert_model_endpoint.

  6. Clique em Continuar.

  7. Selecione os recursos de computação.

  8. Clique em Implantar.

  9. 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:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. 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 BigQuery
    • CONNECTION_ID: o ID da conexão do BigQuery

      Quando 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

  3. 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

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.