Cerrando la brecha entre los jueces LLM y los expertos humanos con MemAlign y MLflow.
por Stepan Nosov, Pavle Martinović, Tejas Sundaresan, Alkis Polyzotis y Nemanja Petrovic
El recientemente anunciado Genie Code es el socio de IA autónomo de Databricks, diseñado específicamente para el trabajo con datos. Reemplazó a Databricks Assistant, al tiempo que integró varios agentes y proporcionó nuevos puntos de integración y capacidades. Genie Code tiene una profunda integración con Unity Catalog, lo que significa que comprende sus tablas, columnas, linaje, vistas de métricas y definiciones de negocio (semántica). Esta conciencia contextual hace que Genie Code sea mucho más útil para los profesionales de datos que los chatbots genéricos.
Cuando Genie Code genera un notebook para tareas de ML tradicionales, como "construir un modelo de predicción de abandono", esperamos que genere un flujo de trabajo listo para producción que incluya la instalación de las bibliotecas de Python apropiadas, la exploración y preprocesamiento de los datos, el entrenamiento, ajuste, registro y despliegue del modelo, y la evaluación de su rendimiento. También esperamos que cada paso esté verdaderamente informado por los datos: por ejemplo, Genie Code deberá entender que las clases desequilibradas en un problema de clasificación binaria resultan en flujos de trabajo y métricas de éxito drásticamente diferentes.
Para garantizar que Genie Code siga consistentemente las mejores prácticas nativas de Databricks y evite, por ejemplo, omitir la validación cruzada, no detectar fugas de datos o imputaciones de datos incorrectas, necesitábamos una forma rigurosa de responder una pregunta: ¿Cómo sabemos si el código generado es realmente bueno? El notebook generado dependerá en gran medida del problema que el cliente intenta resolver, y esto puede variar enormemente entre diferentes clientes, por lo que esta es una pregunta muy no trivial.
En esta publicación, analizaremos cómo construimos un pipeline de evaluación para las capacidades de ML tradicionales de Genie Code y cómo utilizamos MemAlign (un nuevo framework de alineación open-source en MLflow) para cerrar la brecha masiva que encontramos entre los jueces de LLM y los expertos humanos. Los jueces mejorados nos ayudaron a identificar y corregir lagunas en la guía de ML de Genie Code que de otro modo habríamos pasado por alto.
Se requiere un framework de evaluación robusto para:
Evaluar notebooks de ML tradicionales es una de las tareas de evaluación más complejas, ya que abarca la evaluación de la calidad del código, las mejores prácticas de ML y las adaptaciones/personalizaciones informadas por los datos. Para manejar una tarea tan amplia y desordenada como la evaluación de notebooks de ML, utilizamos un LLM-como-juez: un "experto" LLM al que los humanos le enseñaron cómo se ve un buen notebook. Creamos nueve jueces a los que se les pidió evaluar los notebooks de ML a lo largo de nueve dimensiones que aparecen en la mayoría de los flujos de trabajo de ML:
| Dimensiones | Lo que calificamos |
|---|---|
| Instalación de Librerías | Dependencias adecuadas |
| Análisis Exploratorio de Datos | EDA exhaustivo y |
| Imputación de Datos | Tiempo medio de contención |
| Manejo de valores faltantes sin fugas. | Ingeniería de Características |
| Selección/transformación de características. | Entrenamiento de Modelos |
| Selección de modelos, Validación Cruzada, Ajuste de Hiperparámetros | Reutilización del modelo entrenado para realizar inferencias. |
| Evaluación de Métricas | Lógica de inferencia y métricas apropiadas para la tarea (por ejemplo, MAPE para pronósticos, MAE para regresión, Precisión para clasificación). |
| Registro en MLflow | Configuración del seguimiento de experimentos. |
| Organización de Celdas | División del código en celdas, limpieza del código, legibilidad, encabezados de markdown, registro apropiado. |
Para cada dimensión, escribimos rúbricas de puntuación (reutilizadas entre calificadores humanos y jueces de LLM) que asignan una puntuación de 1 a 3, y 0 para "no aplicable":
Para dar una idea de la granularidad, aquí está la rúbrica específica que usamos para la dimensión "imputación de datos":
Junto con los jueces, mantenemos un conjunto de casos de prueba de evaluación que abarcan una variedad de tareas de ML (clasificación, regresión, pronóstico), en diferentes tamaños de dataset, dominios y niveles de complejidad. Cada caso de prueba incluye un prompt de usuario que le dice a Genie Code la tarea de ML que se supone que debe resolver en el dataset especificado ("Tengo datos de pasajeros en las tablas titanic_train_table y titanic_test_table. ¿Puedes averiguar quién sobrevivió?"). El bucle de evaluación consiste en usar Genie Code para generar un notebook (o varios) para cada caso de prueba, y luego calificar cada notebook en todas las dimensiones aplicables.
Al usar jueces de LLM, en lugar de humanos, para evaluar artefactos de Genie Code, esencialmente cambiamos un problema difícil por otro: el juez listo para usar no tiene habilidades en la tarea en cuestión y está desalineado con las calificaciones humanas. Nuestro problema es hacer que las puntuaciones de los jueces de LLM se alineen con las de los evaluadores humanos.
El conjunto de evaluación para la evaluación de jueces de LLM contiene 50 notebooks generados por Genie Code ("casos de prueba") donde expertos humanos calificaron cada dimensión aplicable, proporcionando tanto una puntuación como una breve justificación para servir como nuestra verdad fundamental. En las áreas grises entre dos puntuaciones, se permitió a los calificadores expresar su propio juicio, pero los esquemas se escribieron de tal manera que esto rara vez ocurre.
La medida de alineación humano-máquina es el error absoluto medio (MAE) entre las puntuaciones en cada dimensión. Los resultados fueron mixtos, algunas dimensiones mostraron una fuerte alineación (4 dimensiones tuvieron un MAE de <= 0.10), mientras que otras revelaron un desacuerdo significativo:
Esta brecha existe porque los humanos y los LLM no interpretan la misma rúbrica de la misma manera. Mientras que un calificador humano puede detectar una estrategia de imputación sutilmente defectuosa o un bucle de entrenamiento que 'funciona' pero es lógicamente insound, un juez de LLM a menudo se pierde ese matiz técnico. También descubrimos que el juez sufría de un sesgo de positividad clásico: era simplemente demasiado 'educado' y esto se interpuso en la obtención de resultados objetivos.
Quedó muy claro que, dada la misma rúbrica, los jueces de LLM y los humanos no producirían los mismos resultados, un desalineamiento. Este es exactamente el escenario para el que MemAlign fue diseñado para solucionar.

MemAlign es un framework dentro de MLflow que puede, dada una cantidad muy pequeña de feedback en lenguaje natural humano, realizar la alineación entre los calificadores humanos y los jueces de LLM. Esto se logra a través de dos tipos de "memorias" formadas al leer el feedback humano:
En tiempo de inferencia, MemAlign construye un contexto de trabajo extrayendo todas las directrices semánticas y recuperando los ejemplos episódicos más relevantes para la entrada actual. El juez carga todo esto en su contexto, junto con la rúbrica original, y utiliza el conocimiento acumulado para dar una puntuación más precisa a todos los cuadernos futuros.
La propiedad clave que hizo que MemAlign destacara fue su alto rendimiento utilizando solo un pequeño número de ejemplos. Esto se debe a que MemAlign destila eficazmente el aprendizaje de señales de aprendizaje ricas en retroalimentación de lenguaje natural y las incorpora al sistema de memoria dual.
Aquí hay un ejemplo de algunos fragmentos de memoria semántica generados para la dimensión de “imputación de datos”, llenando los vacíos en la rúbrica que definimos previamente proporcionando puntos de referencia, ejemplos y contraejemplos:
Además, como se mencionó anteriormente, la memoria semántica reflejada en el prompt se complementa con ejemplos relevantes de la memoria episódica del juez en el momento de la puntuación, lo que le da al juez aún más contexto para interpretar las instrucciones optimizadas.
Siguiendo el paradigma de entrenamiento-prueba de ML, aplicamos la validación cruzada K-fold (K=4) en 50 casos de prueba (notebooks), evitando así la fuga de datos y la necesidad de etiquetar un conjunto de prueba separado. Para cada fold hicimos lo siguiente:
Para calcular los intervalos de confianza sin datos etiquetados adicionales, generamos 100 muestras bootstrap con reemplazo de las 50 originales. Al repetir esto 10,000 veces y rastrear la MAE entre las puntuaciones humanas y de máquina, calculamos los intervalos de confianza para la alineación humano-máquina con un CI del 95% que define un cambio estadísticamente significativo.
El pipeline de evaluación se implementa como un único fragmento de MLflow que orquesta todo el proceso:
El optimizador MemAlign puede alinear jueces de LLM basándose en los rastros de los casos de prueba en solo un par de líneas de código. Utilizamos este nuevo juez “alineado” para calcular la nueva MAE. Alinear un juez en una sola dimensión toma aproximadamente 25 segundos por fold, por lo que la alineación en sí no es un cuello de botella.

Tres de las 9 dimensiones mostraron una mejora estadísticamente significativa:
Estas 3 dimensiones se encuentran entre las 4 dimensiones iniciales que estaban muy desalineadas. Una alineación inicial débil es indicativa de que los LLM y los humanos tienen una comprensión fundamentalmente diferente de las rúbricas compartidas, y la memoria inyectada por MemAlign parece proporcionar suficiente contexto para que se “pongan en la misma página”.
La estructura de memoria dual de MemAlign nos llevó a cuestionar si ambas estaban contribuyendo a la alineación del juez. En particular, la memoria episódica se supone que ayuda al juez al proporcionar un conjunto de los cuadernos anotados más similares como punto de referencia (utilizando la búsqueda del vecino más cercano). ¿Pero qué pasa si los cuadernos recuperados (vecinos más cercanos) no son realmente similares al actual, sino solo los menos disímiles? Cargarlos en el contexto del juez podría confundir las cosas en lugar de ayudar. El espacio del problema que estamos calificando (cuadernos de ML) es muy amplio, y al principio hipotetizamos que un conjunto de 50 cuadernos simplemente no sería suficiente para obtener un conjunto de memorias lo suficientemente denso para que el juez lo recordara.
Sin memoria episódica, el panorama se degrada sustancialmente:

Esto fue lo opuesto a lo que esperábamos. Inicialmente hipotetizamos que nuestro conjunto disperso anotado terminaría confundiendo al juez, pero casi todas las dimensiones empeoraron sin memoria episódica. La única excepción fue la Exploración de Datos, donde eliminar los ejemplos episódicos pudo haber ayudado: sin los cuadernos específicos con los que nuestros anotadores no estaban de acuerdo, el juez solo tenía las directrices destiladas y menos ruido con el que trabajar.
La conclusión: incluso cuando tus entradas son grandes y desordenadas, la memoria episódica aún mejora drásticamente el rendimiento del juez. Tanto la memoria semántica como la episódica son integrales para el funcionamiento de MemAlign.
Juzgar si un agente de codificación está haciendo su trabajo es bastante difícil, mientras que evaluar a un socio de IA autónomo en la construcción y ejecución de flujos de trabajo de ML tradicionales está en otro nivel de complejidad. Debido a la rápida iteración en los productos de IA, simplemente no hay tiempo suficiente para que los expertos monitoreen la “integración continua” del agente. La única solución escalable viable son los jueces LLM, pero todavía necesitamos un jurado de humanos para mantener a raya al juez LLM.
Al aplicar MemAlign, redujimos el error del juez entre un 74% y un 89% en las dimensiones donde más importaba. Pero, como con cualquier trabajo de ML/LLM, el resultado es tan bueno como la información que pones, así que asegúrate de que el etiquetado sea competente.
Conclusiones:
MemAlign se envía con MLflow y nos funcionó con solo ~50 ejemplos etiquetados. Si tus jueces de LLM no coinciden con tus expertos, vale la pena dedicarle una tarde.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
Suscríbete a nuestro blog y recibe las últimas publicaciones directamente en tu bandeja de entrada.