Usa el ajuste y la evaluación para mejorar el rendimiento de los modelos
En este documento, se muestra cómo crear un modelo remoto de BigQuery ML que hace referencia a un modelo gemini-2.0-flash-001
de Vertex AI.
Luego, debes usar ajuste supervisado para ajustar el modelo con nuevos datos de entrenamiento, seguido de la evaluación del modelo con la función ML.EVALUATE
.
El ajuste puede ayudarte a abordar situaciones en las que necesitas personalizar el modelo alojado de Vertex AI, como cuando el comportamiento esperado del modelo es difícil de definir de forma concisa en un mensaje o cuando los mensajes no producen los resultados esperados con la suficiente coherencia. El ajuste supervisado también influye en el modelo de las siguientes maneras:
- Guía al modelo para que devuelva estilos de respuesta específicos, por ejemplo, ser más conciso o más detallado.
- Enseña al modelo nuevos comportamientos, por ejemplo, responde a las instrucciones como un arquetipo específico.
- Hace que el modelo se actualice con información nueva.
En este instructivo, el objetivo es que el modelo genere texto cuyo estilo y contenido se ajusten lo más posible al contenido de verdad fundamental proporcionado.
Roles obligatorios
Para ejecutar este instructivo, necesitas los siguientes roles de Identity and Access Management (IAM):
- Crear y usar conjuntos de datos, conexiones y modelos de BigQuery: Administrador de BigQuery (
roles/bigquery.admin
) - Otorga permisos a la cuenta de servicio de la conexión: Administrador de IAM del proyecto (
roles/resourcemanager.projectIamAdmin
).
Estos roles predefinidos contienen los permisos necesarios para realizar las tareas de este documento. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:
Permisos necesarios
- Crea un conjunto de datos:
bigquery.datasets.create
- Crear una tabla:
bigquery.tables.create
- Crea, delega y usa una conexión:
bigquery.connections.*
- Establece la conexión predeterminada:
bigquery.config.*
- Configura los permisos de la cuenta de servicio:
resourcemanager.projects.getIamPolicy
yresourcemanager.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 o con otros roles predefinidos.
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.
Costos
En este documento, usarás 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 costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información, consulta los siguientes recursos:
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.
Console
En la consola de Google Cloud , ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el comando bq mk
con la marca --location
. Para obtener una lista completa de los parámetros posibles, consulta la
referencia del
comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos establecida enUS
y una descripción deBigQuery 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 omites-d
y--dataset
, el comando crea un conjunto de datos de manera predeterminada.Confirma que se haya 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" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Crea tablas de prueba
Crea tablas de datos de entrenamiento y evaluación basadas en el conjunto de datos públicos task955_wiki_auto_style_transfer de Hugging Face.
Abre Cloud Shell.
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
Crea un modelo de referencia
Crea un modelo remoto sobre el modelo gemini-1.0-flash-002
de Vertex AI.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaració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 de eso, el modelo
gemini_baseline
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Verifica el rendimiento del modelo de referencia
Ejecuta la
función ML.GENERATE_TEXT
con el modelo remoto para ver cómo se desempeña en los datos de evaluación sin ningún
ajuste.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaració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
ml_generate_text_llm_result
yground_truth
, verás que, si bien 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.
Evalúa el modelo de referencia
Para realizar una evaluación más detallada del rendimiento del modelo, usa la
función ML.EVALUATE
.
Esta función calcula las 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.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaració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 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
Puedes ver que 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 vale la pena realizar un ajuste supervisado para ver si puedes mejorar el rendimiento del modelo para este caso de uso.
Crea un modelo ajustado
Crea un modelo remoto muy similar al que creaste en
Crear un modelo, pero esta vez especificando la
cláusula AS SELECT
para proporcionar los datos de entrenamiento para ajustar el modelo.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaració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 de eso, el modelo
gemini_tuned
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Verifica el rendimiento del modelo ajustado
Ejecuta la función ML.GENERATE_TEXT
para ver el rendimiento del modelo ajustado en los
datos de evaluación.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaració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 ajustado produce texto que es mucho más similar en estilo al contenido de verdad fundamental.
Evalúa el modelo ajustado
Usa la función ML.EVALUATE
para ver cómo se comparan las respuestas del modelo ajustado
con las respuestas ideales.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaració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 usó solo 1,408 ejemplos, hay una mejora notoria en el rendimiento, como lo indican las métricas de evaluación más altas.
Limpia
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.