Programmieren und KI: Künstliche Intelligenz in der Softwareentwicklung

Seite 4: Hey Siri, schreib ein Python-Programm!

Inhaltsverzeichnis

Der Erfolg von Sprachassistenten wie Siri und Alexa legt die Idee nahe, auch Programmieraufgaben in natürlicher Sprache zu beschreiben. Neuronale Netze haben in den letzten Jahren neue Maßstäbe beim Verarbeiten natürlicher Sprache gesetzt. Im Blickpunkt der aktuellen Forschung stehen dabei zunehmend allgemeine Sprachmodelle. Dabei werden neuronale Netzwerke auf einer generischen Aufgabe wie dem Vervollständigen eines Textes vortrainiert (Pre-Training).

Das Netzwerk lernt auf diese Weise den Aufbau und die Struktur natürlicher Sprache. Anschließend wird das vortrainierte Modell in einem weiteren Training auf eine Anwendung spezialisiert (Finetuning). Sprachmodelle wie GPT-3 gehen sogar so weit, dass gar kein ausgedehntes zweites Training mehr nötig ist. GPT-3 lässt sich aus dem Stand (Zero-Shot), mit einem einzelnen Beispiel (One-Shot) oder mit einigen wenigen Beispielen (Few-Shot) für neue Anwendungen einsetzen. Die wenigen Beispiele dienen als eine Art Blaupause für den neu zu generierenden Text.

Um Python-Code zu generieren, genügt ein einziges Paar von einer natürlichsprachlichen Beschreibung und dazugehörigem Python-Code, um GPT-3 darauf vorzubereiten, anschließend den Python-Code für den größten gemeinsamen Teiler zu generieren. Die Größe von GPT-3 (175 Milliarden Parameter) sowie die Menge und Vielfalt der Daten, auf denen trainiert wurde (300 Milliarden Token), ermöglichen das Few-Shot-Lernen. Die Daten basieren zu einem großen Teil auf denen von Common Crawl, die Petabytes im Web gesammelter Daten umfassen. Da Common Crawl auch Daten von Plattformen wie GitHub und Stack Overflow sammelt, beherrscht GPT-3 die Syntax verschiedenster Programmiersprachen, ohne dafür noch einmal gesondert trainieren zu müssen.

Die große und vielfältige Datenmenge, auf der GPT-3 trainiert wurde, ermöglicht es auch, Aufgaben zu stellen, die mathematische Kenntnisse oder schlicht Allgemeinwissen erfordern. So kann GPT-3 erfolgreich Python-Code generieren, der überprüft, ob eine Zahl eine Primzahl oder ob ein Jahr ein Schaltjahr ist – und das ohne eine Definition, was darunter zu verstehen ist.

Der Anschein, dass die KI die Bedeutung der Begriffe "versteht", ist jedoch trügerisch. Eine minimale Variation der Aufgabenstellung, etwa ob statt der gegebenen Zahl die Zahl "minus vier" eine Primzahl ist, lässt GPT-3 noch scheitern. Und auch wenn die Programmieraufgabe erfolgreich gelöst wird, ist Vorsicht geboten.

Aufmerksamen Leserinnen und Lesern mag schon aufgefallen sein, dass sich in den Code für den größten gemeinsamen Teiler im Listing Fehler eingeschlichen haben: Er ruft die Python-Funktion gcd fälschlicherweise mit den Variablen x und y statt n und m auf. Problematisch ist außerdem die Bedingung x == y, die nach der Rekursionsfolge (5,10) -> (10, 5) -> (5, 0) zu einem ZeroDivisionError bei der Modulo-Operation führt, statt den erwarteten Wert 5 zurückzugeben. Korrekt wäre an dieser Stelle die Bedingung y == 0. Dass Sprachmodelle wie GPT-3 Programmierfehler machen, ist nicht weiter überraschend. Ein offensichtlicher Grund ist, dass die Trainingsdaten aus dem Web stammen. Wenn die Trainingsdaten Fehler enthalten, dann ist auch der generierte Code falsch. Das logische Denken, mit dem man solche Fehler erkennen könnte, fehlt heutigen Sprachmodellen noch völlig.