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 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: 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. 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. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the 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 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

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

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

  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, acesse Executar uma consulta interativa.

SWIVEL

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, 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:

  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, 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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.