Spoločnosť IBM predstavila iniciatívu CodeNet, zameranú na poskytovanie výskumníkom súboru údajov, ktorý im umožňuje experimentovať s využitím metód strojového učenia na vytváranie prekladačov z jedného programovacieho jazyka do druhého, ako aj generátorov a analyzátorov kódu. CodeNet obsahuje zbierku 14 miliónov príkladov kódu, ktoré vyriešili 4053 typických problémov programovania. Celkovo zbierka obsahuje približne 500 miliónov riadkov kódu a pokrýva 55 programovacích jazykov, vrátane moderných jazykov ako C++, Java, Python a Go, ale aj zastaraných, ako COBOL, Pascal a FORTRAN. Vývoj projektu sa šíri pod licenciou Apache 2.0 a údaje sa plánujú sprístupniť vo forme verejného majetku.
Príklady sú opatrené anotáciami a implementujú rovnaké algoritmy v rôznych programovacích jazykoch. Predpokladá sa, že navrhnutý súbor pomôže tréningu systémov strojového učenia a rozvoju inovácií v oblasti prekladu a strojového rozboru kódu, podobne ako databáza anotovaných obrázkov ImageNet pomohla rozvoju systémov rozpoznávania obrazov a strojového videnia. Ako jeden z hlavných zdrojov tvorby zbierky sa uvádzajú rôzne súťaže v programovaní.
Na rozdiel od tradičných prekladačov, ktoré sú implementované na základe pravidiel transformácie, systémy strojového učenia dokážu zachytiť a zohľadniť kontext používania kódu. Pri transformácii 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. Práve nedostatok zohľadnenia kontextu bráni transformácii kódu zo zastaraných jazykov, ako je COBOL.
Existencia veľkej databázy implementácií algoritmov v rôznych jazykoch pomôže pri vytváraní univerzálnych systémov strojového učenia, ktoré namiesto priameho prekladu medzi konkrétnymi jazykmi manipulujú s abstraktnejším zobrazením kódu, nezávislým od konkrétnych programovacích jazykov. Takýto systém môže byť použitý ako prekladač, ktorý prevádza zadaný kód na akýkoľvek z podporovaných jazykov do svojho vnútorného abstraktného zobrazenia, z ktorého môže byť následne vygenerovaný kód v mnohých jazykoch.
Systém bude schopný vykonávať obojsmerné konverzie. Napríklad v bankách a verejných inštitúciách sa naďalej využívajú projekty napísané vo zastaranom jazyku COBOL. Prekladač založený na systéme strojového učenia dokáže previesť kód v COBOL na jazyk Java a v prípade potreby previesť fragment v Jave späť do kódu v COBOL.
Okrem prekladu medzi jazykmi sa v CodeNet spomínajú aj oblasti použitia, ako je vytváranie inteligentných systémov na vyhľadávanie kódu a automatizáciu odhaľovania klonov, ako aj vývoj optimalizátorov a systémov automatickej korekcie kódu. Predovšetkým sú príklady uvedené v CodeNet vybavené metadátami, ktoré popisujú výsledky testovania výkonu, konečnú veľkosť programu, spotrebu pamäte a stav, ktorý umožňuje rozlíšiť správny kód od kódu s chybami (aby sa odlíšil správny kód od nesprávneho, do zbierky boli špeciálne zaradené príklady s chybami, ktorých podiel je 29,5 %). Systém strojového učenia môže brať do úvahy tieto metadáta na generovanie čo najoptimálnejšieho kódu alebo na zistenie regresií v analyzovanom kóde (systém môže pochopiť, že v prenesenom kóde je algoritmus realizovaný neoptimálne alebo obsahuje chyby).
Zdroj: opennet.ru
