2min

Facebook zegt een AI-systeem te hebben ontwikkeld dat code van ‘high-level’ programmeertalen zou kunnen omzetten naar een andere programmeertaal. Het systeem draagt de naam TransCoder en zou kunnen vertalen tussen Java, Python en C++.

Het omzetten van de ene programmeertaal naar de andere is een arbeidsintensieve en vaak kostbare onderneming. Het vereist kennis van zowel de brontaal als de doeltaal en er moet rekening gehouden worden met de variërende syntax, variabelen , functies en libraries van de twee talen. TransCoder zou het proces vergemakkelijken.

Transcoder is ontworpen om zichzelf te trainen. Het systeem krijgt een voortraining, waarbij stukken code die dezelfde instructies representeren worden gekoppeld aan identieke representaties ongeacht programmeertaal. Een auto-encoding proces traint het systeem om valide sequenties te genereren, zelfs wanneer de input-data veel ruis bevat. Back-translation wordt gebruikt om parallelle data te genereren, die geschikt is om mee te trainen. Back-translation is bedoeld om de kwaliteit van vertalingen te verbeteren door een source-to-target model te koppelen aan een achterwaarts target-to-source model. Het target-to-source model wordt gebruikt om de sequenties in de doeltaal te vertalen naar de brontaal, waarbij ruis ontstaat. Het source-to-target model helpt bij het reconstrueren van de doel-sequentie vanuit de bron met ruis. Uiteindelijk hoort back-translation ervoor te zorgen dat beide modellen overeenkomen.

Facebook TransCoder

Facebook onderzoekers hebben TransCoder getraind op een publieke GitHub corpus met meer dan 2,8 miljoen open source archieven, waarbij vertalen op functieniveau werd getarget. Om de prestaties van het systeem te evalueren hebben de onderzoekers 852 parallelle functies in C++, Java en Python van het GeeksforGeeks platform genomen en getest of het systeem met dezelfde outputs kwam als het referentiemateriaal.

Hoge mate van nauwkeurigheid

Volgens Facebook zou TransCoder een hoge mate van computationele nauwkeurigheid hebben, hoewel het systeem niet veel exact identieke functies genereerde vergeleken met het referentiemateriaal. Dit zou komen door de zogenaamde beam zoekfunctionaliteit, waarbij sequenties gedeeltelijk gedecodeerd blijven en worden samengevoegd tot nieuwe sequenties om vervolgens gescoord te worden, zodat de beste sequenties bovenaan komen. Zo zou TransCoder bij het vertalen van C++ naar java 74,8 procent van de resultaten overeenkomen met wat er verwacht werd en zou dat bij vertalingen van C++ naar Python 67,2 procent zijn.

Makkelijk te generaliseren

Het systeem zou het volgens de onderzoekers beter doen dan andere frameworks die gebouwd zijn op basis van kennis van experts en handmatig regels in de code herschrijven. Het systeem zou makkelijk te generaliseren zijn naar andere programmeertalen en zou geen kennis van experts nodig hebben. De onderzoekers geven aan dat veel van de fouten gemaakt door het systeem verholpen kunnen worden door simpele beperkingen in te stellen of door dedicated architecturen te gebruiken.