IBM představeno nedávno jeho nový projekt s názvem "CodeNet" který si klade za cíl poskytnout vědcům soubor dat, který bude experimentovat s použitím technik strojového učení vytvářet překladače z jednoho programovacího jazyka do druhého, stejně jako generátory a analyzátory kódu.
CodeNet obsahuje kolekci 14 milionů ukázek kódu které řeší 4053 běžných programovacích problémů. Celkově kolekce obsahuje přibližně 500 milionů řádků kódu a pokrývá 55 programovacích jazyků, a to jak moderních jazyků, jako jsou C ++, Java, Python a Go, tak i starších jazyků, včetně COBOL, Pascal a FORTRAN.
„Software žere svět,“ napsal slavný americký podnikatel Marc Andreessen v roce 2011. Rychle vpřed do dnešního dne: software se nachází ve finančních službách a zdravotnictví, smartphonech a inteligentních domácnostech. Dokonce i auta mají nyní více než 100 milionů řádků kódu.
Vývoj projektu je vydáván pod licencí Apache 2.0 a očekává se, že datové sady budou zveřejněny ve veřejné doméně.
Příklady jsou anotovány a implementují identické algoritmy v různých programovacích jazycích. Navrhovaná sada má pomoci trénovat systémy strojového učení a rozvíjet inovace v oblasti automatického překladu a analýzy kódu, analogicky se způsobem, jakým databáze ImageNet s anotovanými obrázky pomáhala při vývoji systémů rozpoznávání obrazu a umělého vidění. Jako jeden z hlavních zdrojů budování sbírky jsou zmiňovány různé programovací soutěže.
Project CodeNet může konkrétně řídit algoritmické inovace k extrakci tohoto kontextu s modely sekvence po sekvenci, stejně jako to, co jsme aplikovali v lidských jazycích, aby významněji narušily strojové porozumění kódu než zpracování kódu. .
Na rozdíl od tradičních překladatelů založených na pravidlech překladu systémy strojového učení mohou zachytit a vzít v úvahu kontext použití kódu. Při převodu z jednoho programovacího jazyka do druhého je kontext stejně důležitý jako při překladu z jednoho lidského jazyka do druhého. Je to nedostatek kontextového povědomí, který brání převodu kódu ze starších jazyků, jako je COBOL.
Přítomnost velké základny implementací algoritmů v různých jazycích pomůže vytvořit univerzální systémy strojového učení, které místo živého překladu mezi konkrétními jazyky manipulují s abstraktnější reprezentací kódu, nezávisle na konkrétních programovacích jazycích.
Takový systém lze použít jako překladač, který převádí přenášený kód v kterémkoli z podporovaných jazyků do své interní abstraktní reprezentace, ze které lze generovat kód v mnoha jazycích.
Včetně systému můžete provádět obousměrné transformace. Například banky a vládní agentury nadále používají zastaralé projekty COBOL. Překladač strojového učení může převést kód COBOL na reprezentaci Java a volitelně přeložit úryvek Java zpět do kódu COBOL.
Kromě překladu mezi jazyky jsou zmíněny aplikační oblasti CodeNet jako je vytvoření inteligentních systémů pro vyhledávání kódu a automatizace detekce klonů, jakož i vývoj optimalizátorů a systémů pro automatickou korekci kódu.
Zejména Příklady uvedené v CodeNet jsou poskytovány s metadaty popisujícími výsledky testů výkonu, velikost výsledného programu, spotřeba paměti a stav, který umožňuje odlišit správný kód od kódu s chybami (pro rozlišení správného kódu od nesprávného kódu jsou do kolekce speciálně zahrnuty příklady s chybami, jejichž podíl je 29,5, XNUMX%).
Systém strojového učení může tato metadata vzít v úvahu ke generování nejoptimálnějšího kódu nebo k detekci regresí v analyzovaném kódu (systém může pochopit, že algoritmus není v přenášeném kódu optimálně implementován nebo obsahuje chyby).
Konečně Pokud máte zájem dozvědět se více o CodeNet, můžete zkontrolovat podrobnosti Na následujícím odkazu.