Momentan handelt es sich bei CodeNet vor allem um einen gigantischen Datensatz, der aus rund 14 Millionen Codebeispielen und 500 Millionen Codezeilen in über 55 verschiedenen Programmiersprachen besteht. Die Palette der Sprachen reicht von C++, Java, Python und Go bis hin zu alten Sprachen wie COBOL, Pascal und FORTRAN.
IBM arbeitet an einer KI, die Softwarecode verstehen, entwickeln und sinnvoll einsetzen kann. Unter anderem geht es darum, die riesigen Bestände an Legacy-Programmen automatisiert in eine modernere Sprache übertragen zu können. Das größte Problem dabei besteht den Forschern zufolge darin, dass Programmiersprachen genauso wie herkömmliche Sprachen immer in einem Kontext stehen. Die Bedeutung jedes Befehls hängt damit zusammen, und die Ableitung und Übersetzung ist - genau wie bei menschlichen Sprachen - knifflig und zeitaufwändig.
Der Kontext ist die Herausforderung
Je größer ein Programm ist, desto schwieriger lässt es sich automatisiert übersetzen. Während in der menschlichen Sprache der Kontext manchmal schon auf einen Textabsatz begrenzt ist, bezieht er sich bei Anwendungen mitunter auf ganze Codebibliotheken. Der Kontext, so heißt es bei IBM, sei die große Herausforderung für die KI.
Den Wissenschaftlern zufolge können regelbasierte Systeme - grob gesagt - etwa 50 bis 60 Prozent eines Programms erfolgreich übersetzen. Der Rest muss typischerweise manuell angepasst werden, was eine komplexe Aufgabe ist. Hier könne KI helfen. Das Projekt CodeNet zielt darauf ab, den Kontext der Anwendungen mit Sequenz-zu-Sequenz-Modellen zu extrahieren, um Code maschinell verstehen zu können. CodeNet nutzt dazu Codebeispielen, die über Jahre hinweg aus offenen Programmierwettbewerben kuratiert wurden.
Ein ImageNet für Computer
Ruchir Puri, IBM-Fellow und Chief Scientist bei IBM Research, zieht auf der Anwenderkonferenz Think 2021 die Parallele zur ImageNet-Datenbank, aus der Forscher in aller Welt Bilddaten für das Trainieren von KI-Algorithmen ziehen. "CodeNet ist im Wesentlichen das ImageNet für Computer. Es ist ein umfangreicher Datensatz, der entwickelt wurde, um KI- und Machine-Learning-Systemen beizubringen, wie man Code übersetzt." Der Datensatz sei so aufgebaut, dass er eine bidirektionale Übersetzung ermögliche. Man könne eine Cobol-Code in Java übertragen und umgekehrt.
CodeNet soll auch für die Codesuche und das Aufspüren von Klonen genutzt werden. Da jedes Codebeispiel in der Datenbank mit seiner CPU-Laufzeit und seinem Speicherbedarf gekennzeichnet ist, können Forscher damit auch Regressionsstudien vornehmen und gegebenenfalls sogar Code-Korrektursysteme entwickeln.