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:
-
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.
-
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.
-
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):
-
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.
- Se definen dos funciones de evaluación:
-
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 campois_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.
-
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.
-
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:
- Optimización de prompts: Modificar el prompt (agregar contexto, usar principios de ingeniería de prompts, etc.).
- Selección de modelo: Utilizar un modelo más potente.
- Técnicas de recuperación mejoradas: Utilizar bases de datos vectoriales u otras técnicas para proporcionar información más relevante al modelo.
- Descomposición de tareas: Dividir una tarea compleja en subtareas más pequeñas y manejables.
- 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.