Facebook utvecklar TransCoder för att översätta kod från ett programmeringsspråk till ett annat

Facebooks ingenjörer har publicerat en transkompilator TransCoder, som använder maskininlärningstekniker för att omvandla källkod från ett högnivåprogrammeringsspråk till ett annat. För närvarande tillhandahålls stöd för att översätta kod mellan Java, C++ och Python. Till exempel låter TransCoder dig konvertera Java-källkod till Python-kod och Python-kod till Java-källkod. Projektutvecklingen omsätts i praktiken teoretisk forskning på att skapa ett neuralt nätverk för effektiv automatisk transkompilering av kod och sprida licensierad under en Creative Commons Attribution-NonCommercial 4.0-licens endast för icke-kommersiellt bruk.

Implementeringen av maskininlärningssystemet är baserat på Pytorch. Två färdiga modeller erbjuds för nedladdning: först för att översätta C++ till Java, Java till C++ och Java till Python, och andra för sändning
C++ till Python, Python till C++ och Python till Java. För att träna modellerna använde vi källkoderna för projekt som lagts upp på GitHub. Om så önskas kan översättningsmodeller skapas för andra programmeringsspråk. För att kontrollera kvaliteten på sändningen har en samling enhetstester tagits fram, samt en testsvit som innehåller 852 parallella funktioner.

Det hävdas att när det gäller konverteringsnoggrannhet är TransCoder avsevärt överlägsen kommersiella översättare som använder metoder baserade på konverteringsregler, och under arbetets gång låter det dig klara dig utan expertbedömning av experter på käll- och målspråk. De flesta av de fel som uppstår under driften av modellen kan elimineras genom att lägga till enkla begränsningar till avkodaren för att säkerställa att de genererade funktionerna är syntaktiskt korrekta.

Facebook utvecklar TransCoder för att översätta kod från ett programmeringsspråk till ett annat

Forskare har föreslagit en ny neural nätverksarkitektur "Transformer" för modellering av sekvenser, där återkommande ersätts med "uppmärksamhet"(seq2seq-modell med uppmärksamhet), som låter dig bli av med vissa beroenden i beräkningsgrafen och parallellisera det som tidigare inte var mottagligt för parallellisering. Alla språk som stöds använder en enda gemensam modell, som tränas med hjälp av tre principer – initiering, språkmodellering och bakåtöversättning.

Facebook utvecklar TransCoder för att översätta kod från ett programmeringsspråk till ett annat

Källa: opennet.ru

Lägg en kommentar