IBM hat CodeNet für maschinelles Lernen geöffnet, um Code zu übertragen und zu überprüfen.

Das Unternehmen IBM hat die Initiative CodeNet vorgestellt, die darauf abzielt, Forschern Datensätze zur Verfügung zu stellen, mit denen sie experimentieren können, um Methoden des maschinellen Lernens zur Erstellung von Übersetzern von einer Programmiersprache in eine andere sowie von Code-Generatoren und -Analyzern zu entwickeln. CodeNet umfasst eine Sammlung von 14 Millionen Beispielcode, die 4053 gängige Programmierprobleme lösen. Insgesamt umfasst die Sammlung etwa 500 Millionen Codezeilen und deckt 55 Programmiersprachen ab, sowohl moderne Sprachen wie C++, Java, Python und Go als auch veraltete Sprachen wie COBOL, Pascal und FORTRAN. Die Ergebnisse des Projekts werden unter der Apache 2.0 Lizenz veröffentlicht, und die Datensätze sollen als gemeinfreies Material zur Verfügung gestellt werden.

Die Beispiele sind mit Anmerkungen versehen und implementieren identische Algorithmen in verschiedenen Programmiersprachen. Es wird angenommen, dass der vorgeschlagene Datensatz die Ausbildung von Systemen des maschinellen Lernens und die Entwicklung von Innovationen im Bereich der Übersetzung und der maschinellen Analyse von Code unterstützen wird, ähnlich wie die Datenbank annotierter Bilder ImageNet die Entwicklung von Systemen zur Bilderkennung und zum maschinellen Sehen gefördert hat. Als eine der Hauptquellen für die Bildung der Sammlung werden verschiedene Programmierwettbewerbe genannt.

Im Gegensatz zu traditionellen Übersetzern, die auf Transformationsregeln basieren, können Systeme des maschinellen Lernens den Kontext der Codeverwendung erfassen und berücksichtigen. Bei der Umwandlung von einer Programmiersprache in eine andere ist der Kontext ebenso wichtig wie bei der Übersetzung von einer menschlichen Sprache in eine andere. Genau das Fehlen einer Kontextberücksichtigung erschwert die Umwandlung von Code aus veralteten Sprachen wie COBOL.

Das Vorhandensein einer großen Datenbasis von Implementierungen von Algorithmen in verschiedenen Sprachen wird zur Schaffung universal einsetzbarer Systeme des maschinellen Lernens beitragen, die anstelle einer direkten Übersetzung zwischen spezifischen Sprachen mit einer abstrakteren Darstellung des Codes arbeiten, die unabhängig von bestimmten Programmiersprachen ist. Ein solches System kann als Übersetzer dienen, der den übergebenen Code in eine seiner internen abstrakten Darstellungen umwandelt, aus der anschließend Code in einer Vielzahl von Sprachen generiert werden kann.

Das System wird in der Lage sein, bidirektionale Umwandlungen durchzuführen. Zum Beispiel werden in Banken und öffentlichen Einrichtungen weiterhin Projekte in der veralteten Programmiersprache COBOL verwendet. Ein auf einem maschinellen Lernsystem basierender Übersetzer kann den COBOL-Code in Java-Code umwandeln und bei Bedarf Java-Code wieder zurück in COBOL-Code übersetzen.

Neben der Übersetzung zwischen Programmiersprachen werden auch Anwendungsbereiche von CodeNet erwähnt, wie die Erstellung intelligenter Codesuchsysteme und die Automatisierung der Erkennung von Klonen sowie die Entwicklung von Optimierern und automatischen Codekorrektursystemen. Insbesondere sind die in CodeNet vorgestellten Beispiele mit Metadaten versehen, die Testergebnisse zur Leistung, die resultierende Programmgröße, den Speicherverbrauch und den Status beschreiben, der es ermöglicht, korrekten Code von fehlerhaftem Code zu unterscheiden (um korrekten von fehlerhaften Code zu unterscheiden, wurden absichtlich Beispiele mit Fehlern in die Sammlung aufgenommen, deren Anteil 29,5 % beträgt). Das maschinelle Lernsystem kann diese Metadaten berücksichtigen, um den optimalsten Code zu generieren oder Regressionen im analysierten Code zu identifizieren (das System kann erkennen, dass der übergebene Code nicht optimal implementiert ist oder Fehler enthält).

Quelle: opennet.ru

60GB SSD 8Gb DDR4