IBM otvara CodeNet za sisteme mašinskog učenja koji prevode i verificiraju kod

IBM je predstavio svoju CodeNet inicijativu, koja ima za cilj da istraživačima pruži skup podataka koji im omogućava da eksperimentišu sa upotrebom tehnika mašinskog učenja za kreiranje prevodilaca programskih jezika, generatora koda i analizatora. CodeNet uključuje kolekciju od 14 miliona primjera koda koji rješavaju 4053 uobičajena programska problema. Ukupno, kolekcija sadrži oko 500 miliona linija koda i pokriva 55 programskih jezika, kako modernih jezika kao što su C++, Java, Python i Go, tako i naslijeđenih jezika uključujući COBOL, Pascal i FORTRAN. Razvoj projekta se distribuira pod licencom Apache 2.0, a planirano je da se skupovi podataka distribuiraju u obliku javnog domena.

Primjeri su označeni i implementiraju identične algoritme u različitim programskim jezicima. Očekuje se da će predloženi set pomoći u obučavanju sistema mašinskog učenja i razvoju inovacija u oblasti prevođenja i raščlanjivanja mašinskog koda, slično kao što je ImageNet baza podataka slika pomogla u razvoju sistema za prepoznavanje obrazaca i kompjuterskog vida. Kao jedan od glavnih izvora formiranja zbirke navode se različita takmičenja u programiranju.

Za razliku od tradicionalnih prevodilaca, koji se implementiraju na osnovu pravila prevođenja, sistemi mašinskog učenja mogu uhvatiti i uzeti u obzir kontekst upotrebe koda. Prilikom pretvaranja iz jednog programskog jezika u drugi, kontekst je jednako važan kao i kod prevođenja s jednog ljudskog jezika na drugi. Ovaj nedostatak razmatranja konteksta je ono što sprečava konvertovanje koda iz naslijeđenih jezika kao što je COBOL.

Posjedovanje velike baze podataka implementacija algoritama na različitim jezicima pomoći će u stvaranju univerzalnih sistema strojnog učenja koji, umjesto direktnog prijevoda između određenih jezika, manipuliraju apstraktnijim prikazom koda, neovisno o specifičnim programskim jezicima. Takav sistem se može koristiti kao prevodilac, prevodeći preneseni kod na bilo kojem od podržanih jezika u njegovu internu apstraktnu reprezentaciju, iz koje se potom može generirati kod na više jezika.

Sistem će takođe biti u stanju da izvodi dvosmerne transformacije. Na primjer, banke i vladine agencije nastavljaju koristiti projekte na zastarjelom jeziku COBOL. Prevodilac zasnovan na mašinskom učenju će moći da konvertuje COBOL kod u Java reprezentaciju i, ako je potrebno, prevede Java fragment nazad u COBOL kod.

Pored prevođenja između jezika, pominju se područja primjene CodeNet-a kao što su kreiranje pametnih sistema pretraživanja koda i automatizacija detekcije klonova, kao i razvoj optimizatora i sistema za automatsku korekciju koda. Konkretno, primjeri predstavljeni u CodeNet-u opremljeni su metapodacima koji opisuju rezultate testiranja performansi, rezultujuću veličinu programa, potrošnju memorije i stanje, što nam omogućava da razlikujemo ispravan kod od koda s greškama (da bismo razlikovali ispravan kod od netočnog koda, zbirka posebno uključuje primjere sa greškama, čiji je udio 29.5%). Sistem mašinskog učenja može uzeti u obzir ove metapodatke da generiše najoptimalniji kod ili da identifikuje regresije u analiziranom kodu (sistem može razumeti da algoritam u dostavljenom kodu nije optimalno implementiran ili sadrži greške).

izvor: opennet.ru

Dodajte komentar