Ajusta un modelo con tus datos
En este documento, se muestra cómo crear un
modelo remoto de BigQuery ML
que haga referencia al
modelo Vertex AI gemini-1.0-pro-002
o a la versión del modelo text-bison
y, luego, configurar el modelo para que realice un ajuste supervisado.
Después de crear el modelo remoto, usa la
función ML.EVALUATE
para evaluar el modelo y confirmar que el rendimiento del modelo se adapte a tu caso
de uso. Luego, puedes usar el modelo junto con la
función ML.GENERATE_TEXT
para analizar texto en una tabla de BigQuery.
Para obtener más información, consulta Ajuste supervisado de modelos de la API de Gemini de Vertex AI o Ajuste supervisado de modelos de texto de la API de PaLM de Vertex AI.
Permisos necesarios
Para crear una conexión, necesitas membresía en el siguiente rol de Identity and Access Management (IAM):
roles/bigquery.connectionAdmin
Para otorgar permisos a la cuenta de servicio de la conexión, necesitas el siguiente permiso:
resourcemanager.projects.setIamPolicy
Para crear el modelo con BigQuery ML, necesitas los siguientes permisos de IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Para ejecutar inferencias, necesitas los siguientes permisos:
bigquery.tables.getData
en la tablabigquery.models.getData
en el modelobigquery.jobs.create
Antes de comenzar
-
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.
Crear una conexión
Crea una conexión de recurso de Cloud y obtén la cuenta de servicio de la conexión.
Selecciona una de las opciones siguientes:
Console
Ve a la página de BigQuery.
Para crear una conexión, haz clic en
Agregar y, luego, en Conexiones a fuentes de datos externas.En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).
En el campo ID de conexión, escribe un nombre para tu conexión.
Haz clic en Crear conexión (Create connection).
Haz clic en Ir a la conexión.
En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.
bq
En un entorno de línea de comandos, crea una conexión:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
El parámetro
--project_id
anula el proyecto predeterminado.Reemplaza lo siguiente:
REGION
: tu región de conexiónPROJECT_ID
: El ID del proyecto de Google Cloud.CONNECTION_ID
: Es un ID para tu conexión.
Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.
Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
El resultado es similar a este:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Agrega la siguiente sección a tu archivo 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
: Es un ID para tu conexión.PROJECT_ID
: El ID del proyecto de Google Cloud.REGION
: tu región de conexión
Otorga acceso a la cuenta de servicio de la conexión
Otorga permiso a tu cuenta de servicio para acceder a Vertex AI. Si no se otorga permiso, se produce un error. Selecciona una de las siguientes opciones:
Console
Ir a la página IAM y administración
Haz clic en
Otorgar acceso.En Principales nuevas, ingresa el ID de la cuenta de servicio que copiaste antes.
Haga clic en Selecciona un rol.
En Filtro, escribe
Vertex AI Service Agent
y, luego, selecciona ese rol.Haz clic en Guardar.
gcloud
Usa el comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
Reemplaza lo siguiente:
PROJECT_NUMBER
: Es el número de tu proyecto.MEMBER
: Es el ID de la cuenta de servicio que copiaste antes.
La cuenta de servicio asociada con tu conexión es una instancia del agente de servicio de delegación de conexión de BigQuery, por lo que está bien asignarle un rol de agente de servicio.
Otorga acceso a la cuenta de servicio predeterminada de Compute Engine
Cuando habilitas la API de Compute Engine, a la Cuenta de servicio predeterminada de Compute Engine se le otorga de forma automática el rol de editor en el proyecto, a menos que tengas inhabilitado este comportamiento para tu proyecto. Si ese es el caso, debes volver a otorgar el rol de editor al acceso a la cuenta de servicio predeterminada de Compute Engine para que tenga permisos suficientes para crear y ajustar un modelo remoto.
Console
Ir a la página IAM y administración
Haz clic en
Otorgar acceso.En Principales nuevas, ingresa el ID de la cuenta de servicio, que es
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Haga clic en Selecciona un rol.
En Selecciona un rol, elige Básico y, luego, selecciona Editor.
Haz clic en Guardar.
gcloud
Usa el comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/editor' --condition=None
Reemplaza lo siguiente:
PROJECT_NUMBER
: Es el número de tu proyecto.MEMBER
: el ID de la cuenta de servicio, que esPROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Crea el agente de servicio de ajuste
Crea un agente de servicio para ejecutar el trabajo de ajuste.
Crea un agente de servicio para un modelo gemini-1.0-pro-002
Crea una instancia del agente de servicio de ajuste seguro de Vertex AI:
Usa el comando
gcloud beta services identity create
para crear el agente de servicio de ajuste:gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
Reemplaza
PROJECT_NUMBER
por el número del proyecto.Usa el comando
gcloud projects add-iam-policy-binding
para otorgar al agente de servicio de ajuste el rol de agente de servicio de ajuste de 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'
Reemplaza
PROJECT_NUMBER
por el número del proyecto.
Crea un agente de servicio para un modelo text-bison
Crea una instancia del agente de servicio de ajuste de AI Platform:
Usa el comando
gcloud beta services identity create
para crear el agente de servicio de ajuste:gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
Reemplaza
PROJECT_NUMBER
por el número del proyecto.Usa el comando
gcloud projects add-iam-policy-binding
para otorgar al agente de servicio de ajuste el rol de agente de servicio de 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'
Reemplaza
PROJECT_NUMBER
por el número del proyecto.
Crea un modelo con ajuste supervisado
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para crear un 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`;
Reemplaza lo siguiente:
PROJECT_ID
: el ID del proyecto en el que se creará el modelo.DATASET_ID
: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en un trabajo de canalización y una región de carga de modelos compatibles.MODEL_NAME
: el nombre del modeloREGION
: Es la región que usa la conexión.CONNECTION_ID
por el ID de la conexión de BigQuery. Esta conexión debe estar en la misma ubicación que el conjunto de datos que usas.Cuando ves los detalles de conexión en la consola de Google Cloud, este es el valor en la última sección del ID de conexión completamente calificado que se muestra en Conexión ID, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT
: Un valorSTRING
que especifica el nombre del modelo que se usará, que en este caso debe sergemini-1.0-pro-002
.MAX_ITERATIONS
: un valorINT64
que especifica la cantidad de pasos que se deben ejecutar para el ajuste supervisado. El valorMAX_ITERATIONS
debe ser de entre1
y∞
.El modelo
gemini-1.0-pro-002
se entrena con épocas en lugar de pasos, por lo que BigQuery ML convierte el valor deMAX_ITERATIONS
en épocas. El valor predeterminado deMAX_ITERATIONS
es la cantidad de filas en los datos de entrada, que equivale a una época. Para usar varias épocas, especifica un múltiplo de la cantidad de filas en tus datos de entrenamiento. Por ejemplo, si tienes 100 filas de datos de entrada y quieres usar dos épocas, especifica200
para el valor del argumento. Si proporcionas un valor que no es un múltiplo de la cantidad de filas en los datos de entrada, BigQuery ML lo redondea hacia arriba a la época más cercana. Por ejemplo, si tienes 100 filas de datos de entrada y especificas101
para el valorMAX_ITERATIONS
, el entrenamiento se realiza con dos épocas.Para obtener más información sobre los parámetros que se usan para ajustar los modelos de
gemini-1.0-pro-002
, consulta Cómo crear un trabajo de ajuste.LEARNING_RATE_MULTIPLIER
: unFLOAT64
Un multiplicador para aplicar a la tasa de aprendizaje recomendada. El valor predeterminado es1.0
.DATA_SPLIT_METHOD
: un valorSTRING
que especifica el método usado para dividir los datos de entrada en conjuntos de entrenamiento y evaluación. Las opciones válidas son las siguientes:AUTO_SPLIT
: BigQuery ML divide los datos de forma automática. La forma en que se dividen los datos varía según la cantidad de filas en la tabla de entrada. Este es el valor predeterminado.RANDOM
: los datos son aleatorios antes de dividirse en conjuntos. Para personalizar la división de datos, puedes usar esta opción con la opciónDATA_SPLIT_EVAL_FRACTION
.CUSTOM
: los datos se dividen con la columna proporcionada en la opciónDATA_SPLIT_COL
. El valorDATA_SPLIT_COL
debe ser el nombre de una columna de tipoBOOL
. Las filas con un valor deTRUE
oNULL
se utilizan como datos de evaluación y las filas con un valor deFALSE
se utilizan como datos de entrenamiento.SEQ
: divide los datos con la columna proporcionada en la opciónDATA_SPLIT_COL
. El valorDATA_SPLIT_COL
debe ser el nombre de una columna de uno de los siguientes tipos:NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
Los datos se ordenan de menor a mayor según la columna especificada.
Las primeras n filas se utilizan como datos de evaluación, en los que n es el valor especificado para
DATA_SPLIT_EVAL_FRACTION
. Las siguientes filas se usan como datos de entrenamiento.NO_SPLIT
: sin división de datos; todos los datos de entrada se usan como datos de entrenamiento.
Para obtener más información acerca de estas opciones de división de datos, consulta
DATA_SPLIT_METHOD
.DATA_SPLIT_EVAL_FRACTION
: un valorFLOAT64
que especifica la fracción de los datos que se usarán como datos de evaluación cuando se realice un ajuste supervisado. Debe ser un valor en el rango[0, 1.0]
. El valor predeterminado es0.2
.Usa esta opción cuando especifiques
RANDOM
oSEQ
como el valor para la opciónDATA_SPLIT_METHOD
. Para personalizar la división de datos, puedes usar la opciónDATA_SPLIT_METHOD
con la opciónDATA_SPLIT_EVAL_FRACTION
.DATA_SPLIT_COL
: un valorSTRING
que especifica el nombre de la columna que se usará para ordenar los datos de entrada en el conjunto de entrenamiento o evaluación. Úsalo cuando especifiquesCUSTOM
oSEQ
como el valor de la opciónDATA_SPLIT_METHOD
.EVALUATION_TASK
: un valorSTRING
que especifica el tipo de tarea que deseas ajustar para que realice el modelo. Las opciones válidas son las siguientes:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
El valor predeterminado es
UNSPECIFIED
.INPUT_PROMPT_COL
: un valorSTRING
que contiene el nombre de la columna de instrucciones en la tabla de datos de entrenamiento que se usará cuando se realice el ajuste supervisado. El valor predeterminado esprompt
.INPUT_LABEL_COLS
: un valorARRAY<<STRING>
que contiene el nombre de la columna de etiqueta en la tabla de datos de entrenamiento para usar en el ajuste supervisado. Solo puedes especificar un elemento en el array. El valor predeterminado es un array vacío. Esto hace quelabel
sea el valor predeterminado del argumentoLABEL_COLUMN
.PROMPT_COLUMN
: la columna de la tabla de datos de entrenamiento que contiene la instrucción para evaluar el contenido de la columnaLABEL_COLUMN
. Esta columna debe ser del tipoSTRING
o convertirse enSTRING
. Si especificas un valor para la opciónINPUT_PROMPT_COL
, debes especificar el mismo valor paraPROMPT_COLUMN
. De lo contrario, este valor debe serprompt
. Si tu tabla no tiene una columnaprompt
, usa un alias para especificar una columna de tabla existente. Por ejemplo,AS SELECT hint AS prompt, label FROM mydataset.mytable
LABEL_COLUMN
: la columna de la tabla de datos de entrenamiento que contiene los ejemplos con los que se entrenará el modelo. Esta columna debe ser del tipoSTRING
o convertirse enSTRING
. Si especificas un valor para la opciónINPUT_LABEL_COLS
, debes especificar el mismo valor paraLABEL_COLUMN
. De lo contrario, este valor debe serlabel
. Si tu tabla no tiene una columnalabel
, usa un alias para especificar una columna de tabla existente. Por ejemplo,AS SELECT prompt, feature AS label FROM mydataset.mytable
.TABLE_PROJECT_ID
: el ID del proyecto que contiene la tabla de datos de entrenamiento.TABLE_DATASET
: el nombre del conjunto de datos que contiene la tabla de datos de entrenamiento.TABLE_NAME
: el nombre de la tabla que contiene los datos que se usarán para entrenar el 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`;
Reemplaza lo siguiente:
PROJECT_ID
: el ID del proyecto en el que se creará el modelo.DATASET_ID
: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en un trabajo de canalización y una región de carga de modelos compatibles.MODEL_NAME
: el nombre del modeloREGION
: Es la región que usa la conexión.CONNECTION_ID
por el ID de la conexión de BigQuery. Esta conexión debe estar en la misma ubicación que el conjunto de datos que usas.Cuando ves los detalles de conexión en la consola de Google Cloud, este es el valor en la última sección del ID de conexión completamente calificado que se muestra en Conexión ID, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT
: un valorSTRING
que especifica el nombre del texto LLM que se usará, que en este caso debe ser cualquier versión del modelotext-bison
.MAX_ITERATIONS
: un valorINT64
que especifica la cantidad de pasos que se deben ejecutar para el ajuste supervisado. El valorMAX_ITERATIONS
debe ser de entre1
y∞
. En general, 100 pasos tardan alrededor de una hora en completarse. El valor predeterminado es300
.El valor
MAX_ITERATIONS
en combinación con el valorACCELERATOR_TYPE
afectan el tamaño del lote que se usa en el entrenamiento de modelos. Para obtener más información sobre cómo se determina el tamaño del lote, consultaMAX_ITERATIONS
. Para obtener más orientación acerca de cómo elegir la cantidad de pasos de entrenamiento, consulta Parámetros de configuración recomendados.LEARNING_RATE_MULTIPLIER
: unFLOAT64
Un multiplicador para aplicar a la tasa de aprendizaje recomendada. El valor predeterminado es1.0
.EARLY_STOP
: un valorBOOL
que determina si se debe detener el ajuste supervisado antes de completar todos los pasos de ajuste. Cuando se establece enTRUE
, detiene el ajuste supervisado si el rendimiento del modelo, según la medición de la exactitud de los tokens previstos, no mejora lo suficiente entre las ejecuciones de evaluación. Cuando se establece enFALSE
, el ajuste supervisado continúa hasta que se completen todos los pasos de ajuste. El valor predeterminado esFALSE
.ACCELERATOR_TYPE
: un valorSTRING
que especifica el tipo de acelerador que se usará para el ajuste supervisado. Las opciones válidas son las siguientes:GPU
: Usa GPU A100 de 80 GB para el ajuste supervisado.TPU
: Usa 64 núcleos del pod de TPU v3 para el ajuste supervisado. Si eliges esta opción, se cumplirá lo siguiente:- Debes ejecutar tu consulta en la región
europe-west4
. Para obtener información acerca de cómo cambiar las opciones de consulta, como la ubicación, consulta Ejecuta una consulta interactiva. - Los cálculos de ajuste supervisado se realizan en la
región
europe-west4
, ya que allí es donde se encuentran los recursos de TPU.
- Debes ejecutar tu consulta en la región
El valor predeterminado es
GPU
. Sin importar la opción que uses, asegúrate de tener cuota suficiente.DATA_SPLIT_METHOD
: un valorSTRING
que especifica el método usado para dividir los datos de entrada en conjuntos de entrenamiento y evaluación. Las opciones válidas son las siguientes:AUTO_SPLIT
: BigQuery ML divide los datos de forma automática. La forma en que se dividen los datos varía según la cantidad de filas en la tabla de entrada. Este es el valor predeterminado.RANDOM
: los datos son aleatorios antes de dividirse en conjuntos. Para personalizar la división de datos, puedes usar esta opción con la opciónDATA_SPLIT_EVAL_FRACTION
.CUSTOM
: los datos se dividen con la columna proporcionada en la opciónDATA_SPLIT_COL
. El valorDATA_SPLIT_COL
debe ser el nombre de una columna de tipoBOOL
. Las filas con un valor deTRUE
oNULL
se utilizan como datos de evaluación y las filas con un valor deFALSE
se utilizan como datos de entrenamiento.SEQ
: divide los datos con la columna proporcionada en la opciónDATA_SPLIT_COL
. El valorDATA_SPLIT_COL
debe ser el nombre de una columna de uno de los siguientes tipos:NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
Los datos se ordenan de menor a mayor según la columna especificada.
Las primeras n filas se utilizan como datos de evaluación, en los que n es el valor especificado para
DATA_SPLIT_EVAL_FRACTION
. Las siguientes filas se usan como datos de entrenamiento.NO_SPLIT
: sin división de datos; todos los datos de entrada se usan como datos de entrenamiento.
Para obtener más información acerca de estas opciones de división de datos, consulta
DATA_SPLIT_METHOD
.DATA_SPLIT_EVAL_FRACTION
: un valorFLOAT64
que especifica la fracción de los datos que se usarán como datos de evaluación cuando se realice un ajuste supervisado. Debe ser un valor en el rango[0, 1.0]
. El valor predeterminado es0.2
.Usa esta opción cuando especifiques
RANDOM
oSEQ
como el valor para la opciónDATA_SPLIT_METHOD
. Para personalizar la división de datos, puedes usar la opciónDATA_SPLIT_METHOD
con la opciónDATA_SPLIT_EVAL_FRACTION
.DATA_SPLIT_COL
: un valorSTRING
que especifica el nombre de la columna que se usará para ordenar los datos de entrada en el conjunto de entrenamiento o evaluación. Úsalo cuando especifiquesCUSTOM
oSEQ
como el valor de la opciónDATA_SPLIT_METHOD
.EVALUATION_TASK
: un valorSTRING
que especifica el tipo de tarea que deseas ajustar para que realice el modelo. Las opciones válidas son las siguientes:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
El valor predeterminado es
UNSPECIFIED
.INPUT_PROMPT_COL
: un valorSTRING
que contiene el nombre de la columna de instrucciones en la tabla de datos de entrenamiento que se usará cuando se realice el ajuste supervisado. El valor predeterminado esprompt
.INPUT_LABEL_COLS
: un valorARRAY<<STRING>
que contiene el nombre de la columna de etiqueta en la tabla de datos de entrenamiento para usar en el ajuste supervisado. Solo puedes especificar un elemento en el array. El valor predeterminado es un array vacío. Esto hace quelabel
sea el valor predeterminado del argumentoLABEL_COLUMN
.PROMPT_COLUMN
: la columna de la tabla de datos de entrenamiento que contiene la instrucción para evaluar el contenido de la columnaLABEL_COLUMN
. Esta columna debe ser del tipoSTRING
o convertirse enSTRING
. Si especificas un valor para la opciónINPUT_PROMPT_COL
, debes especificar el mismo valor paraPROMPT_COLUMN
. De lo contrario, este valor debe serprompt
. Si tu tabla no tiene una columnaprompt
, usa un alias para especificar una columna de tabla existente. Por ejemplo,AS SELECT hint AS prompt, label FROM mydataset.mytable
LABEL_COLUMN
: la columna de la tabla de datos de entrenamiento que contiene los ejemplos con los que se entrenará el modelo. Esta columna debe ser del tipoSTRING
o convertirse enSTRING
. Si especificas un valor para la opciónINPUT_LABEL_COLS
, debes especificar el mismo valor paraLABEL_COLUMN
. De lo contrario, este valor debe serlabel
. Si tu tabla no tiene una columnalabel
, usa un alias para especificar una columna de tabla existente. Por ejemplo,AS SELECT prompt, feature AS label FROM mydataset.mytable
.TABLE_PROJECT_ID
: el ID del proyecto que contiene la tabla de datos de entrenamiento.TABLE_DATASET
: el nombre del conjunto de datos que contiene la tabla de datos de entrenamiento.TABLE_NAME
: el nombre de la tabla que contiene los datos que se usarán para entrenar el modelo.
Evalúa el modelo ajustado
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para evaluar el 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));
Reemplaza lo siguiente:
PROJECT_ID
: el ID del proyecto que contiene el modelo.DATASET_ID
: El ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modeloTABLE_PROJECT_ID
: el ID del proyecto que contiene la tabla de datos de evaluación.TABLE_DATASET
: el nombre del conjunto de datos que contiene la tabla de datos de evaluación.TABLE_NAME
: el nombre de la tabla que contiene los datos de evaluación.La tabla debe tener una columna cuyo nombre coincida con el nombre de la columna de instrucciones que se proporciona durante el entrenamiento de modelos. Puedes proporcionar este valor a través de la opción
prompt_col
durante el entrenamiento de modelos. Si no se especificaprompt_col
, se usa la columnaprompt
en los datos de entrenamiento. Se muestra un error si no hay una columna llamadaprompt
.La tabla debe tener una columna cuyo nombre coincida con el nombre de la columna de etiquetas que se proporciona durante el entrenamiento de modelos. Puedes proporcionar este valor a través de la opción
input_label_cols
durante el entrenamiento de modelos. Si no se especificainput_label_cols
, se usa la columnalabel
en los datos de entrenamiento. Se muestra un error si no hay una columna llamadalabel
.TASK_TYPE
: un valorSTRING
que especifica el tipo de tarea para la que deseas evaluar el modelo. Las opciones válidas son las siguientes:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
TOKENS
: un valorINT64
que establece la cantidad máxima de tokens que se pueden generar en la respuesta. Este valor debe estar en el rango[1,1024]
. Especifica un valor más bajo para respuestas más cortas y un valor más alto para respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el rango[0.0,1.0]
que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es0
.Los valores más bajos para
temperature
son buenos para los mensajes que requieren una respuesta más determinística y menos abierta o creativa, mientras que los valores más altos paratemperature
pueden generar resultados más diversos o creativos. Un valor de0
paratemperature
es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.TOP_K
: un valorINT64
en el rango[1,40]
que determina el grupo inicial de tokens que el modelo considera para la selección. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es40
.TOP_P
: un valorFLOAT64
en el rango[0.0,1.0]
ayuda a determinar qué tokens del grupo determinado porTOP_K
están seleccionados. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es0.95
.
Generar texto
Genera texto con la función ML.GENERATE_TEXT
:
Columna de mensajes
Genera texto usando una columna de tabla para proporcionar el mensaje.
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) );
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoDATASET_ID
: El ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modeloTABLE_NAME
: el nombre de la tabla que contiene el mensaje. Esta tabla debe tener una columna cuyo nombre coincida con el de la columna de atributos en el LLM ajustado. El nombre de la columna de atributos en el LLM se puede configurar con la opciónPROMPT_COL
cuando creas el modelo. De lo contrario, el nombre de la columna de atributos en el LLM esprompt
de forma predeterminada, o puedes usar un alias para usar una columna con nombre diferente.TOKENS
: un valorINT64
que establece la cantidad máxima de tokens que se pueden generar en la respuesta. Este valor debe estar en el rango[1,1024]
. Especifica un valor más bajo para respuestas más cortas y un valor más alto para respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: Un valorFLOAT64
en el rango[0.0,1.0]
que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es0
.Los valores más bajos para
temperature
son buenos para los mensajes que requieren una respuesta más determinística y menos abierta o creativa, mientras que los valores más altos paratemperature
pueden generar resultados más diversos o creativos. Un valor de0
paratemperature
es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.TOP_K
: un valorINT64
en el rango[1,40]
que determina el grupo inicial de tokens que el modelo considera para la selección. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es40
.TOP_P
: Un valorFLOAT64
en el rango[0.0,1.0]
ayuda a determinar la probabilidad de los tokens seleccionados. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es0.95
.FLATTEN_JSON
: un valorBOOL
que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado esFALSE
.STOP_SEQUENCES
: un valorARRAY<STRING>
que quita las cadenas especificadas si se incluyen en respuestas del modelo. Las cadenas coinciden de forma exacta, incluido el uso de mayúsculas. El valor predeterminado es un array vacío.
En el siguiente ejemplo, se muestra una solicitud con estas características:
- Usa la columna
prompt
de la tablaprompts
para el mensaje. - Muestra una respuesta corta y moderadamente probable.
- Muestra el texto generado y los atributos de seguridad en columnas diferentes.
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 de mensajes
Genera texto usando una consulta para proporcionar el mensaje.
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) );
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoDATASET_ID
: El ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modeloPROMPT_QUERY
: una consulta que proporciona los datos del mensaje.TOKENS
: un valorINT64
que establece la cantidad máxima de tokens que se pueden generar en la respuesta. Este valor debe estar en el rango[1,1024]
. Especifica un valor más bajo para respuestas más cortas y un valor más alto para respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: Un valorFLOAT64
en el rango[0.0,1.0]
que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es0
.Los valores más bajos para
temperature
son buenos para los mensajes que requieren una respuesta más determinística y menos abierta o creativa, mientras que los valores más altos paratemperature
pueden generar resultados más diversos o creativos. Un valor de0
paratemperature
es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.TOP_K
: un valorINT64
en el rango[1,40]
que determina el grupo inicial de tokens que el modelo considera para la selección. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es40
.TOP_P
: Un valorFLOAT64
en el rango[0.0,1.0]
ayuda a determinar la probabilidad de los tokens seleccionados. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es0.95
.FLATTEN_JSON
: un valorBOOL
que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado esFALSE
.STOP_SEQUENCES
: un valorARRAY<STRING>
que quita las cadenas especificadas si se incluyen en respuestas del modelo. Las cadenas coinciden de forma exacta, incluido el uso de mayúsculas. El valor predeterminado es un array vacío.
Ejemplo 1
En el siguiente ejemplo, se muestra una solicitud con estas características:
- Solicita un resumen del texto en la columna
body
de la tablaarticles
. - Muestra una respuesta moderadamente larga y más probable.
- Muestra el texto generado y los atributos de seguridad en columnas diferentes.
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));
Ejemplo 2
En el siguiente ejemplo, se muestra una solicitud con estas características:
- Usa una consulta para crear los datos del mensaje con la concatenación de cadenas que proporcionan prefijos del mensaje con columnas de la tabla.
- Muestra una respuesta corta y moderadamente probable.
- No muestra el texto generado y los atributos de seguridad en columnas 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));