LEVER : Apprendre à vérifier la génération de code à partir de langage par exécution

L’arrivée des grands modèles linguistiques entraînés sur du code (code LLMs) a permis des progrès significatifs dans la génération de code à partir de langage naturel. Les approches les plus avancées dans ce domaine combinent le décodage par LLM avec une élagage d’échantillons et un réclassement basés sur des cas de test ou des heuristiques tirées des résultats d’exécution. Toutefois, il est difficile d’obtenir des cas de test pour de nombreuses applications réelles de génération de code à partir de langage naturel, et les heuristiques ne parviennent pas à bien capturer les caractéristiques sémantiques des résultats d’exécution, telles que le type de données ou la plage de valeurs, qui indiquent souvent la correction du programme. Dans ce travail, nous proposons LEVER, une approche simple visant à améliorer la génération de code à partir de langage naturel en apprenant à vérifier les programmes générés à partir de leurs résultats d’exécution. Plus précisément, nous entraînons des vérificateurs à déterminer si un programme échantillonné à partir des LLMs est correct ou non, en se basant sur l’entrée en langage naturel, le programme lui-même et ses résultats d’exécution. Les programmes échantillonnés sont réclassés en combinant le score de vérification avec la probabilité de génération du LLM, tout en marginalisant sur les programmes produisant les mêmes résultats d’exécution. Sur quatre jeux de données couvrant les domaines de la question-réponse sur table, de la question-réponse mathématique et de la programmation Python élémentaire, LEVER améliore de manière cohérente les modèles de base (de 4,6 % à 10,9 % avec code-davinci-002) et atteint de nouveaux états de l’art sur l’ensemble d’entre eux.