Benchmark · coding
EvalPlus
EvalPlus évalue rigoureusement le code généré par les LLM en étendant les benchmarks HumanEval et MBPP (sous les noms HumanEval+ et MBPP+) avec bien plus de cas de test ; la métrique est le pass@k (généralement pass@1).
En savoir plus
- Exemple
- Une tâche de complétion de fonction Python : à partir de la signature et d'un docstring en langage naturel comportant quelques exemples, le modèle écrit le corps, qui est ensuite exécuté sur une suite de tests fortement élargie ajoutant des cas limites (entrées vides, bornes, grandes valeurs) que le benchmark d'origine laissait passer.
- Notation
- La métrique est le pass@k, presque toujours pass@1. Un problème n'est compté comme résolu que si le code généré passe tous les tests (les tests « base » d'origine plus les nouveaux tests « plus »). pass@k est l'estimateur non biaisé : avec n≥k échantillons dont c corrects, 1 − C(n−c, k)/C(n, k) ; le score rapporté est la fraction de problèmes résolus sur l'ensemble.
- Vérification
- Chaque solution est exécutée dans un bac à sable contre la suite complète base+plus avec un délai par test, et n'est acceptée que si toutes les assertions passent. Les entrées supplémentaires sont produites par mutation tenant compte des types plus un amorçage par LLM, et filtrées contre des solutions de référence validées ; un verdict « passed » signifie donc concorder avec la référence sur chaque entrée.
- Pourquoi c'est important
- Les suites de tests d'origine de HumanEval/MBPP sont trop maigres et laissent passer du code plausible mais faux, surestimant la justesse des modèles ; les suites d'EvalPlus, ~80× (HumanEval+) et ~35× (MBPP+) plus grandes, détectent ces erreurs et font généralement chuter le pass@1 de plusieurs points, ce qui en fait la référence la plus fiable pour évaluer les LLM de code.
Exemple résolu
Tâche
Item représentatif de style EvalPlus (HumanEval+) — complétez le corps de la fonction à partir de sa signature et de son docstring :
```python
from typing import List
def sum_even_at_odd_index(numbers: List[int]) -> int:
"""Return the sum of all even values located at odd indices.
>>> sum_even_at_odd_index([3, 8, 7, 4, 5])
12
>>> sum_even_at_odd_index([1, 3, 5])
0
"""
```
Solution
```python
def sum_even_at_odd_index(numbers: List[int]) -> int:
return sum(n for i, n in enumerate(numbers) if i % 2 == 1 and n % 2 == 0)
```
Explication
La solution parcourt la liste avec enumerate, conserve les valeurs aux indices impairs (i % 2 == 1) qui sont paires (n % 2 == 0) et les additionne, ce qui correspond aux deux exemples du docstring et aux cas limites comme une liste vide ou entièrement impaire. La notation est binaire (pass/fail) : la fonction est exécutée sur toute la suite base+plus et l'item n'est compté que si tous les tests passent.
Aucun score vérifié pour ce benchmark à ce jour.