Sviluppatori che lavorano con più schermi

Cos'è HumanEval?

Cos'è HumanEval

HumanEval è un benchmark per valutare le funzionalità di generazione di codice dei modelli linguistici di grandi dimensioni (LLM). È stato sviluppato da OpenAI per valutare le prime versioni dei modelli di AI che alimentavano Codex, l'agente di ingegneria del software dell'azienda.

Il benchmark HumanEval è progettato specificamente per il codice generato da Python. Va oltre la sintassi, convalidando che il codice creato sia accurato e funzioni come previsto.

Il framework del benchmark è accessibile sul repository GitHub di OpenAI HumanEval. HumanEval dispone anche di una classifica che valuta le prestazioni di diversi modelli di generazione di codice, tra cui la suite Claude , Kimi K2, Google Gemma e Gemini, GPT-5 e i più vecchi GPT-4o e GPT-4, oltre alla famiglia IBM Granite, tra gli altri.

Struttura del set di dati

Il set di dati HumanEval è composto da 164 problemi di programmazione scritti a mano con i relativi test unitari.1 Questi problemi misurano la capacità di un modello di comprendere il linguaggio, manipolare stringhe, cercare e ordinare. Valutano anche le capacità di risoluzione dei problemi in termini di matematica semplice e algoritmi complessi. Queste attività di programmazione sono simili alle domande algoritmiche, agli esercizi di codifica o alle sfide di progettazione del sistema che gli sviluppatori di software affrontano durante i colloqui tecnici.

Ogni compito di generazione di codice contiene i seguenti componenti:

  • Firma della funzione

  • Docstring

  • Corpo della funzione

  • Test unitari

Firma della funzione

La firma definisce il nome e i parametri della funzione. Come esempio, ecco la firma di una funzione che calcola il prodotto di due numeri interi:            

def multiply(a, b):

Docstring

Una docstring è un prompt in linguaggio naturale o una descrizione del comportamento, degli obiettivi, degli input e degli output previsti della funzione. Questi commenti illustrano cosa fa una funzione, guidando il modello durante la generazione di codice Python.

Ad esempio, la docstring della funzione multiply sarà:

“””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
“””

Corpo della funzione

Questo è un segmento allocato al codice prodotto da un modello. Contiene la soluzione implementata al problema date la firma della funzione e la docstring.

Unit test

Questi casi di test verificano la correttezza funzionale del codice generato in diversi scenari. Ogni test fornisce input specifici alla funzione e poi verifica gli output rispetto ai risultati desiderati.

Ecco alcuni test unitari di esempio per la funzione di moltiplicazione:

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

Metrica di valutazione

Molti benchmark di LLM per codice applicano metodologie utilizzate per la generazione di testo, come le metriche basate sulla corrispondenza che confrontano campioni di codice generati con una soluzione di riferimento. Tuttavia, le metriche basate sul match di solito non tengono conto dei vari modi in cui un problema può essere risolto, ognuno dei quali può essere funzionalmente equivalente alla soluzione di riferimento.

Ecco perché il benchmark HumanEval si è rivolto alla correttezza funzionale, che considera corretto un campione di codice generato se supera una suite di test unitari. Questo approccio rispecchia il modo in cui gli sviluppatori valutano il successo del loro codice eseguendolo attraverso una serie di test unitari e assicurandosi che superi ciascuno di essi.

HumanEval misura la correttezza funzionale utilizzando la metrica pass@k. Per ogni problema, un modello genera k campioni di codice. Se uno qualsiasi di questi campioni supera i test unitari, allora il problema viene considerato correttamente risolto. La metrica pass@k stima la probabilità che almeno uno dei k campioni sia funzionalmente corretto.

AI Academy

Ascesa dell'AI generativa nel mondo del business

Scopri di più sull'ascesa dell'AI generativa e cosa comporta per le aziende.

Limitazioni di HumanEval

HumanEval è solo uno dei tanti benchmark per valutare gli LLM per il codice. I team di sviluppo software devono comunque valutare il codice generato dagli LLM utilizzando i propri test interni e combinare più metriche per una visione più completa delle prestazioni del modello. Un approccio human-in-the-loop rimane inoltre cruciale per garantire l'accuratezza del codice generato dall'AI e per mettere a punto e migliorare i modelli di machine learning nel tempo.

Ecco alcuni limiti del benchmark HumanEval:

  • Contaminazione

  • Mancanza di complessità del mondo reale

  • Metrica ristretta delle funzionalità di codifica

  • Supporto limitato per linguaggi di programmazione

Contaminazione

I problemi di programmazione inclusi nel set di dati potrebbero essere stati riscontrati durante l'addestramento dei modelli a causa della loro ampia disponibilità. Il numero di problemi è anche abbastanza basso da permettere ai modelli di generazione del codice di memorizzarli tutti.

Mancanza di complessità del mondo reale

I compiti di generazione del codice all'interno di HumanEval rientrano tipicamente nella fascia facile o media. Tuttavia, i compiti di programmazione nel mondo reale tendono a essere più complessi e comprendono integrazioni API con molteplici sistemi, enormi basi di codice e grandi set di dati.

Il benchmark non riflette nemmeno lo stato spesso intricato degli ambienti e dei workflow di sviluppo software reali: casi d'uso in evoluzione, casi di test incompleti, requisiti incoerenti, codice legacy o specifiche vaghe, solo per citarne alcuni.

Metriche ristrette delle funzionalità di codifica

La programmazione non si limita alla sola correttezza funzionale. Ad esempio, HumanEval non tiene conto dell'efficienza. Ciò significa che il codice generato dagli LLM, pur essendo accurato e funzionante come previsto, potrebbe non rappresentare la soluzione più efficiente e ottimizzata in termini di prestazioni.

Inoltre, il benchmark non tiene conto delle best practice di programmazione, come le convenzioni di codifica, gli standard di stile, la gestione degli errori, la convalida degli input e la codifica sicura.

Supporto limitato per il linguaggio di programmazione

HumanEval è progettato specificamente per il linguaggio di programmazione open source Python. Il codice sorgente generato in altri linguaggi deve essere valutato utilizzando altri benchmark.

Variazioni di HumanEval

Il benchmark ha diverse versioni che affrontano alcune delle sue limitazioni:

  • HumanEval+
     

  • HumanEval-V
     

  • HumanEval-X
     

  • HumanEvalNext

HumanEval+

Ogni problema di programmazione in HumanEval ha in media circa 7-8 test unitari.1 HumanEval+ aumenta significativamente la copertura dei test, portandola a una media di 764 test per problema, per una valutazione più rigorosa.2

HumanEval-V

HumanEval-V si basa sul suo predecessore per creare un benchmark per i modelli di AI multimodale, in particolare i modelli di linguaggio visivo (VLM). Misura la capacità dei VLM di comprendere e ragionare su grafici, diagrammi e tabelle in contesti di programmazione, generando codice basato su diagrammi di flusso di algoritmi o trasformazioni di matrici, ad esempio.

HumanEval-X

HumanEval-X estende il benchmark originale per includere i linguaggi di programmazione C++, Go, Java e JavaScript. Le sue 820 attività possono essere utilizzate per valutare le capacità di generazione e traduzione di codice.

HumanEvalNext

HumanEvalNext migliora HumanEval. Aggiunge più contesto attraverso le annotazioni di tipo (sintassi di programmazione per indicare i tipi di dati dei parametri di funzione e i valori di ritorno), incorpora più edge, introduce più test unitari e aumenta la difficoltà dei problemi.3

Autori

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

Soluzioni correlate
IBM Bob

Accelera la distribuzione del software con Bob, il tuo partner AI per uno sviluppo sicuro e consapevole degli intenti.

Esplora IBM Bob
Soluzioni di codifica AI

Ottimizza le attività di sviluppo del software con strumenti affidabili basati su AI che riducono al minimo il tempo dedicato alla scrittura, al debug, al refactoring o al completamento del codice, lasciando più spazio all'innovazione.

Esplora le soluzioni di codifica AI
Consulenza e servizi sull'AI

Reinventa i workflow e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.

Esplora i servizi di consulenza per l'AI
Prossimi passi

Utilizza l'AI generativa e l'automazione avanzata per creare più velocemente codice enterprise-ready. I modelli di Bob ampliano le competenze degli sviluppatori, semplificando e automatizzando le attività di sviluppo e modernizzazione.

  1. Scopri IBM Bob
  2. Esplora le soluzioni di codifica AI