Facebook anunció TransCoder, herramienta que “traduce” código de un lenguaje de programación a otro

Imagen por techlapse

Facebook anunció TransCoder, herramienta que “traduce” código de un lenguaje de programación a otro

Facebook AI Research anunció un sistema de aprendizaje profundo sin supervisión que convierte código de un lenguaje de programación a otro llamado TransCoder.


Este sistema ha recibido capacitación para más de 2.8 millones de proyectos de código y supera a otros sistemas que utilizan métodos basados en reglas.

TransCoder se inspiró en otros sistemas de traducción automática neuronal (NMT), que utilizan este método para traducir texto de un idioma a otro y está capacitado solo para datos de fuentes monolingües.

Facebook compara el rendimiento del modelo recompilando validaciones de 852 funciones y pruebas unitarias asociadas en cada idioma de destino del sistema: Java, Python y C++.

A comparación de los otros sistemas, TransCoder se desempeña mejor en las validaciones que las demás soluciones comerciales existentes: en comparación con j2py, que es un traductor de java a Python, son hasta 33 puntos porcentuales.

Facebook anunció TransCoder, herramienta que “traduce” código de un lenguaje de programación a otro

Imagen por Blog Facialix

Aunque se ha restringido a solo estos 3 idiomas, se afirma que puede extenderse a la mayoría de los lenguajes de programación.

Es importante aclarar que estas herramientas automatizadas, también conocidas como compiladores de origen a origen, transcompiladores o transpiladores, que traducen el código fuente de un idioma a otro, existen desde 1970.

Algunas de estas herramientas funcionan de manera similar a un compilador de código estándar: analizan el código fuente en un árbol de sintaxis abstracta (AST).

El AST es de nuevo un código fuente en un idioma diferente aplicado a reglas de reescritura.

Estos tipos de sistemas son útiles para convertir de un lenguaje más amigable para el desarrollador a uno más compatible.
Son útiles también para transpilar bases de códigos completas de lenguaje de origen que ya están obsoletos o en desuso, un ejemplo es la herramienta 2to3 que se utiliza para transportar código Python desde la versión 2 a la 3.

TransCoder está basado en los avances del procesamiento de lenguaje natural (PNL), en particular NMT sin supervisión, este modelo utiliza la arquitectura de secuencia a secuencia basada en transformador, que consiste en codificar y decodificar basado en la atención.

Obtener conjunto de datos para el aprendizaje supervisado, sería difícil, por lo tanto, el equipo prefirió utilizar conjuntos de datos monolingües para realizar el aprendizaje sin supervisión, donde se utilizan tres estrategias:

La primera es que el modelo se entrena en secuencias de entrada con enmascarados tokens aleatorios; este debe aprender a predecir los valores correctos para los tokens enmascarados.

Después, la segunda estrategia es que el modelo entrena en secuencias que han sido corrompidas enmascarando, barajando o eliminando fichas al azar, este modelo tiene que aprender a generar la secuencia ya corregida.

Y, por último, dos versiones del modelo se entrenan en paralelo para hacer la traducción inversa, donde un modelo aprende a traducir de la fuente al idioma de destino y el otro traduce de nuevo a la fuente.

Facebook anunció TransCoder, herramienta que “traduce” código de un lenguaje de programación a otro

Imagen por Blog Facialix

Para probar los modelos, se seleccionan mas de 2.8 millones de repositorios de código abierto de GitHub, donde seleccionaron archivos con los lenguajes Java, Python y C++.

Muchos sistemas de PNL usan el BLEU donde evalúan sus resultados de traducción, los investigadores señalan que esa métrica puede ser una mala opción para evaluar los transpiladores: los resultados que son sintácticamente similares pueden tener un puntaje BLEU alto, pero “pueden conducir a resultados de compilación y cálculo diferentes”, mientras que programas con diferentes implementaciones que producen los mismos resultados pueden tener una puntuación baja de BLEU.

Por lo que se eligió evaluar los resultados de su transpilador utilizando un conjunto de pruebas unitarias. Estas se obtuvieron del sitio GeeksforGeeks al recopilar problemas que contenían soluciones escritas en los tres idiomas de destino; Esto dio como resultado un conjunto de 852 funciones.

También se comparó el rendimiento de TransCoder en este conjunto de prueba con otras dos soluciones existentes: j2py Java a Python y Tangible Software Solutions C ++ – convertidor a Java. TransCoder superó a ambos, con un puntaje de 74.8% y 68.7% en C ++ – a Java y Java a Python respectivamente, en comparación con 61% y 38.3% para soluciones comerciales.

En el documento de TransCoder, el equipo de investigación de AI de Facebook señaló que tienen la intención de lanzar el código y los modelos entrenados, pero no lo han hecho en este momento.


FUENTE: La Nación