Über die Schulter geschaut - Prof. Dr. Bernd Finkbeiner, Frederik Schmitt - CISPA
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Titel | Codesynthese Künstliche Intelligenz in der Softwareentwicklung Über die Schulter geschaut Prof. Dr. Bernd Finkbeiner, Frederik Schmitt Künstliche Intelligenz hilft Entwicklern beim Coden. Die Frage ist, ob KI Entwickler-Know-how auch ersetzen kann. Der Artikel beleuchtet den derzeitigen Forschungsstand. E ntwicklerinnen und Entwickler müs grammieraufgabe automatisch, also durch zum Berechnen von Fibonacci-Zahlen er sen in der modernen Softwareent einen Algorithmus, in ein Computerpro zeugt GPT-3 den im Listing gezeigten wicklung immer seltener Probleme gramm zu übersetzen, sodass das Programm Python-Code. von Grund auf neu lösen. Ein Großteil der die Aufgabe für jede mögliche Eingabe Funktionen steckt in Bibliotheken, und korrekt löst? Plattformen wie GitHub und Stack Over Heute, mehr als 60 Jahre später, scheint Websites automatisch mit flow liefern Millionen Codebeispiele zu die Antwort zum Greifen nah. Sprachmo GPT-3 programmieren nahezu jeder denkbaren Programmierauf delle wie das vom kalifornischen Start-up gabe. Machine Learning könnte die Pro OpenAI im letzten Jahr vorgestellte GPT-3 Eine der beeindruckendsten Anwendungen grammierarbeit noch einmal vereinfachen. (Generative Pre-trained Transformer 3) dieser Technologie ist die automatische Pro Der Wunsch nach Programmen, die sind in der Lage, in natürlicher Sprache grammierung von Websites. Auf Twitter Programme schreiben, ist so alt wie die In formulierte Anforderungen vollautoma kursieren Videos, etwa von Debuild-Grün formatik. Schon 1957 formulierte Alonzo tisch in ein Computerprogramm zu über der Sharif Shameem, die zeigen, wie GPT-3 Church, einer der Gründer der damals noch setzen. Aus der Beschreibung “compute aus einer beliebigen Layoutbeschreibung jungen Disziplin, die Herausforderung: the greatest common divisor of two inte JSX-Code macht (Abbildung 1). Nutzer ge Ist es möglich, die Spezifikation einer Pro gers” und einem einzigen Codebeispiel ben lediglich einen kurzen englischen Text ein, beispielsweise: “the google logo, a search box, 2 lightgrey buttons that say 1-TRACT ‘Search Google’ and ‘I’m feeling Lucky’ with padding in-between them”. Doch es ⚫⚫ Entwicklerinnen und Entwickler erhalten beim Programmieren Hilfe durch stellt sich die Frage, wie zuverlässig das ist künstliche Intelligenz. und ob die automatische Codegenerierung ⚫⚫ Sprachmodelle wie GPT-3 übertragen in natürlicher Sprache gegebene mehr als nur automatisiertes Copy-and- Anforderungen in ein Programm. Paste ist. ⚫⚫ Die Programmsynthese aus logischen Spezifikationen eignet sich für Das Potenzial von Sprachmodellen wie sicherheitskritische Systeme. GPT-3 hat auch Microsoft erkannt und im Jahr 2019 eine Milliarde US-Dollar in OpenAI investiert. Jetzt stellte die Micro 40 iX 8/2021
Quelle: Twitter soft- Tochter GitHub gemeinsam mit OpenAI den GitHub Copilot vor (siehe Kasten auf S. 42). Copilot nutzt Codex, eine Weiterentwicklung von GPT-3: Die KI analysiert Kommentare und das bisher geschriebene Programm, um damit ein zelne Codezeilen oder ganze Funktionen zu vervollständigen. Erste Reaktionen sind mehrheitlich po sitiv, doch nicht immer funktioniert der von Copilot produzierte Code. GitHub selbst rät dazu, den generierten Code sorg fältig zu prüfen. Die Verantwortung dafür, dass das Programm am Ende stimmt, bleibt beim menschlichen Programmierer. Der Klassiker unter den Methoden für die Codegenerierung ist die Programmsyn these aus logischen Spezifikationen. Genau wie eine informelle Beschreibung der Pro grammfunktionalität in natürlicher Spra che ist eine logische Spezifikation deklara tiv, das heißt, sie kann viele verschiedene Ausführungen zulassen. Zum Beispiel for dert die Formel x > 0 nur, dass der Wert von x positiv ist; ein Programm, das x auf 1 setzt, erfüllt die Anforderung genauso wie eines, Automatisiertes Webdesign: GPT-3 kann Websites aus kurzen englischsprachigen das x auf 2 oder 500 setzt. Im Gegensatz zu Beschreibungen erzeugen (Abb. 1). natürlicher Sprache haben formale Logi ken eine mathematisch präzise Semantik: schiedener Master niemals überlappen. Aus G (!(g_0 && g_1)) Ist eine Anforderung einmal als logische der logischen Spezifikation erzeugt ein Syn Formel spezifiziert, gibt es keine Unsicher thesewerkzeug wie das am CISPA Helm besagt, dass die Ausgabesignale g_0 und heit mehr darüber, wie die Anforderung zu holtz-Zentrum für Informationssicherheit g_1 niemals gleichzeitig den Wert 1 haben verstehen ist. entwickelte BoSy (siehe ix.de/zgnu) auto dürfen. Der für diese Spezifikation gene Ein typisches Beispiel für Systeme, die matisch korrekten Verilog-Code, der sich rierte Verilog-Code ist rechts in der Abbil sich gut für die automatische Synthese aus direkt in Hardware oder auf einem FPGA dung 2 zu sehen. Die synthetisierte Lösung logischen Spezifikationen eignen, ist der (Field Programmable Gate Array) reali wechselt zwischen dem Ausgangssignal g_0 AMBA-AHB-Buscontroller von ARM. Die sieren lässt. und dem Ausgangssignal g_1. Advanced Microcontroller Bus Architec Abbildung 2 zeigt das Prinzip an einem Mathematisch gesehen ist die Pro ture (AMBA) ist ein Kommunikationsstan einfacheren Beispiel, der Synthese eines grammsynthese aus logischen Spezifi dard für den On-Chip-Nachrichtenaus Arbiters: Jeder Request ist mit einem Grant kationen perfekt: Der generierte Code ist tausch zwischen Prozessorkernen, Cache zu beantworten, aber niemals dürfen zwei beweisbar korrekt, das heißt, er erfüllt mit Memory und DMA-Controllern. An den Grants zugleich vergeben werden. Der von Sicherheit die gestellten Anforderungen, Bus sind sechzehn solcher Geräte als Mas BoSy automatisch generierte Verilog-Code egal auf welchen Eingaben er angewendet ter und weitere sechzehn als Slave ange wählt die einfachste Lösung: Er wechselt wird. Diesem Vorteil steht allerdings ein schlossen; die Master melden dem Bus einfach zwischen den Grants hin und her. hoher Rechenaufwand gegenüber. Deshalb Kommunikationswünsche an bestimmte Im Detail finden sich drei logische For lassen sich derzeit nur relativ kleine Pro Slaves und bekommen vom Buscontroller meln: gramme synthetisieren. In der Praxis ist da entsprechende Zeitfenster zugewiesen. Der (G ((r_0) -> (F (g_0)))) rüber hinaus der Aufwand für das logische Standard wurde in eine logische Spezifika Formalisieren der gewünschten Programm tion übersetzt und wird seither oft als Bench bedeutet, dass ein Wert 1 auf dem Eingang eigenschaften oft eine nicht zu unterschät mark für die Codegenerierung verwendet. r_0 (ein Request) die Ausgabe g_0 (ein zende Hürde. Die Spezifikation besteht aus fünfzehn Grant) auf den Wert 1 setzt. Formeln, die beispielsweise ausdrücken, dass jeder Master, dem ein Zeitfenster zu (G ((r_1) -> (F (g_1)))) Praktisch und schnell: geteilt wird, dieses auch tatsächlich ver meint das Gleiche für das Eingabesignal Code aus Beispielen langt hat und dass sich die Zeitfenster ver r_1 und das Ausgabesignal g_1. Die Formel Eine intuitive Art, das gewünschte Verhal Listing: Von GPT-3 generierter Python-Code erscheint nur auf den ersten Blick korrekt ten eines Programms festzulegen, ist die Angabe von Beispielen. Microsoft-Anwen n = int(input("Enter n: ")) der kennen diese Form der Spezifikation m = int(input("Enter m: ")) def gcd(x, y): durch das Flash-Fill-Feature (Blitzvor return x if x == y else gcd(y, x % y) schau) in Excel. Gibt man in Excel Daten print(f"The greatest common divisor of {x} and {y} is {gcd(x, y)}" ) ein, die ein bestimmtes Muster aufweisen, etwa die Trennung vollständiger Namen iX 8/2021 41
Titel | Codesynthese in Vor- und Nachnamen, dann kann Excel dieses Muster erkennen und eine Tabelle automatisch vervollständigen. Hinter den Kulissen verwendet Excel eine Programmiersprache für String-Trans formationen mit Operationen für reguläre Ausdrücke, Fallunterscheidungen, Schlei fen und Ähnliches. Für das automatische Vervollständigen der Tabelle in Abbil dung 4 generiert Excel ein Programm in dieser Sprache, das aus der ersten Spalte, in der die vollständigen Namen aufgelis tet sind, eine zweite Spalte mit den Nach namen erzeugt. Die vollständigen Namen können dabei entweder in der Form „Vor name Nachname“ oder in der Form „Nach name, Vorname“ angegeben sein. Das Programm extrahiert dazu aus ei nem gegebenen String das Wort vor dem Komma oder – falls der String kein Komma enthält – das letzte Wort im String. Das Flash-Fill-Feature erzeugt die ses Programm in weniger als 0,1 Sekun den aus den vom Nutzer vorgegebenen Automatische Synthese von Verilog-Code aus einer logischen Spezifikation: Links stehen Beispielen. Der Codegenerierungsalgo drei Formeln, rechts ist der für diese Spezifikation generierte Verilog-Code zu sehen rithmus berechnet dazu zunächst für jede (Abb. 2). Beispielzeile eine Menge von Program men, deren Ergebnis diesem Beispiel ent Das Prinzip hinter Flash Fill ist die der Analyse von Logfiles, beim Extrahie spricht. Wenn ein Programm darunter ist, Syntax-Guided Synthesis (SyGuS). Beim ren von Daten aus PDF-Dokumenten und das in allen Beispielen funktioniert, dann Einsatz von SyGuS besteht der zentrale beim Codieren von Datenbankabfragen ist dieses Programm die gesuchte Lösung. Schritt darin, die Menge aller möglichen als SQL-Abfragen. SyGuS spielt seine Stär Andernfalls werden die Beispiele in ver Programme mithilfe einer domänenspe ken immer dann aus, wenn es sich um ei schiedene Klassen partitioniert, die je zifischen Sprache (DSL) zu formalisieren. nen überschaubaren und kompakt als DSL weils eine gemeinsame Lösung haben. Frameworks wie PROSE von Microsoft beschreibbaren Aufgabenbereich handelt. Hier im Beispiel haben „Anna-Maria berechnen dann aus den gegebenen Bei Schmidt“ und „Julia Richards“ dieselbe spielen ein möglichst einfaches, in der DSL Lösung (das letzte Wort), „Brinkmann, ausgedrücktes Programm, das sich auf den Hey Siri, schreib ein Klaus“ dagegen eine andere (das Wort vor Beispielen richtig verhält. Python-Programm! dem Komma). Die verschiedenen Klas Anschließend lässt sich das Programm sen werden dann mithilfe einer Fallunter auf neuen Daten ausführen. SyGuS ist Der Erfolg von Sprachassistenten wie scheidung kombiniert. in vielen Anwendungen einsetzbar: bei Siri und Alexa legt die Idee nahe, auch Pro GitHub Copilot: KI schreibt Code Kurz vor Redaktionsschluss dieser Ausgabe haben GitHub und OpenAI den GitHub Copilot vorgestellt. Der „AI Pair Programmer“ schlägt beim Programmieren nicht nur einzelne Codezeilen, sondern auch komplette Funktionen vor. Grundlage der Vorschläge ist der restliche Inhalt der Datei, insbesondere auch der natürlichsprachliche Kontext wie Funk tions- und Variablennamen, Kommentare und Docstrings. In vielen Demonstrationen genügen Funktionskopf und Kommentar, um die kom- plette Funktion zu vervollständigen. Laut GitHub trifft der Copilot in 43 % der Fälle auf Anhieb die richtige Lösung, bei zehn Versuchen soll sich die Quote auf 57 % erhöhen. Die Vorschläge liefert das von OpenAI entwickelte Codex-Modell, das auf Milliarden öffentlicher Programm- und Textzeilen trainiert wurde. Ent- sprechend funktioniert der Copilot besonders gut für populäre Sprachen wie Python und JavaScript. Derzeit steht der GitHub Copilot als Erwei- terung für Visual Studio Code nur einer kleinen, ausgewählten Gruppe von Testern zur Verfügung. Nach erfolgreicher Testphase will GitHub eine kommerzielle Version anbieten. Der GitHub Copilot schreibt ganze Funktionen (Abb. 3). 42 iX 8/2021
grammieraufgaben in natürlicher Sprache cklungsplattformen ist erfolgversprechend zu beschreiben. Neuronale Netze haben in (siehe Artikel „Code-Diktat“ auf S. 56). den letzten Jahren neue Maßstäbe beim Für die Forschung besteht die Heraus Verarbeiten natürlicher Sprache gesetzt. forderung jetzt darin, die Erfolge der Sprach Im Blickpunkt der aktuellen Forschung modelle bei der Verarbeitung natürlicher stehen dabei zunehmend allgemeine Sprache auf die Programmiersprachen mit Sprachmodelle. Dabei werden neuronale ihrer sehr viel präziseren Semantik zu über Netzwerke auf einer generischen Aufgabe tragen. Welches Potenzial in diesem Weg wie dem Vervollständigen eines Textes steckt, lässt der Erfolg des etablierten Code- vortrainiert (Pre-Training). Completion-Werkzeugs Tabnine erahnen Das Netzwerk lernt auf diese Weise den (siehe Artikel „KInematik“ auf S. 44). Ge Aufbau und die Struktur natürlicher Spra nau wie der GitHub Copilot macht Tabnine che. Anschließend wird das vortrainierte Das Flash-Fill-Feature in Microsoft Excel Programmierern während des Editierens Modell in einem weiteren Training auf eine vervollständigt automatisch die obere zur Vorschläge, wie die Codezeile weitergehen Anwendung spezialisiert (Finetuning). unteren Tabelle (Abb. 4). könnte. Tabnine setzt auf GPT-2 auf, dem Sprachmodelle wie GPT-3 gehen sogar so Vorgänger von GPT-3. Das Tool trainiert weit, dass gar kein ausgedehntes zweites Teiler im Listing Fehler eingeschlichen ha auf Millionen von Open-Source-Program Training mehr nötig ist. GPT-3 lässt sich ben: Er ruft die Python-Funktion gcd fälsch men und zusätzlich auf der individuellen aus dem Stand (Zero-Shot), mit einem ein licherweise mit den Variablen x und y statt Codebasis des Programmierers. Tabnine zelnen Beispiel (One-Shot) oder mit eini n und m auf. Problematisch ist außerdem „kennt“ dadurch nicht nur die Syntax ver gen wenigen Beispielen (Few-Shot) für die Bedingung x == y, die nach der Rekur schiedenster Programmiersprachen, son neue Anwendungen einsetzen. Die weni sionsfolge (5,10) -> (10, 5) -> (5, 0) zu dern auch gängige Ausdrücke, typische gen Beispiele dienen als eine Art Blaupause einem ZeroDivisionError bei der Modulo- Variablennamen und die richtige Verwen für den neu zu generierenden Text. Operation führt, statt den erwarteten Wert 5 dung von Bibliotheken. Um Python-Code zu generieren, genügt zurückzugeben. Korrekt wäre an dieser Künftig sollte es möglich sein, die ein ein einziges Paar von einer natürlichsprach Stelle die Bedingung y == 0. Dass Sprach fache Benutzbarkeit und das Hintergrund lichen Beschreibung und dazugehörigem modelle wie GPT-3 Programmierfehler wissen der Sprachmodelle mit der mathe Python-Code, um GPT-3 darauf vorzube machen, ist nicht weiter überraschend. Ein matischen Präzision der Programmsynthese reiten, anschließend den Python-Code für offensichtlicher Grund ist, dass die Trai aus logischen Spezifikationen zu verbin den größten gemeinsamen Teiler zu ge ningsdaten aus dem Web stammen. Wenn den. Hybride Algorithmen, die Deep Lear nerieren (siehe Listing). Die Größe von die Trainingsdaten Fehler enthalten, dann ning mit klassischen Methoden der Logik GPT-3 (175 Milliarden Parameter) sowie ist auch der generierte Code falsch. Das lo kombinieren, könnten helfen, die komplexe die Menge und Vielfalt der Daten, auf de gische Denken, mit dem man solche Feh Codesynthese aus logischen Spezifika nen trainiert wurde (300 Milliarden Token), ler erkennen könnte, fehlt heutigen Sprach tionen besser in den Griff zu bekommen. ermöglichen das Few-Shot-Lernen. Die modellen noch völlig. Darüber hinaus könnten Sprachmodelle Daten basieren zu einem großen Teil auf Nutzer beim Entwerfen und Verstehen der denen von Common Crawl, die Petabytes logischen Spezifikationen unterstützen. im Web gesammelter Daten umfassen Fazit Denn selbst wenn die KI dem Menschen ir (siehe ix.de/zgnu). Da Common Crawl auch gendwann einmal das Programmieren kom Daten von Plattformen wie GitHub und Sorgen, dass die KI menschliche Software plett abnehmen sollte, muss man ihr immer Stack Overflow sammelt, beherrscht GPT-3 entwickler bald überflüssig machen wird, noch sagen, welche Funktion die Software die Syntax verschiedenster Programmier muss man sich wohl nicht machen. Der nun eigentlich erbringen soll.(nb@ix.de) sprachen, ohne dafür noch einmal geson Weg zu einer KI, die für beliebige Pro dert trainieren zu müssen. grammieraufgaben zuverlässig Code ho Quellen Die große und vielfältige Datenmenge, her Qualität generiert, ist noch weit. In auf der GPT-3 trainiert wurde, ermöglicht spezialisierten Bereichen leistet die KI-ba Synthesetool BoSy, Common Crawl und es auch, Aufgaben zu stellen, die mathema sierte Codegenerierung aber heute schon GitHub Copilot: ix.de/zgnu tische Kenntnisse oder schlicht Allgemein Erstaunliches. Die Programmsynthese aus wissen erfordern. So kann GPT-3 erfolg logischen Spezifikationen ist insbesondere Prof. Dr. Bernd Finkbeiner reich Python-Code generieren, der überprüft, dann sinnvoll, wenn es um Anwendungen lehrt Informatik an der Universität des ob eine Zahl eine Primzahl oder ob ein Jahr geht, bei denen Programmierfehler teuer Saarlandes und forscht im Bereich auto ein Schaltjahr ist – und das ohne eine Defi oder gefährlich sind, etwa im Bereich der matischer Methoden für die Programm nition, was darunter zu verstehen ist. cyber-physischen Systeme. verifikation und -synthese am CISPA Der Anschein, dass die KI die Bedeu Die Codegenerierung aus Beispielen mit Helmholtz-Zentrum für Informations tung der Begriffe „versteht“, ist jedoch trü SyGuS skaliert noch nicht bis zum Entwi sicherheit in Saarbrücken. gerisch. Eine minimale Variation der Auf ckeln vollständiger Applikationen, kann gabenstellung, etwa ob statt der gegebenen aber das Erstellen kniffliger Programm Zahl die Zahl „minus vier“ eine Primzahl stücke wie SQL-Abfragen vereinfachen. Frederik Schmitt ist, lässt GPT-3 noch scheitern. Und auch Die Codesynthese aus Sprachmodellen promoviert im Bereich Deep Learning und wenn die Programmieraufgabe erfolgreich schließlich kann noch nicht mit den Qua Programmsynthese an der Universität des gelöst wird, ist Vorsicht geboten. litätsansprüchen der klassischen Methoden Saarlandes und arbeitet als wissenschaft Aufmerksamen Leserinnen und Lesern mithalten, ist aber gerade im schnellen Pro licher Mitarbeiter am CISPA Helmholtz- mag schon aufgefallen sein, dass sich in totyping oft verblüffend kreativ. Der Ein Zentrum für Informationssicherheit in den Code für den größten gemeinsamen satz in Designtools und Low-Code-Entwi Saarbrücken. iX 8/2021 43
Sie können auch lesen