Desarrolladores trabajando en varias pantallas

¿Qué es HumanEval?

Definición de HumanEval

HumanEval es un punto de referencia para evaluar las capacidades de generación de código de los modelos de lenguaje grandes (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 empresa.

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

Se puede acceder al marco de referencia en el repositorio de GitHub de OpenAI HumanEval. HumanEval también cuenta con una tabla de clasificación que evalúa el rendimiento de diferentes modelos de generación de código, entre los que se incluyen la suite Claude, Kimi K2, Google Gemma y Gemini, GPT-5 y los modelos anteriores GPT-4o y GPT-4, así como la familia de modelos IBM® Granite, entre otros.

Estructura del conjunto de datos

El conjunto de datos de HumanEval consta de 164 problemas de programación escritos a mano con sus correspondientes pruebas unitarias.1 Estos problemas miden la capacidad de un modelo para comprender el lenguaje, manipular cadenas, buscar y ordenar. También evalúan la capacidad para resolver problemas mediante operaciones matemáticas sencillas y algoritmos complejos. Estas tareas de programación son similares a las preguntas algorítmicas, los ejercicios de programació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 la 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 números enteros:            

def multiply(a, b):

Docstring

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

Por ejemplo, el docstring 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

Este es 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 el docstring.

Pruebas unitarias

Estos casos de prueba verifican la corrección funcional del código generado en diferentes escenarios. Cada prueba introduce datos específicos en la función y luego compara los resultados obtenidos con los resultados esperados.

Estas son algunas pruebas unitarias de ejemplo 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 empleadas 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 que se puede resolver un problema, cualquiera de las cuales puede ser funcionalmente equivalente a la solución de referencia.

Es por eso que el punto de referencia de HumanEval recurrió a la corrección funcional, que considera que una muestra de código generada es correcta si pasa una suite de pruebas unitarias. Este enfoque refleja la forma en que los desarrolladores evalúan el éxito de su código: lo someten a una serie de pruebas unitarias y se aseguran de que supere 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 pasa 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

Decodificación de 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 revuelo de la IA para ofrecerle las últimas noticias e insights 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. Un enfoque de humano en el proceso también sigue siendo crucial para ayudar a garantizar la precisión del código generado por IA y ajustar y mejorar los modelos de machine learning con el tiempo.

Estas son algunas limitaciones del punto de referencia de HumanEval:

  • Contaminación

  • Falta de complejidad del mundo real

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

  • Compatibilidad limitada con lenguajes de programación

Contaminación

Es posible que se hayan encontrado problemas de programación incluidos en el conjunto de datos durante el entrenamiento del modelo debido a su amplia disponibilidad. El número de problemas es tan reducido que los modelos de generación de código tal vez puedan memorizarlos todos.

Falta de complejidad en el mundo real

Las tareas de generación de código dentro de HumanEval suelen caer dentro del rango fácil a intermedio. Sin embargo, las tareas de programación del mundo real tienden a ser más complejas y abarcan 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 enrevesado de los entornos y flujos de trabajo reales de desarrollo de software: casos de uso en evolución, casos de prueba incompletos, requisitos incongruentes, código existente o especificaciones vagas, por nombrar algunos.

Métrica estrecha de capacidades de programación

La programación es mucho más que la mera 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 mejores prácticas de programación, como las convenciones de programación, los estándares de estilo, el manejo de errores, la validación de entrada y la programación segura.

Compatibilidad limitada con lenguajes de programación

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 otros puntos de referencia.

Variaciones de HumanEval

El punto de referencia tiene algunas 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 unitarias.1 HumanEval+ aumenta significativamente esa cobertura de pruebas a un promedio de 764 pruebas por problema para una evaluación más rigurosa.2

HumanEval-V

HumanEval-V se basa en su predecesor para crear un punto de referencia para modelos de IA multimodal, específicamente modelos de lenguaje visual (VLM). Mide la capacidad de los VLM para comprender y razonar sobre cuadros, 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ódigo.

HumanEvalNext

HumanEvalNext mejora HumanEval. Aporta más contexto mediante anotaciones de tipo (sintaxis de programación que indica 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 problemas.3

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 programación de IA

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

Explore soluciones de programación de IA
Consultoría y servicios de IA

Reinvente los flujos de trabajo y las operaciones 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 empresarial listo de forma más rápida. Bob crea modelos para aumentar el conjunto de habilidades de los desarrolladores, simplificando y automatizando sus esfuerzos de desarrollo y modernización.

  1. Descubra IBM Bob
  2. Explore soluciones de programación de IA