089_llm_image_model_performance_advanced_evaluation_strategies_coding - IUGO-Studio/tech-ia GitHub Wiki

Resumen general:

El video profundiza en la creación de métricas de evaluación personalizadas ("custom eval metrics") para modelos de lenguaje (LLMs). Se exploran tres enfoques principales: 1) evaluación programática basada en reglas, 2) evaluación basada en LLM, y 3) evaluación humana. Se discuten las ventajas, desventajas y casos de uso de cada enfoque, y se proporcionan ejemplos prácticos de implementación utilizando Python, bibliotecas como Pandas, NumPy, TQDM, LangChain, y la API de OpenAI (incluyendo GPT-4, GPT-3.5 Turbo y DALL-E 3). El video también cubre cómo calcular la precisión de las evaluaciones y cómo combinar o ponderar múltiples métricas.

Conceptos clave:

  • Custom Eval Metrics (Métricas de evaluación personalizadas): Métricas diseñadas específicamente para evaluar el rendimiento de un LLM en una tarea particular, teniendo en cuenta los objetivos y requisitos específicos del proyecto.
  • Evaluación programática basada en reglas (Programmatic Rule-based Evaluation): Utilizar código (ej: funciones de Python) para evaluar automáticamente las respuestas del LLM según reglas predefinidas.
  • Evaluación basada en LLM (LLM-based Evaluation): Utilizar otro LLM (ej: GPT-4) para evaluar las respuestas generadas por un modelo.
  • Evaluación humana (Human-based Evaluation): Involucrar a personas para que evalúen las respuestas del LLM.
  • Pandas: Una biblioteca de Python para el análisis y la manipulación de datos.
  • NumPy: Una biblioteca de Python para el cálculo numérico.
  • TQDM: Una biblioteca de Python para mostrar barras de progreso.
  • LangChain: Un framework para desarrollar aplicaciones basadas en modelos de lenguaje.
  • API de OpenAI: Una interfaz para acceder a los modelos de lenguaje de OpenAI (GPT-4, GPT-3.5 Turbo, DALL-E 3, etc.).
  • Pydantic: Se usa para definir la estructura de los datos esperados.
  • Few-shot learning: Dar ejemplos.
  • Fine-tuning: Entrenar un modelo.
  • Prompt Engineering: El arte de crear prompts.
  • LLM: Modelo de lenguaje extenso.
  • JSON Mode: Modo de respuesta estructurada.

Tres enfoques principales para la evaluación personalizada:

  1. Evaluación programática basada en reglas:

    • Ventajas: Rápido, barato, objetivo.
    • Desventajas: Limitado a tareas simples o aspectos específicos de la respuesta que se pueden evaluar con reglas claras.
    • Ejemplo: Evaluar si una publicación de redes sociales contiene un hashtag y si tiene una longitud adecuada.
  2. Evaluación basada en LLM:

    • Ventajas: Más flexible que la evaluación programática, puede evaluar aspectos más complejos y subjetivos de la respuesta (ej: utilidad, legibilidad).
    • Desventajas: Más lento y caro que la evaluación programática, depende de la calidad del modelo evaluador.
    • Ejemplos:
      • Utilizar GPT-4 para clasificar si una publicación de redes sociales trata sobre un tema específico (ej: codificación).
      • Utilizar GPT-4 para generar etiquetas de "verdad fundamental" ("ground truth labels") y luego utilizar un modelo más pequeño (ej: GPT-3.5 Turbo) para evaluar contra esas etiquetas.
  3. Evaluación humana:

    • Ventajas: Alta precisión (si los evaluadores son competentes), flexible, puede evaluar cualquier aspecto de la respuesta.
    • Desventajas: Caro, lento, subjetivo.
    • Ejemplos:
      • Revisión manual de respuestas.
      • Calificaciones de "pulgar arriba/abajo".
      • Uso de plataformas de crowdsourcing (ej: Amazon Mechanical Turk).

Ejemplos prácticos (en detalle):

  1. Evaluación programática de publicaciones de redes sociales:

    • Se definen dos funciones de evaluación:
      • eval_has_hashtag(text): Comprueba si el texto contiene un hashtag.
      • eval_length(text): Comprueba si la longitud del texto está dentro de un rango deseado (30-200 caracteres).
    • Se crea un diccionario de Python que mapea nombres de evaluación a funciones de evaluación.
    • Se itera sobre un DataFrame de Pandas que contiene las publicaciones generadas por el LLM.
    • Para cada publicación, se aplican las funciones de evaluación y se almacenan los resultados (0 o 1) en nuevas columnas del DataFrame.
    • Se calcula la precisión de cada métrica de evaluación (porcentaje de publicaciones que cumplen con el criterio).
    • Se calcula una precisión promedio o ponderada combinando las métricas individuales.
  2. Evaluación basada en LLM para clasificar publicaciones por tema:

    • Se utiliza GPT-4 para determinar si una publicación de redes sociales trata sobre "codificación, software o ciencia de datos".
    • Se define un modelo Pydantic (SocialClassify) para estructurar la respuesta del LLM (un campo is_topic con valor 0 o 1).
    • Se utiliza LangChain para crear una cadena que combina el prompt, el modelo (GPT-4) y el analizador de salida (PydanticOutputParser).
    • Se itera sobre el DataFrame de publicaciones, se aplica la cadena a cada publicación y se almacenan los resultados en una nueva columna.
    • Se compara la clasificación generada por GPT-4 con etiquetas de verdad ("ground truth labels") creadas manualmente para calcular la precisión.
  3. Evaluación basada en LLM con generación de etiquetas sintéticas:

    • Se utiliza GPT-4 para generar etiquetas de "verdad fundamental" (ground truth) para un conjunto de transacciones bancarias (tipo de transacción y categoría).
    • Se define un modelo Pydantic y una cadena similar al ejemplo anterior.
    • Se utiliza GPT-3.5 Turbo para clasificar las mismas transacciones.
    • Se compara la clasificación de GPT-3.5 Turbo con las etiquetas generadas por GPT-4 para calcular la precisión.
  4. Evaluación humana de imágenes generadas por DALL-E 3:

    • Se utiliza GPT-4 para generar prompts visuales para DALL-E 3, basados en información del cliente y un perfil.
    • Se utiliza DALL-E 3 para generar imágenes a partir de los prompts visuales.
    • Se crea una interfaz interactiva en Jupyter Notebook con botones de "pulgar arriba/abajo" para que un humano evalúe las imágenes.
    • Se calcula la tasa de aprobación (porcentaje de imágenes que reciben un "pulgar arriba").

Estrategias para optimizar el rendimiento del LLM basadas en las evaluaciones:

  1. Optimización de prompts: Modificar el prompt (agregar contexto, usar principios de ingeniería de prompts, etc.).
  2. Selección de modelo: Utilizar un modelo más potente.
  3. Técnicas de recuperación mejoradas: Utilizar bases de datos vectoriales u otras técnicas para proporcionar información más relevante al modelo.
  4. Descomposición de tareas: Dividir una tarea compleja en subtareas más pequeñas y manejables.
  5. Ajuste fino (Fine-tuning): Entrenar un modelo en un conjunto de datos específico para la tarea.

Consejos y buenas prácticas:

  • Comienza con "evals" programáticos simples y luego avanza a métodos más complejos: Esto te permite obtener retroalimentación rápida y barata en las primeras etapas del desarrollo.
  • Combina diferentes tipos de "evals": Utiliza una combinación de "evals" programáticos, sintéticos y humanos para obtener una evaluación más completa.
  • Considera la posibilidad de utilizar múltiples evaluadores humanos: Esto ayuda a reducir el sesgo y aumentar la confiabilidad de la evaluación.
  • Itera y mejora tus prompts y modelos basándote en los resultados de las "evals": Las "evals" son una herramienta para la mejora continua.
  • Documenta tus "evals": Registra las métricas, los métodos utilizados y los resultados para poder realizar un seguimiento del progreso y comparar diferentes enfoques.
  • "Eval" no es solo para la etapa de desarrollo: Se pueden (y deben) usar en producción para monitorear el rendimiento del LLM a lo largo del tiempo y detectar posibles problemas (degradación del rendimiento, sesgos emergentes, etc.).
  • "Ground Truth Labels": Son las respuestas correctas o etiquetas verdaderas que se usan para comparar con las respuestas del LLM y así evaluar su rendimiento. Son la referencia contra la cual se mide la precisión del modelo.
  • "LCL Chain": Se refiere a "LangChain Expression Language" (LCEL). Es una forma de encadenar componentes de LangChain (prompts, modelos, parsers de salida) de forma declarativa.

Dudas o preguntas:

  • ¿Cómo se puede adaptar esta técnica para evaluar otros tipos de salidas de LLM, como código, resúmenes o traducciones? Investigación: Se pueden definir "evals" programáticos, sintéticos o humanos específicos para cada tipo de salida. Por ejemplo, para evaluar código, se pueden utilizar pruebas unitarias o métricas de calidad de código. Para evaluar resúmenes, se pueden utilizar métricas como ROUGE o la evaluación humana. Para evaluar traducciones, se pueden utilizar métricas como BLEU o la evaluación humana.

  • ¿Cómo se pueden crear "evals" sintéticos más sofisticados que utilicen técnicas como el "Chain of Thought" o el "Few-Shot Learning"? Investigación: Se puede pedir al modelo evaluador que explique su razonamiento ("Chain of Thought") o se le pueden proporcionar ejemplos de evaluaciones correctas ("Few-Shot Learning").

  • ¿Cómo se elige que método de "eval" usar? La elección del método de evaluación depende de varios factores:

    • Tipo de tarea:
    • Recursos disponibles:
    • Nivel de precisión requerido:
    • Etapa del desarrollo:

    En general, es una buena práctica combinar diferentes métodos de evaluación para obtener una visión más completa y confiable del rendimiento del LLM.

⚠️ **GitHub.com Fallback** ⚠️