Incontra LEVER un semplice approccio di intelligenza artificiale per migliorare la generazione di codice da linguaggio imparando a verificare i programmi generati con i loro risultati di esecuzione.

Incontra LEVER, un approccio semplice di intelligenza artificiale per migliorare la generazione di codice, imparando a verificare i programmi generati con i risultati di esecuzione.

I modelli di linguaggio di grandi dimensioni (LLM) hanno recentemente compiuto progressi significativi. Questi modelli hanno notevolmente migliorato il campo dell’Intelligenza Artificiale e hanno un enorme potenziale per completare vari tipi di compiti. Dai l’imitazione degli esseri umani rispondendo a domande e creando contenuti, alla sintesi di paragrafi di testo e alla traduzione di lingue, gli LLM possono fare tutto. Gli assistenti virtuali, il controllo dei robot, le interfacce dei database e altre applicazioni di intelligenza artificiale dipendono tutti dalla capacità di tradurre descrizioni di linguaggio naturale in codice eseguibile. Anche se i LLM di codice, o semplicemente i modelli pre-addestrati sul codice, hanno dimostrato ottime prestazioni nell’utilizzo dell’apprendimento in-context few-shot, le prestazioni di questi modelli potrebbero essere migliorate e l’ottimizzazione sarebbe costosa dal punto di vista computazionale.

Mentre gli LLM potrebbero avere difficoltà con l’accuratezza in situazioni con pochi esempi, offrono spesso risultati accurati quando vengono forniti abbastanza campioni, ovvero quando i campioni sono tratti su larga scala, il voto a maggioranza e il filtraggio dai casi di test possono migliorare notevolmente le loro prestazioni. I tipi di dati, gli intervalli di valore e le proprietà delle variabili sono potenti indicatori della correttezza del programma e sono ricchi elementi semantici delle soluzioni del modello. In uno studio recente, un team di ricercatori ha introdotto Learning to Verify (LEVER), un approccio per la generazione di codice da linguaggio naturale utilizzando gli LLM di codice.

LEVER fa uso di una rappresentazione combinata della descrizione di linguaggio naturale, della forma superficiale del programma e del risultato dell’esecuzione per addestrare il verificatore a identificare e rifiutare programmi difettosi. La probabilità di verifica e la probabilità di generazione degli LLM vengono combinate per creare una probabilità aggregata, e i programmi con risultati di esecuzione identici vengono marginalizzati. I programmi con la migliore probabilità di fornire l’output corretto vengono scelti come output utilizzando questa probabilità come punteggio di riordino.

LEVER è stato proposto per migliorare la creazione di codice da linguaggio naturale includendo un processo di apprendimento per la verifica e per giudicare se un programma campionato dagli LLM è accurato. LEVER cerca di migliorare la precisione e la correttezza dell’output controllando i programmi creati. Per la valutazione, sono state effettuate sperimentazioni su quattro set di dati che rappresentano diversi domini, tra cui QA delle tabelle, QA matematica e programmazione Python fondamentale, per valutare l’efficacia di LEVER. I vantaggi delle prestazioni utilizzando code-davinci-002 sono variati dal 4,6% al 10,9%, e i risultati hanno costantemente superato gli LLM di base. Su tutti i set di dati, LEVER ha raggiunto risultati di stato dell’arte completamente nuovi, dimostrando la sua superiorità nella produzione di codice preciso e rilevante dal contesto a partire da descrizioni di linguaggio naturale.

In conclusione, la tecnica LEVER migliora la capacità degli LLM di codice di tradurre descrizioni di linguaggio naturale in codice eseguibile. Questo metodo supera le strategie tradizionali di potatura degli errori di esecuzione in termini di accuratezza utilizzando un verificatore che tiene conto dei risultati dell’esecuzione. I risultati dimostrano la sua efficienza in una serie di compiti di traduzione da linguaggio a codice e suggeriscono che ha il potenziale per migliorare diverse applicazioni di intelligenza artificiale, inclusi l’interfacciamento con i database, il controllo dei robot e gli assistenti virtuali.