Tvrtka IBM predstavila je inicijativu CodeNet, usmjerenu na pružanje istraživačima skupa podataka koji omogućuju eksperimentiranje s primjenom metoda strojno učenja za stvaranje prevoditelja između različitih programskih jezika, kao i generatora i analizatora koda. CodeNet uključuje kolekciju od 14 milijuna primjera koda koji rješavaju 4053 tipične probleme programiranja. U cjelini, kolekcija broji oko 500 milijuna linija koda i pokriva 55 programskih jezika, kako moderne jezike poput C++, Java, Python i Go, tako i zastarjele, uključujući COBOL, Pascal i FORTRAN. Radovi projekta distribuiraju se pod Apache 2.0 licencom, a planira se da će se skupovi podataka distribuirati u obliku javnog vlasništva.
Primjeri su opskrbljeni anotacijama i implementiraju identične algoritme na različitim programskim jezicima. Pretpostavlja se da će predloženi skup pomoći u obuci sustava strojnog učenja i razvoju inovacija u području prevođenja i strojnog razlaganja koda, slično tome kako je baza anotiranih slika ImageNet pomogla razvoju sustava prepoznavanja obrazaca i strojnog vida. Kao jedan od glavnih izvora za formiranje kolekcije navode se razna natjecanja u programiranju.
Za razliku od tradicionalnih prevoditelja, implementiranih na osnovi pravila preoblikovanja, sustavi strojnog učenja mogu uhvatiti i uzeti u obzir kontekst korištenja koda. Pri prevođenju iz jednog programskog jezika u drugi, kontekst je podjednako važan kao i pri prevođenju iz jednog ljudskog jezika na drugi. Upravo neuzimanje u obzir konteksta ometa prevođenje koda sa zastarjelih jezika, poput COBOL-a.
Prisutnost velike baze implementacija algoritama na različitim jezicima pomoći će u stvaranju univerzalnih sustava strojnog učenja, koji umjesto izravnog prevođenja između konkretnih jezika, manipuliraju apstraktnijim prikazom koda, neovisnim o konkretnim programskim jezicima. Takav sustav može se koristiti kao prevoditelj, koji prepravlja proslijeđeni kod na bilo kojem od podržanih jezika u svoje interno apstraktno predstavljanje, iz kojeg se zatim može generirati kod na više jezika.
Sustav će moći izvoditi dvosmjerne pretvorbe. Na primjer, banke i državne institucije i dalje koriste projekte napisane na zastarjelom jeziku COBOL. Prevoditelj temeljen na sustavu strojnog učenja moći će pretvoriti kod napisan na COBOL-u u Java prikaz, a po potrebi prevesti Java dio nazad u COBOL kod.
Osim prijenosa između jezika, CodeNet spominje i primjene kao što su izrada pametnih sustava za pretraživanje koda i automatizirano otkrivanje klonova, kao i razvoj optimizatora i sustava za automatsku ispravku koda. Konkretno, primjeri predstavljeni u CodeNet-u opremljeni su metapodacima koji opisuju rezultate testiranja performansi, veličinu rezultantnog programa, potrošnju memorije i stanje koje omogućuje razlikovanje ispravnog koda od koda s greškama (kako bi se razlikovao ispravan od neispravnog, u zbirku su posebno uključeni primjeri s greškama, čiji udio iznosi 29.5%). Sustav strojnog učenja može uzeti u obzir ove metapodatke za generiranje najoptimalnijeg koda ili za otkrivanje regresija u analiziranom kodu (sustav može razumjeti da je algoritam u dostavljenom kodu implementiran suboptimalno ili sadrži greške).
Izvor: opennet.ru
