HumanEval Benchmark (IT)

From Systems analysis Wiki
Jump to navigation Jump to search

HumanEval — è un dataset di riferimento (benchmark) progettato per la valutazione oggettiva della qualità del codice generato da modelli di intelligenza artificiale a partire da una descrizione testuale del problema[1]. È stato presentato nel luglio 2021 dai ricercatori di OpenAI sotto la guida di Mark Chen e si è affermato come uno degli standard chiave per misurare la correttezza funzionale dei programmi generati.

Lo sviluppo di HumanEval è stato motivato dalla necessità di un metodo affidabile per valutare la generazione di codice. In precedenza, la qualità del codice prodotto dai modelli linguistici veniva spesso misurata con metriche indirette (come BLEU) o manualmente, il che non garantiva la corrispondenza con la reale funzionalità dei programmi. HumanEval risolve questo problema concentrandosi sulla correttezza funzionale: il codice generato non viene valutato in base alla sua somiglianza sintattica con un riferimento, ma in base alla sua capacità di superare con successo un insieme di unit test automatici[1].

Struttura del set di problemi

Il benchmark è composto da 164 problemi di programmazione scritti manualmente appositamente per questo dataset, al fine di garantire la loro assenza nei dati di addestramento dei modelli. Tutti i problemi sono formulati in linguaggio Python e presentati sotto forma di frammenti di codice con descrizione[2].

Ogni esercizio comprende:

  • Intestazione della funzione: La firma della funzione con il suo nome e i parametri.
  • Descrizione testuale: Un docstring in lingua inglese che descrive la funzionalità richiesta.
  • Corpo della funzione: Uno spazio vuoto che il modello deve riempire con il codice generato.

Per ciascun problema sono previsti anche elementi nascosti al modello:

  • Soluzione canonica: L'implementazione corretta (di riferimento) della funzione.
  • Set di test modulari (unit test): Utilizzati per la verifica automatica della correttezza del codice generato. I test coprono sia i casi principali sia i casi limite.

I problemi spaziano su un ampio spettro di argomenti: dalle costruzioni linguistiche di base e dagli algoritmi alla matematica elementare, rendendo il dataset variegato e impegnativo per i modelli.

Metodologia di valutazione dei modelli

La metrica principale di successo su HumanEval è pass@k, che misura la proporzione di problemi risolti funzionalmente in modo corretto dal modello[1]. Una soluzione è considerata riuscita se il codice generato supera tutti i test automatici per quel problema.

  • pass@1: L'indicatore principale e più frequentemente utilizzato. Rappresenta la percentuale di problemi risolti dal modello al primo tentativo (ovvero generando una sola soluzione per problema).
  • pass@k: In generale, questa metrica indica la proporzione di problemi per i quali almeno una delle k soluzioni generate dal modello supera tutti i test. Ad esempio, pass@10 mostra quale proporzione di problemi il modello è in grado di risolvere se gli vengono concessi fino a 10 tentativi per ciascuno.

Poiché il calcolo diretto del pass@k richiede un grande numero di campioni, gli autori hanno proposto un metodo statisticamente corretto per il calcolo di questa metrica, che consente di ottenere una stima non distorta[1].

Il testing pratico avviene in un apposito ambiente "sandbox": il codice generato viene compilato ed eseguito su un set di test di verifica. Questo approccio permette di misurare la capacità del modello di generare codice eseguibile e corretto, e non semplicemente sintatticamente simile al riferimento.

Risultati e impatto sull'industria

I primi esperimenti su HumanEval hanno evidenziato un divario significativo tra i modelli generici e i modelli addestrati specificamente sul codice.

  • Nel 2021, il modello OpenAI Codex (12 miliardi di parametri, addestrato su codice proveniente da GitHub) è riuscito a risolvere al primo tentativo il ~28,8% dei problemi (pass@1).
  • Nello stesso periodo, il più ampio modello linguistico GPT-3 (175 miliardi di parametri), non addestrato sul codice, non è riuscito a risolvere correttamente nessun problema[1].

Questi risultati hanno sottolineato la necessità di un addestramento specializzato su dati di programmazione per una generazione di codice efficace. Dopo la comparsa di HumanEval, il benchmark è rapidamente diventato il test standard per confrontare il progresso dei nuovi modelli.

  • I modelli della serie GPT-3.5 (inizio 2023) hanno raggiunto circa il ~72% di pass@1.
  • Il modello GPT-4 (2023) ha dimostrato risultati ancora più elevati, raggiungendo il ~67% nella versione base e superando l'85% dopo ulteriori ottimizzazioni[3].
  • I modelli open source come Code Llama (Meta, 2023) e WizardCoder (2023) hanno anch'essi ottenuto risultati elevati (rispettivamente ~53% e ~57% di pass@1), superando i primi modelli proprietari[4].

Estensioni e varianti del benchmark

Il successo di HumanEval ha ispirato la creazione di diverse versioni derivate, volte a valutare i modelli in condizioni più ampie.

  • CL-HumanEval (Cross-Lingual HumanEval): Una variante cross-linguistica (2024), in cui i problemi dell'HumanEval originale sono adattati per testare la capacità dei modelli di comprendere descrizioni in diverse lingue (oltre all'inglese), generando al contempo codice in Python[5].
  • Multilingual HumanEval: Un'estensione (2023) volta a valutare la generazione di codice in 12 diversi linguaggi di programmazione (tra cui Java, C#, JavaScript e altri) a partire da una descrizione in lingua inglese[6].
  • HumanEval-XL: Un benchmark su larga scala (2024) che combina entrambi gli approcci. Contiene problemi in 12 linguaggi di programmazione e traduzioni delle descrizioni testuali in 23 lingue del mondo, inclusi russo, cinese, arabo e altri. In totale, HumanEval-XL comprende oltre 22.000 coppie «descrizione-codice»[7].

Collegamenti esterni

  • HumanEval su Hugging Face
  • Pagina HumanEval su Papers with Code

Bibliografia

  • Liang, P. et al. (2022). Holistic Evaluation of Language Models (HELM). arXiv:2211.09110.
  • Chang, Y. et al. (2023). A Survey on Evaluation of Large Language Models. arXiv:2307.03109.
  • Ni, S. et al. (2025). A Survey on Large Language Model Benchmarks. arXiv:2508.15361.
  • Biderman, S. et al. (2024). The Language Model Evaluation Harness (lm-eval): Guidance and Lessons Learned. arXiv:2405.14782.
  • Kiela, D. et al. (2021). Dynabench: Rethinking Benchmarking in NLP. arXiv:2104.14337.
  • Ma, Z. et al. (2021). Dynaboard: An Evaluation‑As‑A‑Service Platform for Holistic Next‑Generation Benchmarking. arXiv:2106.06052.
  • Goel, K. et al. (2021). Robustness Gym: Unifying the NLP Evaluation Landscape. arXiv:2101.04840.
  • Xu, C. et al. (2024). Benchmark Data Contamination of Large Language Models: A Survey. arXiv:2406.04244.
  • Liu, S. et al. (2025). A Comprehensive Survey on Safety Evaluation of LLMs. arXiv:2506.11094.
  • Chiang, W.-L. et al. (2024). Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132.
  • Boubdir, M. et al. (2023). Elo Uncovered: Robustness and Best Practices in Language Model Evaluation. arXiv:2311.17295.
  • Huang, L. et al. (2023). A Survey on Hallucination in Large Language Models. arXiv:2311.05232.

Note

  1. 1.0 1.1 1.2 1.3 1.4 Chen, M. et al. «Evaluating Large Language Models Trained on Code». arXiv:2107.03374, 2021. [1]
  2. «openai/openai_humaneval». Hugging Face Datasets. [2]
  3. Niu, C. et al. «On Evaluating the Efficiency of Source Code Generated by LLMs». Proceedings of the 2nd International Conference on AI-generated Content, 2024. [3]
  4. Lutfullaev, J. «HumanEval on LLMs Revisited in Late 2023». arXiv:2402.14852, 2023. [4]
  5. Sato, M. et al. «CL-HumanEval: A Benchmark for Evaluating Cross-Lingual Transfer through Code Generation». Proceedings of the 38th Pacific Asia Conference on Language, Information and Computation, 2024. [5]
  6. Athiwaratkun, B. et al. «Multilingual HumanEval: A Multilingual Code Generation Benchmark». arXiv:2307.11892, 2023. [6]
  7. Liu, J. et al. «HumanEval-XL: A Multilingual Code Generation Benchmark for Cross-lingual Natural Language Generalization». LREC-COLING 2024. [7]