IBM esitles algatust CodeNet, mille eesmärk on pakkuda teadlastele andmekogumit, mis võimaldab katsetada masinõppe meetodite rakendamist ühe programmeerimiskeele tõlkijate ja koodigeneraatorite ning -analüsaatorite loomiseks. CodeNet sisaldab kollektsiooni 14 miljonist koodinäitest, mis lahendavad 4053 tüüpilist programmeerimisprobleemi. Kokku sisaldab kollektsioon umbes 500 miljonit koodirea ja katab 55 programmeerimiskeelt, sealhulgas kaasaegsed keeled nagu C++, Java, Python ja Go, samuti vanemad, sealhulgas COBOL, Pascal ja FORTRAN. Projekti tulemused jaotatakse Apache 2.0 litsentsi alusel ning andmekogusid plaanitakse jagada avaliku omandi vormis.
Näited on varustatud annotatsioonidega ja rakendavad identsed algoritmid erinevates programmeerimiskeeltes. Eeldatakse, et pakutav kogum aitab kaasa masinõppimise süsteemide treenimisele ja innovatsiooni arengule tõlke ja masina analüüsi valdkonnas, sarnaselt sellega, kuidas annotatsioonidega piltide andmebaas ImageNet aitas kaasa mustrite ja masinaka nägemise süsteemide arengule. Ühe peamise allikana kollektsiooni loomisel nimetatakse erinevaid programmeerimise võistlusi.
Erinevalt traditsioonilistest tõlkijatest, mis on loodud reeglite põhjal, suudavad masinõppe süsteemid tabada ja arvesse võtta koodi kasutamise konteksti. Tõlkides ühelt programmeerimiskeelt teisele, on kontekst sama oluline kui tõlkides ühest inimkeelest teise. Just konteksti arvestamise puudumine takistab koodi tõlgendamist vanematelt keeltest, nagu COBOL.
Suure algoritmide rakenduste baas erinevates keeltes aitab luua universaalseid masinõppe süsteeme, mis tõlgivad mitte otse konkreetsete keelte vahel, vaid manipuleerivad koodist sõltumatule abstraktsele esitlusele. Sellist süsteemi võib kasutada tõlkijana, mis tõlgib edastatud koodi mõnes toetatud keeles oma sisemisse abstraktsesse esitlusse, kust seejärel saab genereerida koodi mitmesugustes keeltes.
Süsteem suudab teostada kahepoolsed ümberkorraldused. Näiteks kasutavad pangad ja riigiasutused endiselt vananenud COBOL-i projekte. Masinõppel põhinev tõlkija suudab teisendada COBOL-i koodi Java keelde ja vajadusel eksportida Java fragmenti tagasi COBOL-koodiks.
Lisaks tõlkele keelte vahel mainitakse CodeNet-i rakendusalasid, nagu nutikate koodotsingusüsteemide loomine ja kloonide tuvastamise automatiseerimine, samuti optimeerijate ja automaatsete koodikorrektiivide arendamine. Eriti on CodeNet-i esitlusele kaasatud näidised, millel on metainfo, mis kirjeldab jõudlustestide tulemusi, lõpp-programmi suurust, mälu kasutust ja seisundit, mis võimaldab eristada korrektset koodi vigasest (eristamiseks on kogusse spetsiaalselt kaasatud vigadega näited, mille osakaal on 29,5%). Masinõppesüsteem võib neid metaandmeid arvesse võtta, et genereerida kõige optimaalsemat koodi või tuvastada regressioone analüüsitavas koodis (süsteem võib mõista, et edastatud koodis on algoritm alateadlikult implementeeritud või sisaldab vigu).
Allikas: opennet.ru
