Incorpore texto com modelos do TensorFlow pré-treinados

Este tutorial mostra como gerar incorporações de texto NNLM, SWIVEL e BERT no BigQuery usando modelos do TensorFlow pré-formados. Uma incorporação de texto é uma representação vetorial densa de um fragmento de texto, de modo que, se dois fragmentos de texto forem semanticamente semelhantes, as respetivas incorporações estão próximas no espaço vetorial de incorporação.

Os modelos NNLM, SWIVEL e BERT

Os modelos NNLM, SWIVEL e BERT variam em tamanho, precisão, escalabilidade e custo. Use a tabela seguinte para ajudar a determinar que modelo usar:

Modelo Tamanho do modelo Dimensão de incorporação Exemplo de utilização Descrição
NNLM <150MB 50 Frases curtas, notícias, tweets, críticas Modelo de linguagem de rede neural
SWIVEL <150MB 20 Frases curtas, notícias, tweets, críticas Submatrix-wise Vector Embedding Learner
BERT ~200MB 768 Frases curtas, notícias, tweets, críticas, parágrafos curtos Representações de codificadores bidirecionais de transformadores

Neste tutorial, os modelos NNLM e SWIVEL são modelos do TensorFlow importados, e o modelo BERT é um modelo remoto no Vertex AI.

Autorizações necessárias

  • Para criar o conjunto de dados, precisa da autorização de bigquery.datasets.create gestão de identidade e de acesso (IAM).

  • Para criar o contentor, precisa da autorização storage.buckets.createIAM.

  • Para carregar o modelo para o Cloud Storage, precisa das autorizações de IAM storage.objects.create e storage.objects.get.

  • Para criar o recurso de ligação, precisa das seguintes autorizações do IAM:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para carregar o modelo no BigQuery ML, precisa das seguintes autorizações do IAM:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Para executar a inferência, precisa das seguintes autorizações de IAM:

    • bigquery.tables.getData na tabela de objetos
    • bigquery.models.getData no modelo
    • bigquery.jobs.create

Custos

Neste documento, usa 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 obter mais informações, consulte os seguintes recursos:

Antes de começar

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Trusted Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  4. Crie um conjunto de dados

    Para criar um conjunto de dados denominado tf_models_tutorial para armazenar os modelos que criar, selecione uma das seguintes opções:

    SQL

    Use a declaração CREATE SCHEMA:

    1. Na Trusted Cloud consola, aceda à página BigQuery.

      Aceda ao BigQuery

    2. No editor de consultas, introduza a seguinte declaração:

      CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;

      Substitua PROJECT_ID pelo ID do seu projeto.

    3. Clique em Executar.

    Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

    bq

    1. Na Trusted Cloud consola, ative o Cloud Shell.

      Ative 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 pelo ID do seu projeto.

    Gere e carregue um modelo para o Cloud Storage

    Para obter instruções mais detalhadas sobre a geração de incorporações de texto com modelos do TensorFlow pré-treinados, consulte o bloco de notas do Colab. Caso contrário, selecione um dos seguintes modelos:

    NNLM

    1. Instale a biblioteca bigquery-ml-utils usando o pip:

      pip install bigquery-ml-utils
      
    2. Gere um modelo NNLM. O código Python seguinte carrega um modelo NNLM do TensorFlow Hub e prepara-o para o BigQuery:

      from bigquery_ml_utils import model_generator
      import tensorflow_text
      
      # 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 onde pode 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 sua pasta local para um contentor 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 contentor do Cloud Storage para o qual está a copiar o modelo.

    GIRAR

    1. Instale a biblioteca bigquery-ml-utils usando o pip:

      pip install bigquery-ml-utils
      
    2. Gere um modelo SWIVEL. O código Python seguinte carrega um modelo SWIVEL do TensorFlow Hub e prepara-o para o BigQuery:

      from bigquery_ml_utils import model_generator
      import tensorflow_text
      
      # 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 onde pode 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 sua pasta local para um contentor 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 contentor do Cloud Storage para o qual está a copiar o modelo.

    BERT

    1. Instale a biblioteca bigquery-ml-utils usando o pip:

      pip install bigquery-ml-utils
      
    2. Gere um modelo BERT. O código Python seguinte carrega um modelo BERT do TensorFlow Hub e prepara-o para o BigQuery:

      from bigquery_ml_utils import model_generator
      import tensorflow_text
      
      # 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 onde pode 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 sua pasta local para um contentor 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 contentor do Cloud Storage para o qual está a copiar o modelo.

    Carregue o modelo no BigQuery

    Selecione um dos seguintes modelos:

    NNLM

    Use a declaração CREATE MODEL:

    1. Na Trusted Cloud consola, aceda à página BigQuery.

      Aceda ao BigQuery

    2. No editor de consultas, introduza a seguinte declaraçã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 contentor que criou anteriormente.

    3. Clique em Executar.

    Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

    GIRAR

    Use a declaração CREATE MODEL:

    1. Na Trusted Cloud consola, aceda à página BigQuery.

      Aceda ao BigQuery

    2. No editor de consultas, introduza a seguinte declaraçã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 contentor que criou anteriormente.

    3. Clique em Executar.

    Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

    BERT

    Para carregar o modelo BERT no BigQuery, importe o modelo BERT para o Vertex AI, implemente o modelo num ponto final do Vertex AI, crie uma ligação e, em seguida, crie um modelo remoto no BigQuery.

    Para importar o modelo BERT para o Vertex AI, siga estes passos:

    1. Na Trusted Cloud consola, aceda à página Registo de modelos do Vertex AI.

      Aceda ao Registo de modelos

    2. Clique em Importar e, de seguida, faça o seguinte:

      • Em Nome, introduza BERT.
      • Em Região, selecione uma região que corresponda à região do seu contentor do Cloud Storage.
    3. Clique em Continuar e, de seguida, faça o seguinte:

      • Para Versão da estrutura do modelo, selecione 2.8.
      • Para Localização do artefacto do modelo, introduza o caminho para o contentor do Cloud Storage onde armazenou o ficheiro do modelo. Por exemplo, gs://BUCKET_PATH/bert_model.
    4. Clique em Importar. Após a conclusão da importação, o modelo é apresentado na página Registo de modelos.

    Para implementar o modelo BERT num ponto final do Vertex AI e associá-lo ao BigQuery, siga estes passos:

    1. Na Trusted Cloud consola, aceda à página Registo de modelos do Vertex AI.

      Aceda ao Registo de modelos

    2. Clique no nome do modelo.

    3. Clique em Implementar e testar.

    4. Clique em Implementar no ponto final.

    5. Para Nome do ponto final, introduza bert_model_endpoint.

    6. Clique em Continuar.

    7. Selecione os recursos de computação.

    8. Clique em Implementar.

    9. Crie uma ligação de recursos do Google Cloud ao BigQuery e conceda acesso à conta de serviço da ligação.

    Para criar um modelo remoto com base no ponto final da Vertex AI, use a declaração CREATE MODEL:

    1. Na Trusted Cloud consola, aceda à página BigQuery.

      Aceda ao BigQuery

    2. No editor de consultas, introduza a seguinte declaraçã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 o seguinte:

      • PROJECT_ID: o ID do projeto
      • CONNECTION_LOCATION: a localização da sua ligação ao BigQuery
      • CONNECTION_ID: o ID da sua ligação ao BigQuery

        Quando vê os detalhes da associação na consola Trusted Cloud , este é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo projects/myproject/locations/connection_location/connections/myconnection

      • ENDPOINT_LOCATION: a localização do seu ponto final da Vertex AI. Por exemplo: "us-central1".
      • ENDPOINT_ID: o ID do ponto final do seu modelo

    3. Clique em Executar.

    Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

    Gere incorporações de texto

    Nesta secção, usa a ML.PREDICT() função de inferência para gerar incorporações de texto da coluna review 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 é semelhante ao seguinte:

    +-----------------------+----------------------------------------+
    | embedding             | content                                |
    +-----------------------+----------------------------------------+
    |  0.08599445223808289  | Isabelle Huppert must be one of the... |
    | -0.04862852394580841  |                                        |
    | -0.017750458791851997 |                                        |
    |  0.8658871650695801   |                                        |
    | ...                   |                                        |
    +-----------------------+----------------------------------------+
    

    GIRAR

    SELECT
      *
    FROM
      ML.PREDICT(
        MODEL `tf_models_tutorial.swivel_model`,
        (
        SELECT
          review AS content
        FROM
          `bigquery-public-data.imdb.reviews`
        LIMIT
          500)
      );

    O resultado é 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 é 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 Trusted 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.