LEVER: Lernen zur Überprüfung der Sprache-zu-Code-Generierung mittels Ausführung

Der Aufstieg großer Sprachmodelle, die auf Code trainiert wurden (Code-LLMs), hat erhebliche Fortschritte bei der Generierung von Code aus natürlicher Sprache ermöglicht. Moderne Ansätze in diesem Bereich kombinieren die Dekodierung durch LLMs mit einer Auswahlverfeinerung und Neubewertung von Proben, basierend auf Testfällen oder Heuristiken, die auf den Ausführungsresultaten beruhen. Allerdings ist es für viele Anwendungen in der realen Welt schwierig, geeignete Testfälle zu beschaffen, und Heuristiken können die semantischen Merkmale der Ausführungsresultate – wie Datentypen oder Wertebereiche – nicht ausreichend erfassen, die oft entscheidend für die Korrektheit eines Programms sind. In dieser Arbeit stellen wir LEVER vor, einen einfachen Ansatz zur Verbesserung der Sprache-zu-Code-Generierung durch das Lernen, generierte Programme anhand ihrer Ausführungsresultate zu überprüfen. Konkret trainieren wir Verifikatoren, um anhand der natürlichen Spracheingabe, des Programms selbst und seiner Ausführungsresultate zu bestimmen, ob ein aus dem LLM stammendes Programm korrekt ist oder nicht. Die ausgewählten Programme werden neu bewertet, indem die Verifikationsbewertung mit der Generierungswahrscheinlichkeit des LLM kombiniert und über Programme mit identischen Ausführungsresultaten marginalisiert wird. Auf vier Datensätzen aus den Bereichen Tabellen-Frage-Antwort (Table QA), mathematische Frage-Antwort (Math QA) und grundlegendes Python-Programmieren verbessert LEVER konsistent die Basis-Code-LLMs (um 4,6 % bis 10,9 % bei code-davinci-002) und erreicht auf allen Datensätzen neue SOTA-Ergebnisse.