Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Usare il deep learning per tradurre il codice in altri linguaggi

Il team di ricerca di Facebook AI ha sviluppato un algoritmo di deep learning per tradurre il codice sorgente da un linguaggio ad un altro.
Usare il deep learning per tradurre il codice in altri linguaggi
Il team di ricerca di Facebook AI ha sviluppato un algoritmo di deep learning per tradurre il codice sorgente da un linguaggio ad un altro.
Link copiato negli appunti

Non tutti i programmatori hanno avuto la necessità di dover effettuare la traduzione di un codice scritto in un certo linguaggio di programmazione X, in un altro linguaggio Y. Ed in effetti, questo tipo di necessità è oggi spesso bypassata incapsulando il codice "legacy" all'interno di moduli che espongono poi API per l'accesso ai servizi specifici da esso offerti. È un tipico esempio di architettura a microservizi (microservices), ed è spesso utile soprattutto in applicazioni web che non richiedono livelli di efficienza particolarmente elevati.

Tuttavia, non sempre ci si può affidare a questo tipo di approccio. In alcuni contesti, può essere infatti necessario ottenere un nuovo codice sorgente che di fatto consista nella "traduzione" di un codice scritto in un altro linguaggio. Un tipico esempio potrebbe essere quello di COBOL, recentemente salito in cima alle tendenze dei principali social network per via delle numerose richieste e la scarsa disponibilità di programmatori skillati. Un linguaggio molto obsoleto comporta, infatti, la difficoltà nel reperire l'adeguato personale che sia in grado di manutenere opportunamente i sorgenti.

TransCoder: tradurre il codice C++, Java e Python

In questo contesto nasce e si sviluppa un interessante progetto portato avanti da Facebook AI, che prende il nome di TransCoder. Si tratta di un sofisticato algoritmo di machine learning che è in grado di automatizzare il processo di traduzione da un linguaggio ad un altro. Più in particolare, l'attuale implementazione (che si basa su quanto pubblicato su un articolo scientifico molto tecnico, disponibile su Arxiv) supporta la traduzione tra i linguaggi C++, Java e Python 3.

In base alle stime effettuate dal team di ricerca, l'accuratezza di TransCoder dipende dai linguaggi di programmazione considerati. Ad esempio, la traduzione da Java a C++ è effettuata correttamente nel 90% dei casi, mentre tale percentuale scende a circa il 75% quando si vuole effettuare la traduzione inversa. Le performance si riducono ulteriormente a poco meno del 69% considerando la traduzione da Java a Python (cosa non molto strana, se si pensa alla grande differenza tra questi due linguaggi, soprattutto se messa a confronto con le similitudini tra Java e C++).

Chi pensa che tali percentuali possano non sembrare particolarmente elevate, si stupirà di scoprire che gli altri metodi attualmente disponibili sul mercato non superano il 61%, mentre la migliore implementazione open source arriva appena al 38%.

Esempio di traduzione da Python a C++ realizzata mediante TransCoder (click per ingrandire)Esempio di traduzione da Python a C++ realizzata mediante TransCoder

Come funziona TransCoder

Una delle caratteristiche più interessanti dell'algoritmo alla base di TransCoder consiste nella modalità di apprendimento che esso sfrutta.

Gli algoritmi di machine learning più tradizionali si basano infatti su un processo detto di apprendimento supervisionato (supervised learning), in cui i parametri del modello vengono definiti sulla base di un insieme di addestramento che include, per ogni elemento, sia l'input che l'ouput atteso. Utilizzare un algoritmo di apprendimento supervisionato nel contesto per cui è stato pensato TransCoder, significherebbe dover avere a disposizione una enorme quantità di snippet di codice scritto nei due linguaggi di input ed output. Sebbene esistono diversi dataset per i linguaggi di programmazione più comuni, ve ne sono molti di meno per altri linguaggi (come COBOL). Ciò nonostante, sono proprio i linguaggi legacy meno diffusi quelli a poter beneficiare in modo più significativo delle capacità di TransCoder.

Per risolvere questo problema, il team di Facebook AI ha pensato di realizzare un software basato su un approccio "self-supervised". In altre parole, TransCoder richiede la conoscenza di un solo linguaggio di programmazione (quello di partenza), e sfrutta una procedura di classificazione automatica per "creare" una sorta di insieme di addestramento intermedio, utilizzato poi per l'apprendimento tramite deep learning.

Questo approccio innovativo, se generalizzato ad altri contesti, potrebbe rivelarsi presto particolarmente proficuo anche per applicazioni completamente diverse.

Conclusioni

In questa sede non ci addentreremo maggiormente nei dettagli di TransCoder (che sono comunque ampiamente descritti in questo articolo). È però evidente come questo sia l'ennesimo esempio concreto della potenza del deep learning, e di quanto essa appaia tuttora parzialmente inespressa, con nuove idee di estrema potenza che vengono rilasciate con una cadenza quasi giornaliera.

Ti consigliamo anche