IBM otwiera CodeNet dla systemów uczenia maszynowego, które tłumaczą i weryfikują kod

IBM zaprezentował inicjatywę CodeNet, której celem jest udostępnienie badaczom zbioru danych umożliwiającego eksperymentowanie z wykorzystaniem technik uczenia maszynowego do tworzenia tłumaczy języków programowania, generatorów i analizatorów kodu. CodeNet zawiera zbiór 14 milionów przykładów kodu, które rozwiązują 4053 typowe problemy programistyczne. W sumie kolekcja zawiera około 500 milionów linii kodu i obejmuje 55 języków programowania, zarówno współczesne języki, takie jak C++, Java, Python i Go, jak i starsze języki, w tym COBOL, Pascal i FORTRAN. Opracowania projektu są rozpowszechniane na licencji Apache 2.0, a zbiory danych mają być rozpowszechniane w domenie publicznej.

Przykłady są opatrzone adnotacjami i implementują identyczne algorytmy w różnych językach programowania. Oczekuje się, że proponowany zestaw pomoże w szkoleniu systemów uczenia maszynowego i opracowaniu innowacji w dziedzinie translacji i parsowania kodu maszynowego, podobnie jak baza obrazów z adnotacjami ImageNet pomogła w rozwoju systemów rozpoznawania wzorców i komputerowego widzenia. Jako jedno z głównych źródeł tworzenia kolekcji wymieniane są różne konkursy programistyczne.

W przeciwieństwie do tradycyjnych tłumaczy, które wdrażane są w oparciu o reguły tłumaczeniowe, systemy uczenia maszynowego potrafią przechwytywać i uwzględniać kontekst użycia kodu. Podczas konwersji z jednego języka programowania na inny kontekst jest tak samo ważny, jak podczas tłumaczenia z jednego języka ludzkiego na inny. Ten brak uwzględnienia kontekstu uniemożliwia konwersję kodu ze starszych języków, takich jak COBOL.

Posiadanie dużej bazy implementacji algorytmów w różnych językach pomoże stworzyć uniwersalne systemy uczenia maszynowego, które zamiast bezpośredniego tłumaczenia pomiędzy konkretnymi językami manipulują bardziej abstrakcyjną reprezentacją kodu, niezależną od konkretnych języków programowania. Taki system może pełnić funkcję tłumacza, tłumacząc przesłany kod w dowolnym z obsługiwanych języków na jego wewnętrzną abstrakcyjną reprezentację, z której następnie można wygenerować kod w wielu językach.

System będzie mógł także wykonywać przekształcenia dwukierunkowe. Na przykład banki i agencje rządowe w dalszym ciągu korzystają z projektów w przestarzałym języku COBOL. Tłumacz oparty na uczeniu maszynowym będzie w stanie przekonwertować kod COBOL na reprezentację Java i, jeśli to konieczne, przetłumaczyć fragment Java z powrotem na kod COBOL.

Oprócz tłumaczeń między językami wymienia się takie obszary zastosowań CodeNet jak tworzenie inteligentnych systemów wyszukiwania kodów i automatyzację wykrywania klonów, a także rozwój optymalizatorów i systemów automatycznej korekcji kodu. W szczególności przykłady prezentowane w CodeNet są wyposażone w metadane opisujące wyniki testów wydajnościowych, wynikowy rozmiar programu, zużycie pamięci i stan, co pozwala nam odróżnić poprawny kod od kodu z błędami (aby odróżnić poprawny kod od nieprawidłowego kodu, zbiór zawiera szczególnie przykłady z błędami, których udział wynosi 29.5%). System uczenia maszynowego może uwzględnić te metadane w celu wygenerowania najbardziej optymalnego kodu lub zidentyfikowania regresji w analizowanym kodzie (system może zrozumieć, że algorytm w przesłanym kodzie nie jest optymalnie zaimplementowany lub zawiera błędy).

Źródło: opennet.ru

Dodaj komentarz