Gli ingegneri di Facebook pubblicano il transcompilatore , che utilizza metodi di apprendimento automatico per trasformare i testi sorgente da un linguaggio di programmazione di alto livello a un altro. Attualmente, è disponibile il supporto per la traduzione del codice tra i linguaggi Java, C++ e Python. Ad esempio, TransCoder consente di trasformare i testi sorgente Java in codice Python e viceversa. Gli sviluppi del progetto sono in fase di implementazione pratica. sulla creazione di una rete neurale per la transcompilazione automatica efficiente del codice e con licenza Creative Commons Attribuzione-Non commerciale 4.0, che consente solo l'uso non commerciale.
L'implementazione del sistema di apprendimento automatico si basa su Pytorch. Sono disponibili due modelli già pronti per il download: per tradurre C++ in Java, Java in C++ e Java in Python, e per la trasmissione
Da C++ a Python, da Python a C++ e da Python a Java. Per addestrare i modelli è stato utilizzato il codice sorgente dei progetti ospitati su GitHub. Se lo si desidera, è possibile creare modelli di traduzione per altri linguaggi di programmazione. Per verificare la qualità della traduzione, sono stati preparati una serie di test unitari e un set di test che include 852 funzioni parallele.
Si afferma che TransCoder sia significativamente più accurato dei traduttori commerciali che utilizzano metodi basati su regole e che sia in grado di lavorare senza la valutazione di esperti nelle lingue di partenza e di arrivo. La maggior parte degli errori che si verificano durante il funzionamento del modello può essere eliminata aggiungendo semplici vincoli al decoder per garantire che le funzioni generate siano sintatticamente corrette.
I ricercatori hanno proposto una nuova architettura di rete neurale chiamata "Transformer" per la modellazione delle sequenze, in cui la ricorrenza è sostituita da "» (modello seq2seq con attenzione), che consente di eliminare alcune dipendenze nel grafo computazionale e parallelizzare ciò che prima non era parallelizzabile. Viene utilizzato un unico modello generale per tutti i linguaggi supportati e per l'addestramento vengono utilizzati tre principi: inizializzazione, modellazione del linguaggio e traduzione inversa.
Fonte: opennet.ru
