Společnost IBM představila iniciativu CodeNet, zaměřenou na poskytnutí výzkumníkům souboru dat, která umožňují experimentovat s použitím metod strojového učení k vytváření překladačů z jednoho programovacího jazyka do druhého, stejně jako generátorů a analyzátorů kódu. CodeNet zahrnuje sbírku 14 milionů příkladů kódu, které řeší 4053 typických programátorských problémů. Celkem sbírka obsahuje přibližně 500 milionů řádků kódu a pokrývá 55 programovacích jazyků, včetně moderních jazyků, jako jsou C++, Java, Python a Go, i zastaralých, včetně COBOL, Pascal a FORTRAN. Výsledky projektu jsou uvolňovány pod licencí Apache 2.0 a datové soubory se plánují uvolnit jako veřejné vlastnictví.
Příklady jsou opatřeny anotacemi a realizují identické algoritmy v různých programovacích jazycích. Předpokládá se, že navržený soubor pomůže při trénování systémů strojového učení a rozvoji inovací v oblasti překladů a strojového rozboru kódu, podobně jako databáze anotovaných obrázků ImageNet pomohla rozvoji systémů rozpoznávání obrazů a strojového vidění. Jako jeden z hlavních zdrojů pro vytváření sbírky jsou uvedeny různé programátorské soutěže.
Na rozdíl od tradičních překladačů, postavených na pravidlech transformace, mohou systémy strojového učení zachytit a zohlednit kontext použití kódu. Při převodu z jednoho programovacího jazyka do druhého je kontext neméně důležitý než při překladu z jednoho lidského jazyka do druhého. Právě nedostatek zohlednění kontextu brání převodu kódu ze zastaralých jazyků, jako je COBOL.
Přítomnost velké databáze realizací algoritmů v různých jazycích pomůže při vytváření univerzálních systémů strojového učení, které místo přímého překladání mezi konkrétními jazyky manipulují s abstraktnějším vyjádřením kódu, nezávislým na konkrétních programovacích jazycích. Takový systém může sloužit jako překladač, který převádí zaslaný kód do svého vnitřního abstraktního vyjádření, ze kterého může být poté vygenerován kód ve více jazycích.
Systém bude schopen provádět obousměrné převody. Například banky a vládní instituce stále používají projekty v zastaralém jazyce COBOL. Převodník založený na systému strojového učení bude schopen převést kód v COBOL do podoby v jazyce Java, a v případě potřeby převést fragment v Java zpět do kódu v COBOL.
Kromě překladů mezi jazyky se zmiňují také oblasti použití CodeNet, jako je vytváření chytrých systémů pro vyhledávání kódu a automatizace detekce klonů, jakož i vývoj optimalizátorů a systémů pro automatickou opravu kódu. Zejména příklady uvedené v CodeNet jsou vybaveny metadaty, která popisují výsledky testování výkonu, velikost programu po dokončení, spotřebu paměti a stav, který umožňuje odlišit správný kód od kódu s chybami (aby bylo možné odlišit správný kód od nesprávného, byly do sbírky speciálně zařazeny příklady s chybami, jejichž podíl činí 29,5 %). Systém strojového učení může tato metadata zohledňovat k vygenerování nejoptimálnějšího kódu nebo k odhalení regresí v analyzovaném kódu (systém může pochopit, že je v předaném kódu algoritmus realizován suboptimálně nebo obsahuje chyby).
Zdroj: opennet.ru
