Configura un modelo de juez

Las métricas basadas en modelos proporcionan varios enfoques para personalizar y ayudarte a generar métricas de evaluación según tus criterios y casos de uso. En esta página, se describe cómo configurar tu modelo de juez para tu caso de uso ideal.

Para conocer el flujo de trabajo de evaluación básico, consulta la guía de inicio rápido de Gen AI Evaluation Service. La serie de personalización avanzada del modelo de juez incluye las siguientes páginas:

  1. Evalúa un modelo de juez
  2. Indicaciones para la personalización del modelo de juez
  3. Configura un modelo de juez (página actual)

Descripción general

Tienes las siguientes opciones para configurar tu modelo de juez y mejorar la calidad:

  • Instrucciones del sistema: El modelo de juez puede procesar un conjunto de instrucciones antes de procesar las instrucciones de evaluación.
  • Configuraciones del modelo de juez:
    • Inversión de respuestas: Invierte las respuestas del modelo de referencia y del modelo candidato para reducir el sesgo del modelo de juez durante la evaluación.
    • Muestreo múltiple: Ajusta la cantidad de veces que se llama al modelo juez para la puntuación de evaluación y, así, mejorar la coherencia.
    • Modelo de juez ajustado: Usa un LLM ajustado como modelo de juez.

Instrucciones del sistema

Los modelos de Gemini pueden recibir instrucciones del sistema, que son un conjunto de instrucciones que afectan la forma en que el modelo procesa las instrucciones. Puedes usar instrucciones del sistema cuando inicializas o generas contenido a partir de un modelo para especificar el comportamiento a nivel del producto, como roles o arquetipos, información contextual y estilo y tono de la explicación. Por lo general, el modelo del juez otorga más importancia a las instrucciones del sistema que a las instrucciones de entrada.

Para obtener una lista de los modelos que admiten instrucciones del sistema, consulta Modelos compatibles.

En el siguiente ejemplo, se usa el SDK de Vertex AI para agregar system_instruction a nivel de la métrica para PointwiseMetric:

system_instruction = "You are an expert evaluator."
linguistic_acceptability = PointwiseMetric(
    metric="linguistic_acceptability",
    metric_prompt_template=linguistic_acceptability_metric_prompt_template,
    system_instruction=system_instruction,
)

eval_result = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[linguistic_acceptability]
).evaluate()

Puedes usar el mismo enfoque con PairwiseMetric.

Configuración del modelo de juez

Puedes personalizar aún más el modelo de juez con autorater_config:

  • Inversión de respuestas: Invierte las respuestas del modelo de referencia y del modelo candidato para reducir el sesgo del modelo de juez durante la evaluación.

  • Muestreo múltiple: Ajusta la cantidad de veces que se llama al modelo juez para la puntuación de evaluación y, así, mejorar la coherencia.

  • Modelo de juez ajustado: Usa un LLM ajustado como modelo de juez.

Inversión de la respuesta

En el caso de PairwiseMetrics, el servicio de evaluación de IA generativa toma las respuestas del modelo de referencia y del modelo candidato. El modelo de juez evalúa qué respuesta se alinea mejor con los criterios del metric_prompt_template. Sin embargo, el modelo de juez puede estar sesgado hacia el modelo de referencia o el modelo candidato en ciertos parámetros de configuración.

Para reducir el sesgo en los resultados de la evaluación, puedes habilitar la inversión de respuestas, en la que la mitad de las llamadas al modelo de juez invierte la respuesta del modelo de referencia y del modelo candidato con el SDK de Vertex AI:

from vertexai.preview.evaluation import AutoraterConfig

pairwise_relevance_prompt_template = """
    # Instruction


    ### Response A
    {baseline_model_response}

    ### Response B
    {candidate_model_response}
"""

my_pairwise_metric = PairwiseMetric(
    metric="my_pairwise_metric",
    metric_prompt_template=pairwise_relevance_prompt_template,
    candidate_response_field_name = "candidate_model_response",
    baseline_response_field_name = "baseline_model_response"
)


# Define an AutoraterConfig with flip_enabled
my_autorater_config = AutoraterConfig(flip_enabled=True)

# Define an EvalTask with autorater_config
flip_enabled_eval_result = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[my_pairwise_metric],
    autorater_config=my_autorater_config,
).evaluate()

Muestreo múltiple

Cuando se realiza la evaluación, el modelo del juez puede mostrar cierta aleatoriedad en sus respuestas. El muestreo adicional puede ayudar a negar la aleatoriedad inherente del modelo de juez y generar resultados más coherentes.

Sin embargo, aumentar el muestreo también incrementa la latencia para completar la solicitud. Puedes actualizar el valor del recuento de muestreo con AutoraterConfig a un número entero entre 1 y 32. Recomendamos usar el valor predeterminado sampling_count de 4 para equilibrar los dos factores de aleatoriedad y latencia.

Con el SDK de Vertex AI, puedes especificar la cantidad de muestras que se ejecutan para cada solicitud:

from vertexai.preview.evaluation import AutoraterConfig

# Define customized sampling count in AutoraterConfig
autorater_config = AutoraterConfig(sampling_count=6)

# Run evaluation with the sampling count.
eval_result = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[METRICS],
    autorater_config=autorater_config
).evaluate()

Modelo de juez ajustado

Si tienes buenos datos de ajuste para tu caso de uso de evaluación, puedes usar el SDK de Vertex AI para ajustar un modelo de Gemini como modelo de juez y usar el modelo ajustado para la evaluación. Puedes especificar un modelo ajustado como el modelo de juez a través de AutoraterConfig:

from vertexai.preview.evaluation import {
   AutoraterConfig,
   PairwiseMetric,
   tune_autorater,
   evaluate_autorater,
}

# Tune a model to be the judge model. The tune_autorater helper function returns an AutoraterConfig with the judge model set as the tuned model.
autorater_config: AutoRaterConfig = tune_autorater(
    base_model="gemini-2.0-flash",
    train_dataset=f"{BUCKET_URI}/train/sft_train_samples.jsonl",
    validation_dataset=f"{BUCKET_URI}/val/sft_val_samples.jsonl",
    tuned_model_display_name=tuned_model_display_name,
)

# Alternatively, you can set up the judge model with an existing tuned model endpoint
autorater_config = AutoraterConfig(autorater_model=TUNED_MODEL)

# Use the tuned judge model
eval_result = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[METRICS],
    autorater_config=autorater_config,
).evaluate()

¿Qué sigue?