IBM otvára CodeNet pre systémy strojového učenia, ktoré prekladajú a overujú kód

IBM predstavila svoju iniciatívu CodeNet, ktorej cieľom je poskytnúť výskumníkom súbor údajov, ktorý im umožní experimentovať s využitím techník strojového učenia na vytváranie prekladačov programovacích jazykov, generátorov kódu a analyzátorov. CodeNet obsahuje kolekciu 14 miliónov príkladov kódu, ktoré riešia 4053 500 bežných problémov s programovaním. Celkovo zbierka obsahuje asi 55 miliónov riadkov kódu a pokrýva 2.0 programovacích jazykov, moderné jazyky ako C++, Java, Python a Go, ako aj staršie jazyky vrátane COBOL, Pascal a FORTRAN. Vývoj projektu je distribuovaný pod licenciou Apache XNUMX a plánuje sa distribúcia súborov údajov vo forme verejnej domény.

Príklady sú anotované a implementujú identické algoritmy v rôznych programovacích jazykoch. Očakáva sa, že navrhovaná súprava pomôže trénovať systémy strojového učenia a rozvíjať inovácie v oblasti prekladu a analýzy strojového kódu, podobne ako anotovaná obrazová databáza ImageNet pomohla pri vývoji systémov rozpoznávania vzorov a počítačového videnia. Ako jeden z hlavných zdrojov tvorby kolekcií sa uvádzajú rôzne programátorské súťaže.

Na rozdiel od tradičných prekladačov, ktoré sú implementované na základe transformačných pravidiel, systémy strojového učenia dokážu zachytiť a zohľadniť kontext používania kódu. Pri prevode z jedného programovacieho jazyka do druhého je kontext rovnako dôležitý ako pri preklade z jedného ľudského jazyka do druhého. Tento nedostatok zohľadnenia kontextu bráni konverzii kódu zo starších jazykov, ako je COBOL.

Rozsiahla databáza implementácií algoritmov v rôznych jazykoch pomôže vytvoriť univerzálne systémy strojového učenia, ktoré namiesto priameho prekladu medzi konkrétnymi jazykmi manipulujú s abstraktnejšou reprezentáciou kódu, nezávisle od konkrétnych programovacích jazykov. Takýto systém môže byť použitý ako prekladač, ktorý prekladá prenášaný kód v ktoromkoľvek z podporovaných jazykov do jeho internej abstraktnej reprezentácie, z ktorej je potom možné generovať kód vo viacerých jazykoch.

Systém bude tiež schopný vykonávať obojsmerné transformácie. Napríklad banky a vládne agentúry naďalej používajú projekty v zastaranom jazyku COBOL. Prekladač založený na strojovom učení bude schopný previesť kód COBOL na reprezentáciu Java a v prípade potreby preložiť fragment Java späť do kódu COBOL.

Okrem prekladu medzi jazykmi sa spomínajú také oblasti použitia CodeNet, ako je vytváranie inteligentných systémov na vyhľadávanie kódu a automatizácia detekcie klonov, ako aj vývoj optimalizátorov a systémov automatickej korekcie kódu. Predovšetkým príklady prezentované v CodeNet sú vybavené metadátami popisujúcimi výsledky testovania výkonu, výslednú veľkosť programu, spotrebu pamäte a stav, čo nám umožňuje rozlíšiť správny kód od kódu s chybami (na odlíšenie správneho kódu od nesprávneho je napr. kolekcia konkrétne obsahuje príklady s chybami, ktorých podiel je 29.5 %). Systém strojového učenia môže vziať tieto metadáta do úvahy pri generovaní najoptimálnejšieho kódu alebo pri identifikácii regresií v analyzovanom kóde (systém dokáže pochopiť, že algoritmus v predloženom kóde nie je optimálne implementovaný alebo obsahuje chyby).

Zdroj: opennet.ru

Pridať komentár