Ajustar um modelo usando seus dados

Neste documento, mostramos como criar uma instância de ML do BigQuery modelo remoto que faz referência à API gemini-1.0-pro-002 da Vertex AI, model ou versão Vertex AI text-bison model, e configure o modelo para realizar o ajuste supervisionado. Depois de criar o modelo remoto, use a função ML.EVALUATE para avaliar o modelo e confirmar se o desempenho é adequado para seu caso de uso. Em seguida, é possível usar o modelo com a função ML.GENERATE_TEXT para analisar o texto em uma tabela do BigQuery.

Para mais informações, consulte Ajuste supervisionado de modelo da API Vertex AI Gemini ou ajuste supervisionado do modelo de texto da API Vertex AI PaLM.

Permissões necessárias

  • Para criar uma conexão, você precisa da associação no seguinte papel do Identity and Access Management (IAM):

    • roles/bigquery.connectionAdmin
  • Para conceder permissões à conta de serviço da conexão, você precisa da seguinte permissão:

    • resourcemanager.projects.setIamPolicy
  • Para criar o modelo usando o BigQuery ML, você precisa das seguintes permissões do IAM:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Para executar a inferência, você precisa das seguintes permissões:

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

Antes de começar

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

    Go to project selector

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

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

    Enable the APIs

Crie uma conexão

Crie uma Conexão de recursos do Cloud e tenha acesso à conta de serviço da conexão.

Selecione uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. Para criar uma conexão, clique em Adicionar e em Conexões com fontes de dados externas.

  3. Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (Cloud Resource).

  4. No campo ID da conexão, insira um nome para a conexão.

  5. Clique em Criar conexão.

  6. Clique em Ir para conexão.

  7. No painel Informações da conexão, copie o ID da conta de serviço para uso em uma etapa posterior.

bq

  1. Em um ambiente de linha de comando, crie uma conexão:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    O parâmetro --project_id substitui o projeto padrão.

    Substitua:

    • REGION: sua região de conexão
    • PROJECT_ID: o ID do projeto do Google Cloud
    • CONNECTION_ID: um ID para sua conexão

    Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.

    Solução de problemas: se você receber o seguinte erro de conexão, atualize o SDK Google Cloud:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupere e copie o ID da conta de serviço para uso em uma etapa posterior:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    O resultado será assim:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Anexe a seguinte seção ao seu arquivo main.tf.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Substitua:

  • CONNECTION_ID: um ID para sua conexão
  • PROJECT_ID: o ID do projeto do Google Cloud
  • REGION: sua região de conexão

Conceder acesso à conta de serviço da conexão

Conceda permissão à sua conta de serviço para acessar a Vertex AI. Deixar de conceder a permissão resulta em erro. Selecione uma destas opções:

Console

  1. Acesse a página IAM e administrador.

    Acessar IAM e administrador

  2. Clique em Conceder acesso.

  3. Em Novos principais, insira o ID da conta de serviço que você copiou anteriormente.

  4. Clique em Selecionar papel.

  5. Em Filtro, digite Vertex AI Service Agent e selecione esse papel.

  6. Clique em Salvar.

gcloud

Use o comando gcloud projects add-iam-policy-binding (em inglês).

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None

Substitua:

  • PROJECT_NUMBER: o número do projeto.
  • MEMBER: o ID da conta de serviço que você copiou anteriormente.

A conta de serviço associada à sua conexão é uma instância do Agente de serviço da delegação de conexão do BigQuery. Portanto, não há problema em atribuir um papel de agente de serviço a ela.

Conceder acesso à conta de serviço padrão do Compute Engine

Quando você ativa a API Compute Engine, a Conta de serviço padrão do Compute Engine recebe automaticamente o papel de Editor no projeto, a menos que você tenha desativado este comportamento para seu projeto. Se esse for o caso, conceda novamente o papel de Editor ao acesso à conta de serviço padrão do Compute Engine para que ele tenha permissões suficientes para criar e ajustar um modelo remoto.

Console

  1. Acesse a página IAM e administrador.

    Acessar IAM e administrador

  2. Clique em Conceder acesso.

  3. Em Novos principais, insira o ID da conta de serviço, que é PROJECT_NUMBER-compute@developer.gserviceaccount.com.

  4. Clique em Selecionar papel.

  5. Em Selecionar um papel, escolha Básico e selecione Editor.

  6. Clique em Salvar.

gcloud

Use o comando gcloud projects add-iam-policy-binding (em inglês).

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/editor' --condition=None

Substitua:

  • PROJECT_NUMBER: o número do projeto.
  • MEMBER: o ID da conta de serviço, que é PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Criar o agente de serviço de ajuste

Criar um agente de serviço para executar o job de ajuste.

Criar um agente de serviço para um modelo de gemini-1.0-pro-002

Criar uma instância do Agente de serviço de ajuste seguro da Vertex AI:

  1. Use o Comando gcloud beta services identity create para criar o agente de serviço de ajuste:

    gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
    

    Substitua PROJECT_NUMBER pelo número do projeto.

  2. Use o comando gcloud projects add-iam-policy-binding para conceder ao agente de serviço de ajuste o papel de agente de serviço da Vertex AI (roles/aiplatform.tuningServiceAgent):

    gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-vertex-tune.iam.gserviceaccount.com' --role='roles/aiplatform.tuningServiceAgent'
    

    Substitua PROJECT_NUMBER pelo número do projeto.

Criar um agente de serviço para um modelo de text-bison

Crie uma instância do Agente de serviço de ajuste do AI Platform:

  1. Use o Comando gcloud beta services identity create para criar o agente de serviço de ajuste:

    gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
    

    Substitua PROJECT_NUMBER pelo número do projeto.

  2. Use o Comando gcloud projects add-iam-policy-binding para conceder ao agente de serviço de ajuste o Papel do agente de serviço da Vertex AI (roles/aiplatform.serviceAgent):

    gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform-ft.iam.gserviceaccount.com' --role='roles/aiplatform.serviceAgent'
    

    Substitua PROJECT_NUMBER pelo número do projeto.

Criar um modelo com ajuste supervisionado

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

    Acessar o BigQuery

  2. No editor de consultas, execute a seguinte consulta para criar um modelo remoto:

gemini-1.0-pro-002

CREATE OR REPLACE MODEL
`PROJECT_ID.DATASET_ID.MODEL_NAME`
REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  ENDPOINT = 'ENDPOINT',
  MAX_ITERATIONS = MAX_ITERATIONS,
  LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER,
  DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD',
  DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION,
  DATA_SPLIT_COL = 'DATA_SPLIT_COL',
  EVALUATION_TASK = 'EVALUATION_TASK',
  PROMPT_COL = 'INPUT_PROMPT_COL',
  INPUT_LABEL_COLS = INPUT_LABEL_COLS)
AS SELECT PROMPT_COLUMN, LABEL_COLUMN
FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;

Substitua:

  • PROJECT_ID: o ID do projeto em que o modelo será criado.
  • DATASET_ID: o ID do conjunto de dados para conter o modelo. Esse conjunto de dados precisa estar em uma região de upload de modelo e job de pipeline compatível.
  • MODEL_NAME: o nome do modelo
  • REGION: a região usada pela conexão.
  • CONNECTION_ID: o ID da conexão do BigQuery Essa conexão precisa estar no mesmo local que o conjunto de dados que você está usando.

    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: um valor STRING que especifica o nome do modelo a ser usado, que neste caso deve ser gemini-1.0-pro-002:
  • MAX_ITERATIONS: um valor INT64 que especifica o número de etapas a serem executadas para o ajuste supervisionado. O valor MAX_ITERATIONS precisa estar entre 1 e .

    O modelo gemini-1.0-pro-002 treina usando períodos de etapas, então o BigQuery ML converte a Valor MAX_ITERATIONS para períodos. O valor padrão para MAX_ITERATIONS é o número de linhas nos dados de entrada, que é equivalente a um período. Para usar vários períodos, especificar um múltiplo do número de linhas no seu dados de treinamento. Por exemplo, se você tiver 100 linhas de dados de entrada e Se quiser usar dois períodos, especifique 200 como o valor do argumento. Se você fornecer um valor que não seja múltiplo do número de linhas no os dados de entrada, o BigQuery ML arredonda para o período mais próximo. Por exemplo, se você tiver 100 linhas de dados de entrada e especificar 101 para o valor MAX_ITERATIONS, o treinamento é realizado com dois períodos.

    Para mais informações sobre os parâmetros usados para ajustar gemini-1.0-pro-002 de modelos, consulte Criar um job de ajuste.

  • LEARNING_RATE_MULTIPLIER Um FLOAT64 multiplicador para aplicar à taxa de aprendizado recomendada. O valor padrão é 1.0.
  • DATA_SPLIT_METHOD: um valor STRING que especifica o método usado para dividir os dados de entrada em conjuntos de treinamento e avaliação. As opções válidas são:
    • AUTO_SPLIT: o BigQuery ML divide os dados automaticamente. A maneira como os dados são divididos varia de acordo com o número de linhas na tabela de entrada. Esse é o valor padrão.
    • RANDOM: os dados são escolhidos aleatoriamente antes de serem divididos em conjuntos. Para personalizar a divisão de dados, use essa opção com a opção DATA_SPLIT_EVAL_FRACTION.
    • CUSTOM: os dados são divididos usando a coluna fornecida na opção DATA_SPLIT_COL. O valor DATA_SPLIT_COL precisa ser o nome de uma coluna do tipo BOOL. Linhas com valor TRUE ou NULL são usadas como dados de avaliação e as linhas com valor FALSE como dados de treinamento.
    • SEQ: divide os dados usando a coluna fornecida na opção DATA_SPLIT_COL. O valor DATA_SPLIT_COL precisa ser o nome de uma coluna de um dos seguintes tipos:
      • NUMERIC
      • BIGNUMERIC
      • STRING
      • TIMESTAMP

      Os dados são classificados do menor para o maior com base na coluna especificada.

      As primeiras n linhas são usadas como dados de avaliação, em que n é o valor especificado para DATA_SPLIT_EVAL_FRACTION. As linhas restantes são usadas como dados de treinamento.

    • NO_SPLIT: sem divisão de dados; todos os dados de entrada são usados como dados de treinamento.

    Para mais informações sobre essas opções de divisão de dados, consulte DATA_SPLIT_METHOD.

  • DATA_SPLIT_EVAL_FRACTION: um valor FLOAT64 que especifica a fração dos dados a serem usados como dados de avaliação ao executar o ajuste supervisionado. Precisa ser um valor no intervalo [0, 1.0]. O valor padrão é 0.2.

    Use essa opção quando especificar RANDOM ou SEQ como o valor da opção DATA_SPLIT_METHOD. Para personalizar a divisão de dados, use a opção DATA_SPLIT_METHOD com a opção DATA_SPLIT_EVAL_FRACTION.

  • DATA_SPLIT_COL: um valor STRING que especifica o nome da coluna a ser usada para classificar os dados de entrada no conjunto de treinamento ou avaliação. Use quando especificar CUSTOM ou SEQ como o valor da opção DATA_SPLIT_METHOD.
  • EVALUATION_TASK: um valor STRING que especifica o tipo de tarefa que você quer ajustar o modelo para executar. As opções válidas são:
    • TEXT_GENERATION
    • CLASSIFICATION
    • SUMMARIZATION
    • QUESTION_ANSWERING
    • UNSPECIFIED

    O valor padrão é UNSPECIFIED.

  • INPUT_PROMPT_COL: um valor STRING que contém o nome da coluna de solicitação na tabela de dados de treinamento a ser usada ao executar o ajuste supervisionado. O valor padrão é prompt.
  • INPUT_LABEL_COLS: um valor ARRAY<<STRING> que contém o nome da coluna de rótulos na tabela de dados de treinamento para usar no ajuste supervisionado. Só é possível especificar um elemento na matriz. O valor padrão é uma matriz vazia. Isso faz com que label seja o valor padrão do argumento LABEL_COLUMN.
  • PROMPT_COLUMN: a coluna na tabela de dados de treinamento que contém o comando para avaliar o conteúdo na coluna LABEL_COLUMN. Essa coluna precisa ser do tipo STRING ou ser convertida para STRING. Se você especificar um valor para a opção INPUT_PROMPT_COL, precisará especificar o mesmo valor para PROMPT_COLUMN. Caso contrário, esse valor precisará ser prompt. Se a tabela não tiver uma coluna prompt, use um alias para especificar uma coluna existente. Por exemplo, AS SELECT hint AS prompt, label FROM mydataset.mytable.
  • LABEL_COLUMN: a coluna na tabela de dados de treinamento que contém os exemplos para treinar o modelo. Essa coluna precisa ser do tipo STRING ou ser convertida para STRING. Se você especificar um valor para a opção INPUT_LABEL_COLS, precisará especificar o mesmo valor para LABEL_COLUMN. Caso contrário, esse valor precisará ser label. Se a tabela não tiver uma coluna label, use um alias para especificar uma coluna existente. Por exemplo, AS SELECT prompt, feature AS label FROM mydataset.mytable.
  • TABLE_PROJECT_ID: o ID do projeto que contém a tabela de dados de treinamento.
  • TABLE_DATASET: o nome do conjunto de dados que contém a tabela de dados de treinamento.
  • TABLE_NAME: o nome da tabela que contém os dados a serem usados para treinar o modelo.

text-bison

CREATE OR REPLACE MODEL
`PROJECT_ID.DATASET_ID.MODEL_NAME`
REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  ENDPOINT = 'ENDPOINT',
  MAX_ITERATIONS = MAX_ITERATIONS,
  LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER,
  EARLY_STOP = EARLY_STOP,
  ACCELERATOR_TYPE = 'ACCELERATOR_TYPE',
  DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD',
  DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION,
  DATA_SPLIT_COL = 'DATA_SPLIT_COL',
  EVALUATION_TASK = 'EVALUATION_TASK',
  PROMPT_COL = 'INPUT_PROMPT_COL',
  INPUT_LABEL_COLS = INPUT_LABEL_COLS)
AS SELECT PROMPT_COLUMN, LABEL_COLUMN
FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;

Substitua:

  • PROJECT_ID: o ID do projeto em que o modelo será criado.
  • DATASET_ID: o ID do conjunto de dados para conter o modelo. Esse conjunto de dados precisa estar em uma região de upload de modelo e job de pipeline compatível.
  • MODEL_NAME: o nome do modelo
  • REGION: a região usada pela conexão.
  • CONNECTION_ID: o ID da conexão do BigQuery Essa conexão precisa estar no mesmo local que o conjunto de dados que você está usando.

    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: um valor STRING que especifica o nome do modelo a ser usado. Nesse caso, é necessário que seja qualquer versão do modelo text-bison.
  • MAX_ITERATIONS: um valor INT64 que especifica o número de etapas a serem executadas para o ajuste supervisionado. O valor MAX_ITERATIONS precisa estar entre 1 e . Normalmente, 100 etapas levam cerca de uma hora para serem concluídas. O valor padrão é 300.

    O valor MAX_ITERATIONS combinado com o valor ACCELERATOR_TYPE afeta o tamanho do lote usado no treinamento de modelo. Para mais informações sobre como o tamanho do lote é determinado, consulte MAX_ITERATIONS. Para mais orientações sobre como escolher o número de etapas de treinamento, consulte Configurações recomendadas.

  • LEARNING_RATE_MULTIPLIER Um FLOAT64 multiplicador para aplicar à taxa de aprendizado recomendada. O valor padrão é 1.0.
  • EARLY_STOP: um valor BOOL que determina se o ajuste supervisionado será interrompido antes de concluir todas as etapas. Quando definido como TRUE, interrompe o ajuste supervisionado se o desempenho do modelo, medido pela precisão dos tokens previstos, não melhorar o suficiente entre as execuções de avaliação. Quando definido como FALSE, o ajuste supervisionado continua até que todas as etapas de ajuste sejam concluídas. O valor padrão é FALSE.
  • ACCELERATOR_TYPE: um valor STRING que especifica o tipo de acelerador a ser usado para o ajuste supervisionado. As opções válidas são as seguintes:
    • GPU: usa GPUs A100 de 80 GB para ajuste supervisionado.
    • TPU: usa 64 núcleos do pod da TPU v3 para ajuste supervisionado. Se você escolher essa opção, acontecerá o seguinte:
      • Execute sua consulta na região europe-west4. Para mais informações sobre como alterar as opções de consulta, como o local, consulte Executar uma consulta interativa.
      • Os cálculos de ajuste supervisionados ocorrem na região europe-west4, porque é nela que os recursos de TPU estão localizados.

    O valor padrão é GPU. Seja qual for a opção usada, verifique se você tem cota suficiente.

  • DATA_SPLIT_METHOD: um valor STRING que especifica o método usado para dividir os dados de entrada em conjuntos de treinamento e avaliação. As opções válidas são:
    • AUTO_SPLIT: o BigQuery ML divide os dados automaticamente. A maneira como os dados são divididos varia de acordo com o número de linhas na tabela de entrada. Esse é o valor padrão.
    • RANDOM: os dados são escolhidos aleatoriamente antes de serem divididos em conjuntos. Para personalizar a divisão de dados, use essa opção com a opção DATA_SPLIT_EVAL_FRACTION.
    • CUSTOM: os dados são divididos usando a coluna fornecida na opção DATA_SPLIT_COL. O valor DATA_SPLIT_COL precisa ser o nome de uma coluna do tipo BOOL. Linhas com valor TRUE ou NULL são usadas como dados de avaliação e as linhas com valor FALSE como dados de treinamento.
    • SEQ: divide os dados usando a coluna fornecida na opção DATA_SPLIT_COL. O valor DATA_SPLIT_COL precisa ser o nome de uma coluna de um dos seguintes tipos:
      • NUMERIC
      • BIGNUMERIC
      • STRING
      • TIMESTAMP

      Os dados são classificados do menor para o maior com base na coluna especificada.

      As primeiras n linhas são usadas como dados de avaliação, em que n é o valor especificado para DATA_SPLIT_EVAL_FRACTION. As linhas restantes são usadas como dados de treinamento.

    • NO_SPLIT: sem divisão de dados; todos os dados de entrada são usados como dados de treinamento.

    Para mais informações sobre essas opções de divisão de dados, consulte DATA_SPLIT_METHOD.

  • DATA_SPLIT_EVAL_FRACTION: um valor FLOAT64 que especifica a fração dos dados a serem usados como dados de avaliação ao executar o ajuste supervisionado. Precisa ser um valor no intervalo [0, 1.0]. O valor padrão é 0.2.

    Use essa opção quando especificar RANDOM ou SEQ como o valor da opção DATA_SPLIT_METHOD. Para personalizar a divisão de dados, use a opção DATA_SPLIT_METHOD com a opção DATA_SPLIT_EVAL_FRACTION.

  • DATA_SPLIT_COL: um valor STRING que especifica o nome da coluna a ser usada para classificar os dados de entrada no conjunto de treinamento ou avaliação. Use quando especificar CUSTOM ou SEQ como o valor da opção DATA_SPLIT_METHOD.
  • EVALUATION_TASK: um valor STRING que especifica o tipo de tarefa que você quer ajustar o modelo para executar. As opções válidas são:
    • TEXT_GENERATION
    • CLASSIFICATION
    • SUMMARIZATION
    • QUESTION_ANSWERING
    • UNSPECIFIED

    O valor padrão é UNSPECIFIED.

  • INPUT_PROMPT_COL: um valor STRING que contém o nome da coluna de solicitação na tabela de dados de treinamento a ser usada ao executar o ajuste supervisionado. O valor padrão é prompt.
  • INPUT_LABEL_COLS: um valor ARRAY<<STRING> que contém o nome da coluna de rótulos na tabela de dados de treinamento para usar no ajuste supervisionado. Só é possível especificar um elemento na matriz. O valor padrão é uma matriz vazia. Isso faz com que label seja o valor padrão do argumento LABEL_COLUMN.
  • PROMPT_COLUMN: a coluna na tabela de dados de treinamento que contém o comando para avaliar o conteúdo na coluna LABEL_COLUMN. Essa coluna precisa ser do tipo STRING ou ser convertida para STRING. Se você especificar um valor para a opção INPUT_PROMPT_COL, precisará especificar o mesmo valor para PROMPT_COLUMN. Caso contrário, esse valor precisará ser prompt. Se a tabela não tiver uma coluna prompt, use um alias para especificar uma coluna existente. Por exemplo, AS SELECT hint AS prompt, label FROM mydataset.mytable.
  • LABEL_COLUMN: a coluna na tabela de dados de treinamento que contém os exemplos para treinar o modelo. Essa coluna precisa ser do tipo STRING ou ser convertida para STRING. Se você especificar um valor para a opção INPUT_LABEL_COLS, precisará especificar o mesmo valor para LABEL_COLUMN. Caso contrário, esse valor precisará ser label. Se a tabela não tiver uma coluna label, use um alias para especificar uma coluna existente. Por exemplo, AS SELECT prompt, feature AS label FROM mydataset.mytable.
  • TABLE_PROJECT_ID: o ID do projeto que contém a tabela de dados de treinamento.
  • TABLE_DATASET: o nome do conjunto de dados que contém a tabela de dados de treinamento.
  • TABLE_NAME: o nome da tabela que contém os dados a serem usados para treinar o modelo.

Avaliar o modelo ajustado

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

    Acessar o BigQuery

  2. No editor de consultas, execute a seguinte consulta para avaliar o modelo ajustado:

    SELECT
    *
    FROM
    ML.EVALUATE(
      MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
      TABLE `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`,
      STRUCT('TASK_TYPE' AS task_type, TOKENS AS max_output_tokens,
        TEMPERATURE AS temperature, TOP_K AS top_k,
        TOP_P AS top_p));
    

    Substitua:

    • PROJECT_ID: o ID do projeto que contém o modelo.
    • DATASET_ID: o ID do conjunto de dados que contém o modelo.
    • MODEL_NAME: o nome do modelo
    • TABLE_PROJECT_ID: o ID do projeto que contém a tabela de dados de avaliação.
    • TABLE_DATASET: o nome do conjunto de dados que contém a tabela de dados de avaliação.
    • TABLE_NAME: o nome da tabela que contém os dados de avaliação.

      A tabela precisa ter uma coluna com um nome igual ao da coluna de comando fornecido durante o treinamento do modelo. É possível fornecer esse valor usando a opção prompt_col durante o treinamento do modelo. Se prompt_col não for especificado, será usada a coluna chamada prompt nos dados de treinamento. Um erro será retornado se não houver uma coluna chamada prompt.

      A tabela precisa ter uma coluna com um nome que corresponda ao nome da coluna de rótulo fornecido durante o treinamento do modelo. É possível fornecer esse valor usando a opção input_label_cols durante o treinamento do modelo. Se input_label_cols não for especificado, será usada a coluna chamada label nos dados de treinamento. Um erro será retornado se não houver uma coluna chamada label.

    • TASK_TYPE: um valor STRING que especifica o tipo de tarefa para avaliar o modelo. As opções válidas são:
      • TEXT_GENERATION
      • CLASSIFICATION
      • SUMMARIZATION
      • QUESTION_ANSWERING
      • UNSPECIFIED
    • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
    • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

      Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

    • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
    • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar quais tokens do pool determinado por TOP_K são selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.

Gerar texto

Gere texto com a função ML.GENERATE_TEXT:

Coluna do comando

Gerar texto usando uma coluna da tabela para fornecer o comando.

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela que contém o comando. Essa tabela precisa ter uma coluna com um nome que corresponda ao nome da coluna de atributo no LLM ajustado. É possível definir o nome da coluna de atributos no LLM usando a opção PROMPT_COL ao criar o modelo. Caso contrário, o nome da coluna de atributos no LLM será prompt por padrão, ou você pode usar um alias para usar uma coluna com nome diferente.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Ela retorna uma resposta curta e moderadamente provável:
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

Consulta do comando

Gerar texto usando uma consulta para fornecer o comando.

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (PROMPT_QUERY),
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • PROMPT_QUERY: uma consulta que fornece os dados do comando.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo 1

O exemplo a seguir mostra uma solicitação com estas características:

  • Solicita um resumo do texto na coluna body da tabela articles.
  • Retorna uma resposta moderadamente longa e mais provável.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

Exemplo 2

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa uma consulta para criar os dados do prompt, concatenando as strings que fornecem prefixos do prompt com as colunas da tabela.
  • Ela retorna uma resposta curta e moderadamente provável:
  • Não retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_tuned_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));