Usar la optimización y la evaluación para mejorar el rendimiento de los modelos

En este documento se explica cómo crear un modelo remoto de BigQuery ML que haga referencia a un modelo de Vertex AI gemini-2.0-flash-001. Después, usa la puesta a punto supervisada para ajustar el modelo con nuevos datos de entrenamiento y, a continuación, evalúa el modelo con la función ML.EVALUATE.

El ajuste puede ayudarte a abordar situaciones en las que necesites personalizar el modelo de Vertex AI alojado, como cuando el comportamiento esperado del modelo sea difícil de definir de forma concisa en una petición o cuando las peticiones no produzcan los resultados esperados con la suficiente coherencia. El ajuste supervisado también influye en el modelo de las siguientes formas:

  • Indica al modelo que devuelva estilos de respuesta específicos, por ejemplo, que sea más conciso o más detallado.
  • Enseña al modelo nuevos comportamientos, como responder a las peticiones con una personalidad específica.
  • Hace que el modelo se actualice con nueva información.

En este tutorial, el objetivo es que el modelo genere texto cuyo estilo y contenido se ajusten lo máximo posible al contenido de referencia proporcionado.

Roles obligatorios

Para completar este tutorial, necesitas los siguientes roles de Gestión de Identidades y Accesos (IAM):

  • Crear y usar conjuntos de datos, conexiones y modelos de BigQuery: Administrador de BigQuery (roles/bigquery.admin).
  • Concede permisos a la cuenta de servicio de la conexión: administrador de gestión de identidades y accesos del proyecto (roles/resourcemanager.projectIamAdmin).

Estos roles predefinidos contienen los permisos necesarios para realizar las tareas descritas en este documento. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

  • Crea un conjunto de datos: bigquery.datasets.create
  • Crear una tabla: bigquery.tables.create
  • Crear, delegar y usar una conexión: bigquery.connections.*
  • Definir la conexión predeterminada: bigquery.config.*
  • Define los permisos de la cuenta de servicio: resourcemanager.projects.getIamPolicy y resourcemanager.projects.setIamPolicy
  • Crea un modelo y ejecuta la inferencia:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Antes de empezar

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

    Roles required to select or create a project

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

    Go to project selector

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

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

    Roles required to enable APIs

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

    Enable the APIs

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

  • BigQuery: You incur costs for the queries that you run in BigQuery.
  • BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
  • Vertex AI: You incur costs for calls to and supervised tuning of the gemini-1.0-flash-002 model.

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Para obtener más información, consulta los siguientes recursos:

Crear conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.

Consola

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

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haga clic en Ver acciones > Crear conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, introduce bqml_tutorial.

    • En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).

    • Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos, usa el comando bq mk con la marca --location. Para ver una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos definida como US y la descripción BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    En lugar de usar la marca --dataset, el comando usa el acceso directo -d. Si omite -d y --dataset, el comando creará un conjunto de datos de forma predeterminada.

  2. Confirma que se ha creado el conjunto de datos:

    bq ls

API

Llama al método datasets.insert con un recurso de conjunto de datos definido.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrames

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de los DataFrames de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

Crear tablas de prueba

Crea tablas de datos de entrenamiento y evaluación basadas en el conjunto de datos público task955_wiki_auto_style_transfer de Hugging Face.

  1. Abre Cloud Shell.

  2. En Cloud Shell, ejecuta los siguientes comandos para crear tablas de datos de prueba y evaluación:

    python3 -m pip install pandas pyarrow fsspec huggingface_hub
    
    python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);"
    
    python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);"
    
    bq rm -t bqml_tutorial.wiki_auto_style_transfer_train
    
    bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid
    
    bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING
    
    bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
    

Crear un modelo de referencia

Crea un modelo remoto sobre el modelo gemini-1.0-flash-002 de Vertex AI.

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

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción para crear un modelo remoto:

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline`
    REMOTE WITH CONNECTION DEFAULT
    OPTIONS (ENDPOINT ='gemini-2.0-flash-001');

    La consulta tarda varios segundos en completarse. Después, el modelo gemini_baseline aparece en el conjunto de datos bqml_tutorial del panel Explorador. Como la consulta usa una instrucción CREATE MODEL para crear un modelo, no hay resultados de consulta.

Consultar el rendimiento del modelo de referencia

Ejecuta la función ML.GENERATE_TEXT con el modelo remoto para ver cómo se comporta con los datos de evaluación sin ningún ajuste.

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

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción:

    SELECT ml_generate_text_llm_result, ground_truth
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_baseline`,
        (
          SELECT
            input AS prompt, output AS ground_truth
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
          LIMIT 10
        ),
        STRUCT(TRUE AS flatten_json_output));

    Si examinas los datos de salida y comparas los valores de ml_generate_text_llm_result y ground_truth, verás que, aunque el modelo de referencia genera texto que refleja con precisión los hechos proporcionados en el contenido de referencia, el estilo del texto es bastante diferente.

Evaluar el modelo de referencia

Para llevar a cabo una evaluación más detallada del rendimiento del modelo, usa la función ML.EVALUATE. Esta función calcula métricas del modelo que miden la precisión y la calidad del texto generado para ver cómo se comparan las respuestas del modelo con las respuestas ideales.

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

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción:

    SELECT *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.gemini_baseline`,
        (
          SELECT
            input AS input_text, output AS output_text
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
        ),
        STRUCT('text_generation' AS task_type));

El resultado es similar al siguiente:

   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.23317359667074181 | 0.37809145226740043 | 0.45902937167791508 | 0.40956844061733139 | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   

Como puedes ver, el rendimiento del modelo de referencia no es malo, pero la similitud del texto generado con la verdad fundamental es baja, según las métricas de evaluación. Esto indica que merece la pena realizar un ajuste supervisado para ver si puedes mejorar el rendimiento del modelo en este caso práctico.

Crear un modelo ajustado

Crea un modelo remoto muy similar al que creaste en Crear un modelo, pero esta vez especifica la cláusula AS SELECT para proporcionar los datos de entrenamiento y ajustar el modelo.

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

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción para crear un modelo remoto:

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned`
      REMOTE
        WITH CONNECTION DEFAULT
      OPTIONS (
        endpoint = 'gemini-2.0-flash-001',
        max_iterations = 500,
        data_split_method = 'no_split')
    AS
    SELECT
      input AS prompt, output AS label
    FROM `bqml_tutorial.wiki_auto_style_transfer_train`;

    La consulta tarda unos minutos en completarse. Después, el modelo gemini_tuned aparece en el conjunto de datos bqml_tutorial del panel Explorador. Como la consulta usa una instrucción CREATE MODEL para crear un modelo, no hay resultados de la consulta.

Comprobar el rendimiento del modelo ajustado

Ejecuta la función ML.GENERATE_TEXT para ver el rendimiento del modelo ajustado con los datos de evaluación.

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

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción:

    SELECT ml_generate_text_llm_result, ground_truth
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_tuned`,
        (
          SELECT
            input AS prompt, output AS ground_truth
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
          LIMIT 10
        ),
        STRUCT(TRUE AS flatten_json_output));

    Si examinas los datos de salida, verás que el modelo optimizado genera un texto cuyo estilo es mucho más parecido al del contenido de referencia.

Evaluar el modelo optimizado

Usa la función ML.EVALUATE para ver cómo se comparan las respuestas del modelo ajustado con las respuestas ideales.

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

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción:

    SELECT *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.gemini_tuned`,
        (
          SELECT
            input AS prompt, output AS label
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
        ),
        STRUCT('text_generation' AS task_type));

El resultado es similar al siguiente:

   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.416868792119966   | 0.642001000843349   | 0.55910008048151372 | 0.5907226262084847  | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   

Puedes ver que, aunque el conjunto de datos de entrenamiento solo ha usado 1408 ejemplos, el rendimiento ha mejorado notablemente, tal como indican las métricas de evaluación más altas.

Limpieza

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.