IBM odpre CodeNet za sisteme strojnega učenja, ki prevajajo in preverjajo kodo

IBM je predstavil svojo pobudo CodeNet, katere namen je raziskovalcem zagotoviti nabor podatkov, ki jim omogoča eksperimentiranje z uporabo tehnik strojnega učenja za ustvarjanje prevajalnikov programskih jezikov, generatorjev kode in analizatorjev. CodeNet vključuje zbirko 14 milijonov primerov kode, ki rešujejo 4053 običajnih programskih težav. Zbirka skupaj vsebuje približno 500 milijonov vrstic kode in pokriva 55 programskih jezikov, tako sodobne jezike, kot so C++, Java, Python in Go, kot podedovane jezike, vključno s COBOL, Pascal in FORTRAN. Razvoj projekta se distribuira pod licenco Apache 2.0, nabori podatkov pa so načrtovani za distribucijo v obliki javne domene.

Primeri so označeni in izvajajo enake algoritme v različnih programskih jezikih. Pričakuje se, da bo predlagani niz pomagal usposobiti sisteme za strojno učenje in razviti inovacije na področju prevajanja in razčlenjevanja strojne kode, podobno kot je baza podatkov z označenimi slikami ImageNet pomagala pri razvoju sistemov za prepoznavanje vzorcev in računalniškega vida. Kot enega glavnih virov oblikovanja zbirk se navajajo različna programerska tekmovanja.

Za razliko od tradicionalnih prevajalnikov, ki se izvajajo na podlagi pravil prevajanja, lahko sistemi strojnega učenja zajamejo in upoštevajo kontekst uporabe kode. Pri pretvorbi iz enega programskega jezika v drugega je kontekst prav tako pomemben kot pri prevajanju iz enega človeškega jezika v drugega. To pomanjkanje upoštevanja konteksta je tisto, kar preprečuje pretvorbo kode iz podedovanih jezikov, kot je COBOL.

Imeti veliko bazo podatkov o implementacijah algoritmov v različnih jezikih bo pomagalo ustvariti univerzalne sisteme strojnega učenja, ki namesto neposrednega prevajanja med določenimi jeziki manipulirajo z bolj abstraktno predstavitvijo kode, neodvisno od specifičnih programskih jezikov. Takšen sistem se lahko uporablja kot prevajalnik, ki prevaja preneseno kodo v katerem koli od podprtih jezikov v svojo notranjo abstraktno predstavitev, iz katere je nato mogoče generirati kodo v več jezikih.

Sistem bo lahko izvajal tudi dvosmerne transformacije. Na primer, banke in vladne agencije še naprej uporabljajo projekte v zastarelem jeziku COBOL. Prevajalnik, ki temelji na strojnem učenju, bo lahko pretvoril kodo COBOL v predstavitev Java in po potrebi prevedel fragment Java nazaj v kodo COBOL.

Poleg prevajanja med jeziki so omenjena področja uporabe CodeNeta, kot so ustvarjanje sistemov za pametno iskanje kode in avtomatizacija zaznavanja klonov, pa tudi razvoj optimizatorjev in sistemov za samodejno popravljanje kode. Zlasti primeri, predstavljeni v CodeNet, so opremljeni z metapodatki, ki opisujejo rezultate testiranja zmogljivosti, nastalo velikost programa, porabo pomnilnika in stanje, kar nam omogoča razlikovanje pravilne kode od kode z napakami (za razlikovanje pravilne kode od nepravilne kode, v zbirki so posebej zajeti primeri z napakami, katerih delež je 29.5 %). Sistem strojnega učenja lahko te metapodatke upošteva za generiranje najbolj optimalne kode ali za prepoznavanje regresij v analizirani kodi (sistem lahko razume, da algoritem v predloženi kodi ni optimalno implementiran ali vsebuje napake).

Vir: opennet.ru

Dodaj komentar