IBM öffnet CodeNet für maschinelle Lernsysteme, die Code übersetzen und verifizieren

IBM hat seine CodeNet-Initiative vorgestellt, die darauf abzielt, Forschern einen Datensatz zur Verfügung zu stellen, der es ihnen ermöglicht, mit dem Einsatz maschineller Lerntechniken zu experimentieren, um Programmiersprachenübersetzer, Codegeneratoren und Analysegeräte zu erstellen. CodeNet umfasst eine Sammlung von 14 Millionen Codebeispielen, die 4053 gängige Programmierprobleme lösen. Insgesamt enthält die Sammlung etwa 500 Millionen Codezeilen und deckt 55 Programmiersprachen ab, sowohl moderne Sprachen wie C++, Java, Python und Go als auch Legacy-Sprachen wie COBOL, Pascal und FORTRAN. Die Entwicklungen des Projekts werden unter der Apache 2.0-Lizenz vertrieben und die Datensätze sollen in Form einer öffentlichen Domain verbreitet werden.

Die Beispiele sind kommentiert und implementieren identische Algorithmen in verschiedenen Programmiersprachen. Es wird erwartet, dass das vorgeschlagene Set dazu beitragen wird, Systeme für maschinelles Lernen zu trainieren und Innovationen im Bereich der Übersetzung und Analyse von Maschinencode zu entwickeln, ähnlich wie die ImageNet-Datenbank für annotierte Bilder bei der Entwicklung von Mustererkennungs- und Computer-Vision-Systemen geholfen hat. Als eine der Hauptquellen der Sammlungsbildung werden verschiedene Programmierwettbewerbe genannt.

Im Gegensatz zu herkömmlichen Übersetzern, die auf der Grundlage von Übersetzungsregeln implementiert werden, können maschinelle Lernsysteme den Kontext der Codenutzung erfassen und berücksichtigen. Beim Konvertieren von einer Programmiersprache in eine andere ist der Kontext genauso wichtig wie beim Übersetzen von einer menschlichen Sprache in eine andere. Dieser Mangel an Kontextberücksichtigung verhindert die Konvertierung von Code aus älteren Sprachen wie COBOL.

Eine große Datenbank mit Algorithmusimplementierungen in verschiedenen Sprachen wird dazu beitragen, universelle Systeme für maschinelles Lernen zu schaffen, die anstelle einer direkten Übersetzung zwischen bestimmten Sprachen eine abstraktere Darstellung des Codes manipulieren, unabhängig von bestimmten Programmiersprachen. Ein solches System kann als Übersetzer verwendet werden und den übertragenen Code in einer der unterstützten Sprachen in seine interne abstrakte Darstellung übersetzen, aus der dann Code in mehreren Sprachen generiert werden kann.

Das System wird auch in der Lage sein, bidirektionale Transformationen durchzuführen. Beispielsweise nutzen Banken und Regierungsbehörden weiterhin Projekte in der veralteten COBOL-Sprache. Ein auf maschinellem Lernen basierender Übersetzer kann COBOL-Code in eine Java-Darstellung umwandeln und das Java-Fragment bei Bedarf wieder in COBOL-Code übersetzen.

Neben der Übersetzung zwischen Sprachen werden auch Anwendungsbereiche von CodeNet wie die Erstellung intelligenter Code-Suchsysteme und die Automatisierung der Klonerkennung sowie die Entwicklung von Optimierern und automatischen Code-Korrektursystemen erwähnt. Insbesondere sind die in CodeNet vorgestellten Beispiele mit Metadaten ausgestattet, die die Ergebnisse von Leistungstests, die resultierende Programmgröße, den Speicherverbrauch und den Status beschreiben, was es uns ermöglicht, richtigen Code von Code mit Fehlern zu unterscheiden (um richtigen Code von falschem Code zu unterscheiden). Die Sammlung umfasst insbesondere Beispiele mit Fehlern, deren Anteil 29.5 % beträgt. Ein maschinelles Lernsystem kann diese Metadaten berücksichtigen, um den optimalsten Code zu generieren oder Regressionen im analysierten Code zu identifizieren (das System kann verstehen, dass der Algorithmus im übermittelten Code nicht optimal implementiert ist oder Fehler enthält).

Source: opennet.ru

Kommentar hinzufügen