Ein neues neuronales Netzwerk hilft Computern, sich selbst zu codieren

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels „Ein neues neuronales Netzwerk könnte Computern helfen, sich selbst zu codieren“ von Will Douglas Heaven.



Bild



Das Tool erkennt Ähnlichkeiten zwischen Programmen, damit Programmierer schneller und effizienter Software schreiben können.



Computerprogrammierung war noch nie so einfach. Die ersten Programmierer schrieben Programme von Hand und zeichneten Zeichen auf Millimeterpapier auf, bevor sie sie in große Stapel Lochkarten umwandelten, die von einem Computer verarbeitet werden konnten. Ein Fehler, und möglicherweise muss alles wiederholt werden.



Codierer verwenden heutzutage viele leistungsstarke Tools, die einen Großteil der Arbeit automatisieren, vom Abfangen von Fehlern während der Eingabe bis zum Testen Ihres Codes vor dem Anwenden. Ansonsten hat sich wenig geändert. Ein dummer Fehler kann immer noch eine ganze Software zum Absturz bringen. Und da Systeme immer komplexer werden, wird es immer schwieriger, diese Fehler aufzuspüren.
„Manchmal kann es mehrere Tage dauern, bis Codiererteams einen Fehler behoben haben“, sagt Justin Gottschlich, Direktor der Forschungsgruppe für Maschinenprogrammierung bei Intel.




Aus diesem Grund denken einige Leute, wir sollten nur Maschinen dazu bringen, sich selbst zu programmieren. Die automatische Codegenerierung ist seit einigen Jahren ein heißes Forschungsthema. Microsoft bettet die grundlegende Codegenerierung in seine weit verbreiteten Softwareentwicklungstools ein, Facebook hat ein System namens Aroma entwickelt, das kleine Programme automatisch beendet, und DeepMind hat ein neuronales Netzwerk entwickelt, das effizientere Versionen einfacher Algorithmen als die von Menschen entwickelten erstellen kann. Sogar das OpenAI GPT-3-Sprachmodell kann einfache Codefragmente wie Webseitenlayouts aus Abfragen in natürlicher Sprache erstellen.



Gottslich und Kollegen nennen es Maschinenprogrammierung.... In Zusammenarbeit mit einer Gruppe von Intel, MIT und dem Georgia Institute of Technology in Atlanta entwickelte er ein System namens Machine Inferred Code Similarity (MISIM), mit dem die Bedeutung eines Codeteils - was der Code einem Computer sagt - extrahiert werden kann Ähnlich wie NLP-Systeme (Natural Language Processing) einen englischsprachigen Absatz lesen können.



MISIM kann dann andere Möglichkeiten zum Schreiben des Codes vorschlagen, Korrekturen vorschlagen und Möglichkeiten, ihn schneller oder effizienter zu machen. Die Fähigkeit des Tools zu verstehen, was ein Programm versucht, ermöglicht es ihm, andere Programme zu identifizieren, die ähnliche Dinge tun. Theoretisch könnte dieser Ansatz von Maschinen verwendet werden, die ihre eigene Software geschrieben haben und sich auf einen Patchwork-Quilt aus bereits vorhandener Software mit minimaler menschlicher Kontrolle oder Eingabe stützen.



MISIM vergleicht Codefragmente mit Millionen anderer Programme, die es bereits gesehen hat und die aus einer großen Anzahl von Online-Repositories stammen. Zuerst wird der Code in eine Form übersetzt, die erfasst, was er tut, aber ignoriert, wie er geschrieben wird, da zwei Programme, die auf sehr unterschiedliche Weise geschrieben wurden, manchmal dasselbe tun. MISIM verwendet dann das neuronale Netzwerk, um nach einem anderen Code zu suchen, der eine ähnliche Bedeutung hat. In einem Preprint berichten Gottshlich und Kollegen, dass MISIM 40-mal genauer ist als frühere Systeme, die dies versuchen, einschließlich Aroma.



MISIM ist ein aufregender Schritt nach vorne, sagt Veselin Raychev, CTO des Schweizer Unternehmens DeepCode, dessen Fehlererkennungstools - einige der fortschrittlichsten auf dem Markt - neuronale Netze verwenden, die in Millionen von Programmen geschult wurden, um Codierern beim Schreiben Verbesserungen vorzuschlagen.

Aber maschinelles Lernen kann immer noch nicht vorhersagen, ob etwas ein Fehler ist, sagt Raichev. Dies liegt daran, dass es schwierig ist, einem neuronalen Netzwerk beizubringen, was ein Fehler ist oder nicht, wenn es von einem Menschen nicht als solches gekennzeichnet wird.
Ihm zufolge gab es viele interessante Studien mit tiefen neuronalen Netzen und Fehlerkorrekturen, "aber praktisch sind sie noch nicht mit großem Abstand da". In der Regel geben AI-Bug-Catching-Tools viele Fehlalarme ab, sagte er.



MISIM behandelt dies, indem maschinelles Lernen verwendet wird, um Ähnlichkeiten zwischen Programmen zu identifizieren, anstatt Fehler direkt zu erkennen. Durch den Vergleich eines neuen Programms mit vorhandener Software, von der bekannt ist, dass sie korrekt ist, kann der Encoder auf wichtige Unterschiede aufmerksam gemacht werden, die zu Fehlern führen.



Intel plant, dieses Tool als Empfehlungssystem für seine eigenen Entwickler zu verwenden und Alternativen anzubieten, um Code schneller oder effizienter zu schreiben. Da MISIM jedoch nicht an die Syntax eines bestimmten Programms gebunden ist, kann es viel mehr. Beispielsweise kann es verwendet werden, um in einer alten Sprache wie COBOL geschriebenen Code in eine modernere Sprache wie Python zu übersetzen. Dies ist wichtig, da viele Institutionen, einschließlich der US-Regierung , immer noch auf Software angewiesen sind, die in Sprachen geschrieben ist, die nur wenige Programmierer warten oder aktualisieren können.



Letztendlich glaubt Gottslikh, dass diese Idee auf die natürliche Sprache angewendet werden kann. Kombiniert mit NLP (Die Verarbeitung natürlicher Sprache, nicht zu verwechseln mit der neurolinguistischen Programmierung . Die Fähigkeit, mit der Bedeutung des Codes getrennt von seiner Textdarstellung zu arbeiten, könnte es den Menschen eines Tages ermöglichen, Software zu schreiben, indem sie einfach beschreiben, was sie in Worten tun möchten, sagt er.

„Das Erstellen kleiner Apps für Ihr Telefon oder ähnliches hilft Ihnen im Alltag - ich denke, es ist nicht so weit“, sagt Gottshlich. "Ich würde gerne sehen, dass 8 Milliarden Menschen Software auf eine für sie natürliche Weise erstellen."



All Articles