Preparación de datasets para retroalimentación y preferencias

Lectura
25 min~5 min lectura

Concepto clave

La preparación de datasets para RLHF (Reinforcement Learning from Human Feedback) y DPO (Direct Preference Optimization) es el proceso de crear conjuntos de datos estructurados que capturan preferencias humanas sobre respuestas generadas por modelos de lenguaje. Imagina que estás entrenando a un asistente virtual: en lugar de decirle exactamente qué responder (como en el entrenamiento supervisado), le muestras múltiples respuestas a la misma pregunta y le indicas cuál prefieres. Este feedback se convierte en la "recompensa" que guía el aprendizaje por refuerzo.

En RLHF, necesitas tres tipos de datos: prompts (entradas), respuestas generadas (múltiples por prompt), y preferencias humanas (ranking o comparaciones). DPO simplifica esto al trabajar directamente con pares de respuestas preferidas y no preferidas. La analogía del mundo real sería como un editor que revisa borradores de un escritor: no reescribe el texto, sino que selecciona la versión que mejor comunica la idea y explica por qué.

Cómo funciona en la práctica

El proceso típico involucra estos pasos:

  1. Generación de prompts: Crea un conjunto diverso de prompts que representen casos de uso real. Por ejemplo, para un asistente de código, incluye preguntas sobre depuración, optimización y explicación de algoritmos.
  2. Generación de respuestas: Usa el modelo base (ej., Llama 3) para producir múltiples respuestas por prompt, variando parámetros como temperatura para obtener diversidad.
  3. Recolección de preferencias: Presenta pares de respuestas a anotadores humanos que las rankean según criterios como utilidad, seguridad o coherencia.
  4. Formateo del dataset: Estructura los datos en un formato estándar. Para DPO, esto significa tripletas (prompt, respuesta preferida, respuesta no preferida).

Ejemplo con datos concretos:

PromptRespuesta A (preferida)Respuesta B (no preferida)Razón de preferencia
"Explica el concepto de overfitting en ML""Overfitting ocurre cuando un modelo aprende patrones específicos del dataset de entrenamiento, perdiendo capacidad de generalización. Se detecta con alta precisión en entrenamiento pero bajo rendimiento en validación.""Es cuando el modelo no funciona bien."La respuesta A es más detallada y precisa.

Caso de estudio

Considera el ajuste de un modelo open-source como Mistral 7B para generar respuestas de soporte técnico. El dataset se preparó así:

  • Fuente de prompts: 10,000 tickets reales de soporte (anonimizados) categorizados en hardware, software y red.
  • Generación de respuestas: Se usó el modelo base con temperatura=0.7 para producir 4 respuestas por prompt, resultando en 40,000 respuestas.
  • Anotación humana: 5 expertos en soporte rankearon respuestas en una escala del 1 al 5, con criterios de claridad, precisión y tono profesional. Se calcularon rankings promediados para reducir sesgo.
  • Resultado: Un dataset de 8,000 tripletas para DPO, con una división 70/30 entrenamiento/validación. El modelo ajustado mostró una mejora del 35% en satisfacción del usuario en pruebas A/B.
La calidad del dataset es más crítica que su tamaño: 1,000 muestras bien anotadas superan a 10,000 con ruido.

Errores comunes

  1. Sesgo en los prompts: Usar solo ejemplos de un dominio estrecho (ej., solo preguntas de Python) limita la generalización. Solución: Diversifica los prompts con técnicas como augmentación de datos y muestreo estratificado.
  2. Inconsistencia en anotaciones: Diferentes anotadores aplicando criterios variables introduce ruido. Solución: Establece guías claras, realiza sesiones de calibración y usa múltiples anotadores por muestra con acuerdo medido (ej., coeficiente Kappa).
  3. Ignorar el balance de preferencias: Si el 90% de las comparaciones favorecen respuestas largas, el modelo aprenderá a ser verboso indiscriminadamente. Solución: Balancea el dataset para representar variedad en estilos (conciso vs. detallado, formal vs. casual).
  4. No validar la calidad: Asumir que el dataset está listo sin pruebas preliminares. Solución: Ejecuta un fine-tuning de prueba en un subconjunto pequeño y evalúa con métricas como accuracy de preferencia o pérdida de validación.

Checklist de dominio

  • ✓ Los prompts cubren casos de borde y distribuciones reales de uso.
  • ✓ Las respuestas generadas muestran diversidad controlada (no solo variaciones triviales).
  • ✓ Las preferencias humanas están validadas con métricas de acuerdo inter-anotador > 0.7.
  • ✓ El dataset está formateado correctamente para la técnica (RLHF con rankings o DPO con pares).
  • ✓ Existe una división clara entrenamiento/validación/test, con distribución similar.
  • ✓ Se documentaron los criterios de anotación y posibles sesgos.
  • ✓ Se realizó una prueba de concepto con un subconjunto antes del escalado.

Creación de un dataset de preferencias para un asistente de código

En este ejercicio, prepararás un dataset mínimo viable para DPO, enfocado en respuestas de programación. Sigue estos pasos:

  1. Genera 50 prompts relacionados con Python y depuración. Usa temas como manejo de errores, optimización de bucles y uso de librerías. Ejemplo: "¿Cómo optimizo una función que procesa listas grandes en Python?"
  2. Genera respuestas con un modelo base (puedes usar la API de Hugging Face o un modelo local). Para cada prompt, genera 2 respuestas: una detallada con ejemplos de código y otra concisa sin código. Usa temperatura=0.8 para variación.
  3. Simula anotaciones humanas aplicando estos criterios: prefiere respuestas que incluyan código ejecutable y expliquen el 'por qué'. Crea tripletas (prompt, respuesta preferida, no preferida) basado en esto.
  4. Formatea el dataset en JSONL con este esquema: {"prompt": "texto", "chosen": "respuesta preferida", "rejected": "respuesta no preferida"}. Guarda 40 muestras para entrenamiento y 10 para validación.
  5. Evalúa la calidad calculando la longitud promedio de respuestas y verificando que el 60% de las preferidas incluyan código.
Pistas
  • Usa la librería datasets de Hugging Face para manejar el formato JSONL eficientemente.
  • Para prompts, considera scrapear preguntas de Stack Overflow (respetando licencias) o usar datasets públicos como HumanEval.
  • Si no tienes acceso a un modelo, usa GPT-3.5-turbo vía API con un límite de costos.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.