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 tabelabigquery.models.getData
no modelobigquery.jobs.create
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection,Vertex AI, and Compute Engine 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
Acessar a página do BigQuery.
Para criar uma conexão, clique em
Adicionar e em Conexões com fontes de dados externas.Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (Cloud Resource).
No campo ID da conexão, insira um nome para a conexão.
Clique em Criar conexão.
Clique em Ir para conexão.
No painel Informações da conexão, copie o ID da conta de serviço para uso em uma etapa posterior.
bq
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ãoPROJECT_ID
: o ID do projeto do Google CloudCONNECTION_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...
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 {} }
CONNECTION_ID
: um ID para sua conexãoPROJECT_ID
: o ID do projeto do Google CloudREGION
: 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
Acesse a página IAM e administrador.
Clique em
Conceder acesso.Em Novos principais, insira o ID da conta de serviço que você copiou anteriormente.
Clique em Selecionar papel.
Em Filtro, digite
Vertex AI Service Agent
e selecione esse papel.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
Acesse a página IAM e administrador.
Clique em
Conceder acesso.Em Novos principais, insira o ID da conta de serviço, que é
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Clique em Selecionar papel.
Em Selecionar um papel, escolha Básico e selecione Editor.
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:
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.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:
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.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
No Console do Google Cloud, acesse a página BigQuery.
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 modeloREGION
: 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 valorSTRING
que especifica o nome do modelo a ser usado, que neste caso deve sergemini-1.0-pro-002
:MAX_ITERATIONS
: um valorINT64
que especifica o número de etapas a serem executadas para o ajuste supervisionado. O valorMAX_ITERATIONS
precisa estar entre1
e∞
.O modelo
gemini-1.0-pro-002
treina usando períodos de etapas, então o BigQuery ML converte a ValorMAX_ITERATIONS
para períodos. O valor padrão paraMAX_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, especifique200
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 especificar101
para o valorMAX_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
UmFLOAT64
multiplicador para aplicar à taxa de aprendizado recomendada. O valor padrão é1.0
.DATA_SPLIT_METHOD
: um valorSTRING
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çãoDATA_SPLIT_EVAL_FRACTION
.CUSTOM
: os dados são divididos usando a coluna fornecida na opçãoDATA_SPLIT_COL
. O valorDATA_SPLIT_COL
precisa ser o nome de uma coluna do tipoBOOL
. Linhas com valorTRUE
ouNULL
são usadas como dados de avaliação e as linhas com valorFALSE
como dados de treinamento.SEQ
: divide os dados usando a coluna fornecida na opçãoDATA_SPLIT_COL
. O valorDATA_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 valorFLOAT64
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
ouSEQ
como o valor da opçãoDATA_SPLIT_METHOD
. Para personalizar a divisão de dados, use a opçãoDATA_SPLIT_METHOD
com a opçãoDATA_SPLIT_EVAL_FRACTION
.DATA_SPLIT_COL
: um valorSTRING
que especifica o nome da coluna a ser usada para classificar os dados de entrada no conjunto de treinamento ou avaliação. Use quando especificarCUSTOM
ouSEQ
como o valor da opçãoDATA_SPLIT_METHOD
.EVALUATION_TASK
: um valorSTRING
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 valorSTRING
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 valorARRAY<<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 quelabel
seja o valor padrão do argumentoLABEL_COLUMN
.PROMPT_COLUMN
: a coluna na tabela de dados de treinamento que contém o comando para avaliar o conteúdo na colunaLABEL_COLUMN
. Essa coluna precisa ser do tipoSTRING
ou ser convertida paraSTRING
. Se você especificar um valor para a opçãoINPUT_PROMPT_COL
, precisará especificar o mesmo valor paraPROMPT_COLUMN
. Caso contrário, esse valor precisará serprompt
. Se a tabela não tiver uma colunaprompt
, 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 tipoSTRING
ou ser convertida paraSTRING
. Se você especificar um valor para a opçãoINPUT_LABEL_COLS
, precisará especificar o mesmo valor paraLABEL_COLUMN
. Caso contrário, esse valor precisará serlabel
. Se a tabela não tiver uma colunalabel
, 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 modeloREGION
: 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 valorSTRING
que especifica o nome do modelo a ser usado. Nesse caso, é necessário que seja qualquer versão do modelotext-bison
.MAX_ITERATIONS
: um valorINT64
que especifica o número de etapas a serem executadas para o ajuste supervisionado. O valorMAX_ITERATIONS
precisa estar entre1
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 valorACCELERATOR_TYPE
afeta o tamanho do lote usado no treinamento de modelo. Para mais informações sobre como o tamanho do lote é determinado, consulteMAX_ITERATIONS
. Para mais orientações sobre como escolher o número de etapas de treinamento, consulte Configurações recomendadas.LEARNING_RATE_MULTIPLIER
UmFLOAT64
multiplicador para aplicar à taxa de aprendizado recomendada. O valor padrão é1.0
.EARLY_STOP
: um valorBOOL
que determina se o ajuste supervisionado será interrompido antes de concluir todas as etapas. Quando definido comoTRUE
, 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 comoFALSE
, o ajuste supervisionado continua até que todas as etapas de ajuste sejam concluídas. O valor padrão éFALSE
.ACCELERATOR_TYPE
: um valorSTRING
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.
- Execute sua consulta na região
O valor padrão é
GPU
. Seja qual for a opção usada, verifique se você tem cota suficiente.DATA_SPLIT_METHOD
: um valorSTRING
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çãoDATA_SPLIT_EVAL_FRACTION
.CUSTOM
: os dados são divididos usando a coluna fornecida na opçãoDATA_SPLIT_COL
. O valorDATA_SPLIT_COL
precisa ser o nome de uma coluna do tipoBOOL
. Linhas com valorTRUE
ouNULL
são usadas como dados de avaliação e as linhas com valorFALSE
como dados de treinamento.SEQ
: divide os dados usando a coluna fornecida na opçãoDATA_SPLIT_COL
. O valorDATA_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 valorFLOAT64
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
ouSEQ
como o valor da opçãoDATA_SPLIT_METHOD
. Para personalizar a divisão de dados, use a opçãoDATA_SPLIT_METHOD
com a opçãoDATA_SPLIT_EVAL_FRACTION
.DATA_SPLIT_COL
: um valorSTRING
que especifica o nome da coluna a ser usada para classificar os dados de entrada no conjunto de treinamento ou avaliação. Use quando especificarCUSTOM
ouSEQ
como o valor da opçãoDATA_SPLIT_METHOD
.EVALUATION_TASK
: um valorSTRING
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 valorSTRING
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 valorARRAY<<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 quelabel
seja o valor padrão do argumentoLABEL_COLUMN
.PROMPT_COLUMN
: a coluna na tabela de dados de treinamento que contém o comando para avaliar o conteúdo na colunaLABEL_COLUMN
. Essa coluna precisa ser do tipoSTRING
ou ser convertida paraSTRING
. Se você especificar um valor para a opçãoINPUT_PROMPT_COL
, precisará especificar o mesmo valor paraPROMPT_COLUMN
. Caso contrário, esse valor precisará serprompt
. Se a tabela não tiver uma colunaprompt
, 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 tipoSTRING
ou ser convertida paraSTRING
. Se você especificar um valor para a opçãoINPUT_LABEL_COLS
, precisará especificar o mesmo valor paraLABEL_COLUMN
. Caso contrário, esse valor precisará serlabel
. Se a tabela não tiver uma colunalabel
, 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
No Console do Google Cloud, acesse a página BigQuery.
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 modeloTABLE_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. Seprompt_col
não for especificado, será usada a coluna chamadaprompt
nos dados de treinamento. Um erro será retornado se não houver uma coluna chamadaprompt
.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. Seinput_label_cols
não for especificado, será usada a coluna chamadalabel
nos dados de treinamento. Um erro será retornado se não houver uma coluna chamadalabel
.TASK_TYPE
: um valorSTRING
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 valorINT64
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 valorFLOAT64
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 paratemperature
podem gerar resultados mais diversos ou criativos. Um valor de0
paratemperature
é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.TOP_K
: um valorINT64
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 valorFLOAT64
no intervalo[0.0,1.0]
ajuda a determinar quais tokens do pool determinado porTOP_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 modeloTABLE_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çãoPROMPT_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 valorINT64
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 valorFLOAT64
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 paratemperature
podem gerar resultados mais diversos ou criativos. Um valor de0
paratemperature
é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.TOP_K
: um valorINT64
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 valorFLOAT64
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 valorBOOL
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 valorARRAY<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 tabelaprompts
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 modeloPROMPT_QUERY
: uma consulta que fornece os dados do comando.TOKENS
: um valorINT64
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 valorFLOAT64
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 paratemperature
podem gerar resultados mais diversos ou criativos. Um valor de0
paratemperature
é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.TOP_K
: um valorINT64
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 valorFLOAT64
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 valorBOOL
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 valorARRAY<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 tabelaarticles
. - 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));