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 tabla
    • bigquery.models.getData en el modelo
    • bigquery.jobs.create

Antes de comenzar

  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

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

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para crear una conexión, haz clic en Agregar y, luego, en Conexiones a fuentes de datos externas.

  3. En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).

  4. En el campo ID de conexión, escribe un nombre para tu conexión.

  5. Haz clic en Crear conexión (Create connection).

  6. Haz clic en Ir a la conexión.

  7. En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.

bq

  1. 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ón
    • PROJECT_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...
    
  2. 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 {}
}        
Reemplaza lo siguiente:

  • 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

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haz clic en Otorgar acceso.

  3. En Principales nuevas, ingresa el ID de la cuenta de servicio que copiaste antes.

  4. Haga clic en Selecciona un rol.

  5. En Filtro, escribe Vertex AI Service Agent y, luego, selecciona ese rol.

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

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haz clic en Otorgar acceso.

  3. En Principales nuevas, ingresa el ID de la cuenta de servicio, que es PROJECT_NUMBER-compute@developer.gserviceaccount.com.

  4. Haga clic en Selecciona un rol.

  5. En Selecciona un rol, elige Básico y, luego, selecciona Editor.

  6. 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 es PROJECT_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:

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

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

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

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

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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 modelo
  • REGION: 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 valor STRING que especifica el nombre del modelo que se usará, que en este caso debe ser gemini-1.0-pro-002.
  • MAX_ITERATIONS: un valor INT64 que especifica la cantidad de pasos que se deben ejecutar para el ajuste supervisado. El valor MAX_ITERATIONS debe ser de entre 1 y .

    El modelo gemini-1.0-pro-002 se entrena con épocas en lugar de pasos, por lo que BigQuery ML convierte el valor de MAX_ITERATIONS en épocas. El valor predeterminado de MAX_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, especifica 200 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 especificas 101 para el valor MAX_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: un FLOAT64 Un multiplicador para aplicar a la tasa de aprendizaje recomendada. El valor predeterminado es 1.0.
  • DATA_SPLIT_METHOD: un valor STRING 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ón DATA_SPLIT_EVAL_FRACTION.
    • CUSTOM: los datos se dividen con la columna proporcionada en la opción DATA_SPLIT_COL. El valor DATA_SPLIT_COL debe ser el nombre de una columna de tipo BOOL. Las filas con un valor de TRUE o NULL se utilizan como datos de evaluación y las filas con un valor de FALSE se utilizan como datos de entrenamiento.
    • SEQ: divide los datos con la columna proporcionada en la opción DATA_SPLIT_COL. El valor DATA_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 valor FLOAT64 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 es 0.2.

    Usa esta opción cuando especifiques RANDOM o SEQ como el valor para la opción DATA_SPLIT_METHOD. Para personalizar la división de datos, puedes usar la opción DATA_SPLIT_METHOD con la opción DATA_SPLIT_EVAL_FRACTION.

  • DATA_SPLIT_COL: un valor STRING 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 especifiques CUSTOM o SEQ como el valor de la opción DATA_SPLIT_METHOD.
  • EVALUATION_TASK: un valor STRING 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 valor STRING 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 es prompt.
  • INPUT_LABEL_COLS: un valor ARRAY<<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 que label sea el valor predeterminado del argumento LABEL_COLUMN.
  • PROMPT_COLUMN: la columna de la tabla de datos de entrenamiento que contiene la instrucción para evaluar el contenido de la columna LABEL_COLUMN. Esta columna debe ser del tipo STRING o convertirse en STRING. Si especificas un valor para la opción INPUT_PROMPT_COL, debes especificar el mismo valor para PROMPT_COLUMN. De lo contrario, este valor debe ser prompt. Si tu tabla no tiene una columna prompt, 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 tipo STRING o convertirse en STRING. Si especificas un valor para la opción INPUT_LABEL_COLS, debes especificar el mismo valor para LABEL_COLUMN. De lo contrario, este valor debe ser label. Si tu tabla no tiene una columna label, 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 modelo
  • REGION: 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 valor STRING que especifica el nombre del texto LLM que se usará, que en este caso debe ser cualquier versión del modelo text-bison.
  • MAX_ITERATIONS: un valor INT64 que especifica la cantidad de pasos que se deben ejecutar para el ajuste supervisado. El valor MAX_ITERATIONS debe ser de entre 1 y . En general, 100 pasos tardan alrededor de una hora en completarse. El valor predeterminado es 300.

    El valor MAX_ITERATIONS en combinación con el valor ACCELERATOR_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, consulta MAX_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: un FLOAT64 Un multiplicador para aplicar a la tasa de aprendizaje recomendada. El valor predeterminado es 1.0.
  • EARLY_STOP: un valor BOOL que determina si se debe detener el ajuste supervisado antes de completar todos los pasos de ajuste. Cuando se establece en TRUE, 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 en FALSE, el ajuste supervisado continúa hasta que se completen todos los pasos de ajuste. El valor predeterminado es FALSE.
  • ACCELERATOR_TYPE: un valor STRING 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.

    El valor predeterminado es GPU. Sin importar la opción que uses, asegúrate de tener cuota suficiente.

  • DATA_SPLIT_METHOD: un valor STRING 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ón DATA_SPLIT_EVAL_FRACTION.
    • CUSTOM: los datos se dividen con la columna proporcionada en la opción DATA_SPLIT_COL. El valor DATA_SPLIT_COL debe ser el nombre de una columna de tipo BOOL. Las filas con un valor de TRUE o NULL se utilizan como datos de evaluación y las filas con un valor de FALSE se utilizan como datos de entrenamiento.
    • SEQ: divide los datos con la columna proporcionada en la opción DATA_SPLIT_COL. El valor DATA_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 valor FLOAT64 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 es 0.2.

    Usa esta opción cuando especifiques RANDOM o SEQ como el valor para la opción DATA_SPLIT_METHOD. Para personalizar la división de datos, puedes usar la opción DATA_SPLIT_METHOD con la opción DATA_SPLIT_EVAL_FRACTION.

  • DATA_SPLIT_COL: un valor STRING 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 especifiques CUSTOM o SEQ como el valor de la opción DATA_SPLIT_METHOD.
  • EVALUATION_TASK: un valor STRING 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 valor STRING 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 es prompt.
  • INPUT_LABEL_COLS: un valor ARRAY<<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 que label sea el valor predeterminado del argumento LABEL_COLUMN.
  • PROMPT_COLUMN: la columna de la tabla de datos de entrenamiento que contiene la instrucción para evaluar el contenido de la columna LABEL_COLUMN. Esta columna debe ser del tipo STRING o convertirse en STRING. Si especificas un valor para la opción INPUT_PROMPT_COL, debes especificar el mismo valor para PROMPT_COLUMN. De lo contrario, este valor debe ser prompt. Si tu tabla no tiene una columna prompt, 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 tipo STRING o convertirse en STRING. Si especificas un valor para la opción INPUT_LABEL_COLS, debes especificar el mismo valor para LABEL_COLUMN. De lo contrario, este valor debe ser label. Si tu tabla no tiene una columna label, 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

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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 modelo
    • TABLE_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 especifica prompt_col, se usa la columna prompt en los datos de entrenamiento. Se muestra un error si no hay una columna llamada prompt.

      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 especifica input_label_cols, se usa la columna label en los datos de entrenamiento. Se muestra un error si no hay una columna llamada label.

    • TASK_TYPE: un valor STRING 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 valor INT64 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 es 128.
    • TEMPERATURE: un valor FLOAT64 en el rango [0.0,1.0] que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es 0.

      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 para temperature pueden generar resultados más diversos o creativos. Un valor de 0 para temperature es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.

    • TOP_K: un valor INT64 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 es 40.
    • TOP_P: un valor FLOAT64 en el rango [0.0,1.0] ayuda a determinar qué tokens del grupo determinado por TOP_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 es 0.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 proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: el nombre del modelo
  • TABLE_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ón PROMPT_COL cuando creas el modelo. De lo contrario, el nombre de la columna de atributos en el LLM es prompt de forma predeterminada, o puedes usar un alias para usar una columna con nombre diferente.
  • TOKENS: un valor INT64 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 es 128.
  • TEMPERATURE: Un valor FLOAT64 en el rango [0.0,1.0] que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es 0.

    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 para temperature pueden generar resultados más diversos o creativos. Un valor de 0 para temperature es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.

  • TOP_K: un valor INT64 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 es 40.
  • TOP_P: Un valor FLOAT64 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 es 0.95.
  • FLATTEN_JSON: un valor BOOL que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado es FALSE.
  • STOP_SEQUENCES: un valor ARRAY<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 tabla prompts 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 proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: el nombre del modelo
  • PROMPT_QUERY: una consulta que proporciona los datos del mensaje.
  • TOKENS: un valor INT64 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 es 128.
  • TEMPERATURE: Un valor FLOAT64 en el rango [0.0,1.0] que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es 0.

    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 para temperature pueden generar resultados más diversos o creativos. Un valor de 0 para temperature es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.

  • TOP_K: un valor INT64 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 es 40.
  • TOP_P: Un valor FLOAT64 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 es 0.95.
  • FLATTEN_JSON: un valor BOOL que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado es FALSE.
  • STOP_SEQUENCES: un valor ARRAY<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 tabla articles.
  • 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));