Define tus métricas de evaluación.

Después de crear un conjunto de datos de evaluación, el siguiente paso es definir las métricas que se usarán para medir el rendimiento del modelo. Los modelos de IA generativa pueden crear aplicaciones para una amplia variedad de tareas, y el Gen AI Evaluation Service usa un marco de trabajo basado en pruebas que transforma la evaluación de calificaciones subjetivas en resultados objetivos y prácticos.

Para obtener más información sobre los tipos de métricas, consulta la sección Métricas de evaluación en la página de descripción general del servicio de evaluación de Gen AI.

Métrica de calidad general

Puedes acceder a las rúbricas adaptables a través del SDK. Te recomendamos que comiences con GENERAL_QUALITY como valor predeterminado.

GENERAL_QUALITY genera un conjunto de rúbricas que abarcan una variedad de tareas, como seguir instrucciones, aplicar formato, tono y estilo, según la instrucción de entrada. Puedes combinar la generación de rúbricas con la validación en la siguiente línea de código:

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.GENERAL_QUALITY,
    ],
)

Puedes generar rúbricas por separado (para revisarlas o volver a usarlas en diferentes modelos y agentes) antes de usarlas para evaluar las respuestas del modelo:

from vertexai import types

# Use GENERAL_QUALITY recipe to generate rubrics, and store them
# as a rubric group named "general_quality_rubrics".
data_with_rubrics = client.evals.generate_rubrics(
    src=eval_dataset_df,
    rubric_group_name="general_quality_rubrics",
    predefined_spec_name=types.RubricMetric.GENERAL_QUALITY,
)

# Specify the group of rubrics to use for the evaluation.
eval_result = client.evals.evaluate(
    dataset=data_with_rubrics,
    metrics=[types.RubricMetric.GENERAL_QUALITY(
      rubric_group_name="general_quality_rubrics",
    )],
)

También puedes guiar a GENERAL_QUALITY con lenguaje natural guidelines para que la generación de la rúbrica se centre en los criterios que más te importan. Luego, el servicio de evaluación de IA generativa genera rúbricas que abarcan tanto sus tareas predeterminadas como los lineamientos que especificas.

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.GENERAL_QUALITY(
            metric_spec_parameters={
                "guidelines": "The response must maintain a professional tone and must not provide financial advice."
            }
        )
    ],
)

Métricas de calidad objetivo

Si necesitas evaluar un aspecto más específico de la calidad del modelo, puedes usar métricas que generen rúbricas enfocadas en un área específica. Por ejemplo:

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.TEXT_QUALITY,
        types.RubricMetric.INSTRUCTION_FOLLOWING,
    ],
)

El servicio de evaluación de IA generativa ofrece los siguientes tipos de rúbricas adaptativas:

  • INSTRUCTION_FOLLOWING: Mide qué tan bien la respuesta se ajusta a las instrucciones y restricciones específicas de la instrucción.

  • TEXT_QUALITY: Se enfoca específicamente en la calidad lingüística de la respuesta y evalúa la fluidez, la coherencia y la gramática.

Conversación de varios turnos

  • multi_turn_general_quality: Evalúa la calidad general de la conversación en un diálogo de varios turnos.

  • multi_turn_text_quality: Evalúa la calidad del texto de las respuestas en un diálogo de varios turnos.

Evaluación de agentes

  • final_response_reference_free: Evalúa la calidad de la respuesta final de un agente sin necesidad de una respuesta de referencia.

  • final_response_quality: Usa rúbricas adaptables para evaluar la calidad de la respuesta final de un agente según su configuración y el uso de herramientas.

  • hallucination: Evalúa si las respuestas de texto de un agente se basan en la configuración del agente y el uso de herramientas.

  • tool_use_quality: Evalúa la corrección de las llamadas a funciones que realiza el agente para responder a una instrucción del usuario.

Para obtener más detalles sobre las rúbricas adaptables segmentadas, consulta Detalles de la rúbrica adaptable.

Rúbricas estáticas

Una rúbrica estática aplica un único conjunto fijo de lineamientos de puntuación a cada ejemplo de tu conjunto de datos. Este enfoque basado en la puntuación es útil cuando necesitas medir el rendimiento en comparación con una comparativa coherente en todas las instrucciones.

Por ejemplo, la siguiente rúbrica estática califica la calidad del texto en una escala del 1 al 5:

5: (Very good). Exceptionally clear, coherent, fluent, and concise. Fully adheres to instructions and stays grounded.
4: (Good). Well-written, coherent, and fluent. Mostly adheres to instructions and stays grounded. Minor room for improvement.
3: (Ok). Adequate writing with decent coherence and fluency. Partially fulfills instructions and may contain minor ungrounded information. Could be more concise.
2: (Bad). Poorly written, lacking coherence and fluency. Struggles to adhere to instructions and may include ungrounded information. Issues with conciseness.
1: (Very bad). Very poorly written, incoherent, and non-fluent. Fails to follow instructions and contains substantial ungrounded information. Severely lacking in conciseness.

Gen AI Evaluation Service proporciona las siguientes métricas de rúbrica estáticas:

  • GROUNDING: Verifica la facticidad y la coherencia en comparación con un texto fuente proporcionado (verdad fundamental). Esta métrica es fundamental para los sistemas de RAG.

  • SAFETY: Evalúa la respuesta del modelo para detectar incumplimientos de las políticas de seguridad, como incitación al odio o a la violencia, o contenido peligroso.

También puedes usar plantillas de instrucciones de métricas, como FLUENCY.

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.SAFETY,
        types.RubricMetric.GROUNDING,
        types.RubricMetric.FLUENCY,
    ],
)

Cómo personalizar rúbricas estáticas

Para necesidades muy especializadas, puedes crear tu propia rúbrica estática. Este método ofrece el máximo control, pero requiere que diseñes cuidadosamente la instrucción de evaluación para garantizar resultados coherentes y confiables. Te recomendamos que uses lineamientos con GENERAL_QUALITY antes de personalizar las rúbricas estáticas.

# Define a custom metric to evaluate language simplicity
simplicity_metric = types.LLMMetric(
    name='language_simplicity',
    prompt_template=types.MetricPromptBuilder(
        instruction="Evaluate the story's simplicity for a 5-year-old.",
        criteria={
            "Vocabulary": "Uses simple words.",
            "Sentences": "Uses short sentences.",
        },
        rating_scores={
            "5": "Excellent: Very simple, ideal for a 5-year-old.",
            "4": "Good: Mostly simple, with minor complex parts.",
            "3": "Fair: Mix of simple and complex; may be challenging for a 5-year-old.",
            "2": "Poor: Largely too complex, with difficult words/sentences.",
            "1": "Very Poor: Very complex, unsuitable for a 5-year-old."
        }
    )
)

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        simplicity_metric
    ],
)

Métricas basadas en procesamiento

Las métricas basadas en cálculos usan algoritmos determinísticos para calificar la respuesta de un modelo comparándola con una respuesta de referencia. Requieren una verdad fundamental en tu conjunto de datos y son ideales para tareas en las que una respuesta "correcta" está bien definida.

  • Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1): Mide la superposición de n-gramas (secuencias contiguas de palabras) entre la respuesta del modelo y un texto de referencia. Se usa de uso frecuente para evaluar el resumen de texto.

  • Bilingual Evaluation Understudy (BLEU): Mide el grado de similitud entre una respuesta y un texto de referencia de alta calidad contando los n-gramas coincidentes. Es la métrica estándar para la calidad de la traducción, pero también se puede usar para otras tareas de generación de texto.

  • Concordancia exacta (exact_match): Mide el porcentaje de respuestas que son idénticas a la respuesta de referencia. Esto es útil para las tareas de respuesta a preguntas basadas en hechos o en las que solo hay una respuesta correcta.

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.Metric(name='bleu'),
        types.Metric(name='rouge_l'),
        types.Metric(name='exact_match')
    ],
)

Métrica de función personalizada

También puedes implementar lógica de evaluación personalizada pasando una función de Python personalizada al parámetro custom_function. El Gen AI Evaluation Service ejecuta esta función para cada fila de tu conjunto de datos.

# Define a custom function to check for the presence of a keyword
def contains_keyword(instance: dict) -> dict:
    keyword = "magic"
    response_text = instance.get("response", "")
    score = 1.0 if keyword in response_text.lower() else 0.0
    return {"score": score}

keyword_metric = types.Metric(
    name="keyword_check",
    custom_function=contains_keyword
)

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[keyword_metric]
)

Métrica de función personalizada remota

Además de ejecutar la lógica de evaluación personalizada de forma local, puedes implementar una lógica de evaluación personalizada que se ejecute de forma segura en un entorno remoto de zona de pruebas. Esto es útil cuando deseas integrar la evaluación como parte de tu flujo de trabajo de ajuste del modelo o cuando tienes una situación específica del usuario que no se incluye en las métricas de evaluación existentes. Para ello, pasa un fragmento de código de Python como una cadena al parámetro remote_custom_function de la clase Metric. El Gen AI Evaluation Service ejecuta esta función de forma remota para cada fila de tu conjunto de datos.

import pandas as pd
from vertexai import types

code_snippet = """
def evaluate(instance):
    if instance['response'] == instance['reference']:
        return 1.0
    return 0.0
"""

custom_metric = types.Metric(
    name="my_custom_code_metric",
    remote_custom_function=code_snippet,
)

prompts_df = pd.DataFrame(
    {
        "prompt": ["What is 2+2?", "What is 3+3?"],
        "response": ["4", "5"],
        "reference": ["4", "6"],
    }
)

eval_dataset = types.EvaluationDataset(
    eval_dataset_df=prompts_df,
    candidate_name="test_model",
)

evaluation_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[custom_metric],
)

Entradas de la instancia de evaluación

La función evaluate toma un diccionario instance como argumento. instance representa la instancia de evaluación, y cualquier campo completado en EvaluationInstance está disponible para la función como instance[field_name]. Los campos disponibles incluyen los siguientes:

  • prompt: Es la instrucción del usuario que se le dio al modelo.
  • response: Es el resultado que genera el modelo.
  • reference: Es la verdad fundamental que se usa para comparar con la respuesta.
  • rubric_groups: Son grupos con nombre de rúbricas asociadas a la instrucción.
  • other_data: Otros datos que se usan para completar los marcadores de posición según su clave.
  • agent_eval_data: Son datos específicos de las evaluaciones del agente, como las configuraciones y los registros del agente.

Restricciones técnicas

  • Entorno de ejecución: El código personalizado se ejecuta en un entorno de zona de pruebas sin acceso a la red.
  • Límite de tiempo de ejecución: La ejecución de la calificación en sí está limitada a 1 minuto.
  • Límite de memoria: El tamaño total del código subido, combinado con los datos cargados durante la ejecución, no debe superar los 1.5 GB.

Los siguientes paquetes externos están disponibles en el tiempo de ejecución:

altair
chess
cv2
deepdiff
editdistance
jsonschema
matplotlib
mpmath
nltk
numpy
pandas
pdfminer
pydantic
rdkit
reportlab
scipy
seaborn
sklearn
sqlparse
statsmodels
striprtf
sympy
tabulate

¿Qué sigue?