Firma IBM zaprezentowała inicjatywę CodeNet, mającą na celu dostarczenie badaczom zbioru danych umożliwiającego eksperymentowanie z zastosowaniem metod uczenia maszynowego do tworzenia translatorów z jednego języka programowania na inny, a także generatorów i analizatorów kodu. CodeNet obejmuje zbiór 14 milionów przykładów kodu, rozwiązujących 4053 typowe problemy programistyczne. Łącznie zbiór liczy około 500 milionów linii kodu i obejmuje 55 języków programowania, zarówno nowoczesnych, takich jak C++, Java, Python i Go, jak i przestarzałych, w tym COBOL, Pascal i FORTRAN. Materiały projektu są udostępniane na podstawie licencji Apache 2.0, a zbiory danych mają być udostępniane jako publiczna własność.
Przykłady są opatrzone adnotacjami i wdrażają identyczne algorytmy w różnych językach programowania. Przewiduje się, że proponowany zbiór pomoże w treningu systemów uczenia maszynowego i rozwoju innowacji w dziedzinie tłumaczenia i analizy kodu, analogicznie do tego, jak baza danych adnotowanych obrazów ImageNet przyczyniła się do rozwoju systemów rozpoznawania obrazów i widzenia maszynowego. Jako jedno z głównych źródeł tworzenia kolekcji wymienia się różnorodne konkursy programistyczne.
W przeciwieństwie do tradycyjnych translatorów opartych na regułach przekształcania, systemy uczenia maszynowego mogą uchwytywać i uwzględniać kontekst użycia kodu. Przy przekształceniu z jednego języka programowania na inny kontekst jest równie istotny, co przy tłumaczeniu z jednego języka ludzkiego na inny. To właśnie brak uwzględnienia kontekstu utrudnia konwersję kodu z przestarzałych języków, takich jak COBOL.
Duża baza implementacji algorytmów w różnych językach pomoże w tworzeniu uniwersalnych systemów uczenia maszynowego, które zamiast bezpośredniej translacji między konkretnymi językami manipulują bardziej abstrakcyjną reprezentacją kodu, niezależną od konkretnych języków programowania. Taki system może być używany jako tłumacz, przekształcający przesłany kod na dowolnym z obsługiwanych języków do swojego wewnętrznego abstrakcyjnego przedstawienia, z którego następnie można wygenerować kod w wielu językach.
System będzie również w stanie przeprowadzać dwukierunkowe konwersje. Na przykład w bankach i instytucjach rządowych wciąż używane są projekty w przestarzałym języku COBOL. Tłumacz oparty na systemie uczenia maszynowego będzie mógł przekształcić kod w COBOL w reprezentację w języku Java, a w razie potrzeby przetłumaczyć fragment kodu w Java z powrotem na kod COBOL.
Oprócz translacji między językami, w CodeNet wymieniane są obszary zastosowań, takie jak tworzenie inteligentnych systemów wyszukiwania kodu oraz automatyzacja wykrywania klonów, a także opracowywanie optymalizatorów i systemów automatycznej korekty kodu. W szczególności przedstawione w CodeNet przykłady są opatrzone metadanymi, które opisują wyniki testów wydajności, rozmiar programu, zużycie pamięci oraz stan pozwalający odróżnić poprawny kod od kodu z błędami (w celu rozróżnienia poprawnego kodu od błędnego do zbioru specjalnie dołączono przykłady błędów, których udział wynosi 29,5%). System uczenia maszynowego może uwzględniać te metadane w celu generowania najbardziej optymalnego kodu lub wykrywania regresji w analizowanym kodzie (system może zrozumieć, że w przesłanym kodzie algorytm został zaimplementowany nieoptymalnie lub zawiera błędy).
Źródło: opennet.ru
