Desarrolladores que trabajan con múltiples pantallas

¿Qué es HumanEval?

Definición de HumanEval

HumanEval es un punto de referencia destinado a evaluar las capacidades de generación de código de los modelos de lenguaje de gran tamaño (LLM). Fue desarrollado por OpenAI para evaluar las primeras versiones de los modelos de IA que impulsan Codex, el agente de ingeniería de software de la compañía.

El punto de referencia HumanEval está diseñado específicamente para código generado por Python. Va más allá de la sintaxis y valida que el código creado es preciso y funciona según lo previsto.

El marco del punto de referencia puede consultarse en el repositorio de GitHub de OpenAI HumanEval. HumanEval también tiene una tabla de clasificación que clasifica el rendimiento de diferentes modelos de generación de código, incluido el conjunto Claude, Kimi K2, Google Gemma y Gemini, GPT-5 y los antiguos GPT-4o y GPT-4, y la familia IBM® Granite, entre otros.

Estructura del conjunto de datos

El conjunto de datos HumanEval consta de 164 problemas de programación escritos a mano con sus correspondientes pruebas unitarias1. Estos problemas evalúan la capacidad de un modelo para comprender el lenguaje, manipular cadenas de caracteres, realizar búsquedas y ordenar datos. También evalúan las habilidades de resolución de problemas en términos de algoritmos matemáticos simples y complejos. Estas tareas de programación son similares a las preguntas algorítmicas, los ejercicios de codificación o los desafíos de diseño de sistemas que los desarrolladores de software resuelven durante las entrevistas técnicas.

Cada tarea de generación de código contiene los siguientes componentes:

  • Firma de función

  • Docstring

  • Cuerpo de la función

  • Pruebas unitarias

Firma de función

La firma define el nombre y los parámetros de la función. A modo de ejemplo, esta es la firma de una función que calcula el producto de dos enteros:            

def multiply(a, b):

Docstring

Un docstring es una instrucción en lenguaje natural del comportamiento, objetivos, entradas y salidas esperadas de la función. Estos comentarios describen lo que hace una función, guiando el modelo al generar código Python.

Por ejemplo, la cadena de documentos de la función de multiplicación será:

“””Complete the function that takes two integers as inputs
and returns their product as the output.
Assume the inputs are always valid.
Examples:
multiply(8, 2) must return 16
multiply(0, 777) must return 0
multiply(-32,64) must return -2048
“””

Cuerpo de la función

Se trata de un segmento asignado al código que produce un modelo. Contiene la solución implementada al problema dada la firma de la función y la cadena de documentación.

Pruebas unitarias

Estos casos de prueba verifican la corrección funcional del código generado en diferentes escenarios. Cada prueba alimenta entradas específicas a la función y luego comprueba las salidas con los resultados previstos.

Aquí tiene algunos ejemplos de pruebas unitarias para la función de multiplicación:

def test_multiply():
    assert multiply(89, 0) == 0
    assert multiply(37, -5) == -185
    assert multiply(66, 17) == 1122

Métrica de evaluación

Muchos puntos de referencia de LLM de código aplican metodologías utilizadas para la generación de texto, como métricas basadas en coincidencias que comparan muestras de código generadas con una solución de referencia. Pero las métricas basadas en coincidencias no suelen tener en cuenta las diversas formas en las que se puede resolver un problema, cualquiera de las cuales puede ser funcionalmente equivalente a la solución de referencia.

Por eso el punto de referencia de HumanEval se centró en la corrección funcional, que considera correcta una muestra de código generada si pasa un conjunto de pruebas unitarias. Este enfoque refleja cómo los desarrolladores evalúan el éxito de su código ejecutándolo a través de una serie de pruebas unitarias y asegurándose de que pasa cada una de ellas.

HumanEval mide la corrección funcional utilizando la métrica pass@k. Para cada problema, un modelo genera k muestras de código. Si alguna de esas muestras supera las pruebas unitarias, entonces el problema se considera correctamente resuelto. La métrica pass@k estima la probabilidad de que al menos una de las k muestras sea funcionalmente correcta.

Mixture of Experts | 12 de diciembre, episodio 85

Descifrar la IA: resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el bullicio de la IA para ofrecerle las últimas noticias y conocimientos al respecto.

Limitaciones de HumanEval

HumanEval es solo uno de los muchos puntos de referencia para evaluar los LLM de código. Los equipos de desarrollo de software aún deben evaluar el código generado por LLM utilizando sus propias pruebas internas y combinar múltiples métricas para obtener una visión más completa del rendimiento del modelo. El enfoque con intervención humana sigue siendo fundamental para garantizar la precisión del código generado por la IA, afinar y mejorar los modelos de machine learning con el paso del tiempo.

Estas son algunas de las limitaciones del punto de referencia HumanEval:

  • Contaminación

  • Falta de complejidad del mundo real

  • Métrica estrecha de las capacidades de codificación

  • Soporte de lenguaje de programación restringido

Contaminación

Es posible que se hayan producido problemas de programación incluidos en el conjunto de datos durante el entrenamiento de modelos debido a su amplia disponibilidad. El número de problemas también es lo suficientemente reducido como para que los modelos de generación de código puedan quizás memorizarlos todos.

Falta de complejidad del mundo real

Las tareas de generación de código dentro de HumanEval suelen estar en el rango fácil o medio. Sin embargo, las tareas de programación en el mundo real tienden a ser más complejas, abarcando integraciones de API con múltiples sistemas, enormes bases de código y grandes conjuntos de datos.

El punto de referencia tampoco refleja el estado, a menudo enredado, de los entornos y flujos de trabajo de desarrollo de software del mundo real: casos de uso en evolución, casos de prueba incompletos, requisitos inconsistentes, código heredado o especificaciones vagas, por nombrar algunos.

Métrica estrecha de las capacidades de codificación

La programación es mucho más que corrección funcional. Por ejemplo, HumanEval no tiene en cuenta la eficiencia. Esto significa que el código generado por LLM que es preciso y funciona como se espera podría no ser la solución más eficiente y optimizada en cuanto a rendimiento.

El punto de referencia tampoco tiene en cuenta las buenas prácticas de programación, como las convenciones de codificación, los estándares de estilo, la gestión de errores, la validación de entradas y la codificación segura.

Soporte de lenguaje de programación restringido

HumanEval está diseñado específicamente para el lenguaje de programación Python de código abierto. El código fuente generado en otros lenguajes debe evaluarse utilizando otras referencias.

Variaciones de HumanEval

El punto de referencia tiene varias versiones diferentes que abordan algunas de sus limitaciones:

  • HumanEval+
     

  • HumanEval-V
     

  • HumanEval-X
     

  • HumanEvalNext

HumanEval+

Cada problema de programación en HumanEval tiene un promedio de entre 7 y 8 pruebas unitarias1. HumanEval+ aumenta significativamente esa cobertura de pruebas a un promedio de 764 pruebas por problema para una evaluación más rigurosa2.

HumanEval-V

HumanEval-V se basa en su predecesor para crear una referencia para modelos de IA multimodal, específicamente modelos de lenguaje visual (VLM). Mide la capacidad de los VLM para comprender y razonar sobre tablas, diagramas y gráficos en contextos de programación, generando código basado en diagramas de flujo de algoritmos o transformaciones matriciales, por ejemplo.

HumanEval-X

HumanEval-X amplía el punto de referencia original para incluir los lenguajes de programación C++, Go, Java y JavaScript. Sus 820 tareas se pueden utilizar para evaluar las habilidades de generación y traducción de códigos.

HumanEvalNext

HumanEvalNext mejora HumanEval. Aporta más contexto mediante anotaciones de tipo (sintaxis de programación para indicar los tipos de datos de los parámetros de las funciones y los valores de retorno), incorpora más casos extremos, introduce más pruebas unitarias y aumenta la dificultad de los problemas3.

Autores

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

Soluciones relacionadas
IBM Bob

Acelere la entrega de software con Bob, su socio de IA para un desarrollo seguro y consciente de la intención.

Explore IBM® Bob
Soluciones de codificación de IA

Optimice los esfuerzos de desarrollo de software con herramientas impulsadas por IA de confianza que minimizan el tiempo dedicado a escribir código, depurar, refactorizar código o completar código y dejar más espacio para la innovación.

Explore soluciones de codificación con IA
Consultoría y servicios de IA

Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.

Explore los servicios de consultoría de IA
Dé el siguiente paso

Aproveche la IA generativa y la automatización avanzada para crear código listo para uso empresarial con mayor rapidez. Los modelos de Bob aumentan las habilidades de los desarrolladores, simplificando y automatizando sus esfuerzos de desarrollo y modernización.

  1. Descubra IBM® Bob
  2. Explore soluciones de codificación con IA