TransCoder AI de Facebook convierte el código de un lenguaje de programación a otro

Los investigadores de Facebook dicen que han desarrollado lo que llaman un transcompilador neuronal, un sistema que convierte el código de un lenguaje de programación de alto nivel como C ++, Java y Python en otro.

No está supervisado, lo que significa que busca patrones previamente no detectados en conjuntos de datos sin etiquetas y con una cantidad mínima de supervisión humana, y supuestamente supera a las líneas de base basadas en reglas por un margen “significativo”.

La migración de una base de código existente a un lenguaje moderno o más eficiente como Java o C ++ requiere experiencia tanto en el idioma de origen como en el de destino, y a menudo es costoso.

Por ejemplo, el Commonwealth Bank of Australia gastó alrededor de $ 750 millones en el transcurso de cinco años para convertir su plataforma de COBOL a Java.

Los transcompiladores podrían ayudar en teoría, ya que eliminan la necesidad de reescribir el código desde cero, pero son difíciles de construir en la práctica porque diferentes lenguajes pueden tener una sintaxis diferente y depender de API de plataforma distintivas, funciones de biblioteca estándar y tipos variables.

El sistema de Facebook, TransCoder, que puede traducir entre C ++, Java y Python, aborda el desafío con un enfoque de aprendizaje no supervisado.

TransCoder se inicializa por primera vez con el preentrenamiento de modelos de lenguaje cruzado, que asigna piezas de código que expresan las mismas instrucciones a representaciones idénticas independientemente del lenguaje de programación.

(Las secuencias de entrada de secuencias de código fuente se enmascaran aleatoriamente y TransCoder tiene la tarea de predecir las partes enmascaradas en función del contexto).

Un proceso llamado auto-codificación de eliminación de ruido entrena al sistema para generar secuencias válidas incluso cuando se alimenta con datos de entrada ruidosos, y la traducción inversa permite a TransCoder generar datos paralelos que se pueden utilizar para la capacitación.

La naturaleza multilingüe de TransCoder surge de la cantidad de tokens comunes (puntos de anclaje) que existen en los lenguajes de programación, que provienen de palabras clave comunes como “for”, “while”, “if” e “try” y también dígitos matemáticos operadores y cadenas en inglés que aparecen en el código fuente.

La traducción inversa sirve para mejorar la calidad de la traducción del sistema al acoplar un modelo de origen a destino con un modelo de destino a origen “hacia atrás” entrenado en paralelo.

El modelo de destino a fuente se utiliza para traducir secuencias de destino al lenguaje fuente, produciendo secuencias de fuente ruidosas, mientras que el modelo de fuente a destino ayuda a reconstruir las secuencias de destino de las fuentes ruidosas hasta que los dos modelos converjan.

Los investigadores de Facebook capacitaron a TransCoder en un corpus público de GitHub que contenía más de 2.8 millones de repositorios de código abierto, dirigidos a la traducción en el nivel funcional.

(En la programación, las funciones son bloques de código reutilizable que se utilizan para realizar una acción única y relacionada).

Después de entrenar previamente a TransCoder en todo el código fuente disponible, los componentes de auto-codificación y retro traducción fueron entrenados únicamente en funciones, alternando entre componentes con lotes de alrededor de 6,000 tokens.

Para evaluar el rendimiento de TransCoder, los investigadores extrajeron 852 funciones paralelas en C ++, Java y Python de GeeksforGeeks, una plataforma en línea que reúne problemas de codificación y presenta soluciones en varios lenguajes de programación.

Utilizando estos, desarrollaron una nueva métrica (precisión computacional) que prueba si las funciones de hipótesis generan las mismas salidas como referencia cuando se les dan las mismas entradas.

Facebook señala que, si bien la versión con mejor rendimiento de TransCoder no generó muchas funciones estrictamente idénticas a las referencias, sus traducciones tuvieron una alta precisión computacional.

Atribuyen esto a la incorporación de la búsqueda de haces, un método que mantiene un conjunto de secuencias parcialmente decodificadas que se agregan para formar secuencias y luego se puntúan para que las mejores secuencias salgan a la superficie:

  • Al traducir de C ++ a Java, el 74.8% de las generaciones de TransCoder devolvieron los resultados esperados.
  • Al traducir de C ++ a Python, el 67.2% de las generaciones de TransCoder devolvieron los resultados esperados.
  • Al traducir de Java a C ++, el 91.6% de las generaciones de TransCoder devolvieron los resultados esperados.
  • Al traducir de Python a Java, el 56.1% de las generaciones de TransCoder devolvieron los resultados esperados.
  • Al traducir de Python a C ++, el 57.8% de las generaciones de TransCoder devolvió los resultados esperados.
  • Al traducir de Java a Python, el 68.7% de las generaciones de TransCoder devolvieron los resultados esperados.

Según los investigadores, TransCoder demostró una comprensión de la sintaxis específica de cada idioma, así como las estructuras de datos de los idiomas y sus métodos durante los experimentos, y alineó correctamente las bibliotecas entre los lenguajes de programación mientras se adaptaba a pequeñas modificaciones (como cuando una variable en la entrada fue renombrada).

Y aunque no fue perfecto, por ejemplo, TransCoder no tuvo en cuenta ciertos tipos de variables durante la generación, superó los marcos que reescriben las reglas creadas manualmente utilizando el conocimiento experto.

“TransCoder se puede generalizar fácilmente a cualquier lenguaje de programación, no requiere ningún conocimiento experto y supera a las soluciones comerciales por un amplio margen”, escribieron los coautores.

“Nuestros resultados sugieren que muchos errores cometidos por el modelo podrían repararse fácilmente agregando restricciones simples al decodificador para garantizar que las funciones generadas sean sintácticamente correctas, o mediante el uso de arquitecturas dedicadas”.

Facebook no es la única organización que desarrolla sistemas de IA que generan código.

Durante la conferencia Build de Microsoft a principios de este año, OpenAI demostró un modelo entrenado en repositorios de GitHub que utiliza comentarios en inglés para generar funciones completas.

Y hace dos años, los investigadores de la Universidad de Rice crearon un sistema, Bayou, que puede escribir sus propios programas de software al asociar “intenciones” detrás del código disponible públicamente.

“[Programas como estos] realmente solo intentan eliminar las minucias de crear software”, dijo el científico principal y director de Intel Labs, Justin Gottschlich, a VentureBeat en una entrevista reciente.

“[Ellos] podrían ayudar a acelerar la productividad … [al encargarse de] los errores. [Y podrían] aumentar el número de trabajos [en tecnología] porque las personas que no tienen experiencia en programación podrán tomar su intuición creativa y capturar eso a través de la máquina mediante estas interfaces de intencionalidad”.

Fuente y foto: https://venturebeat.com/2020/06/08/facebooks-transcoder-ai-converts-code-from-one-programming-language-into-another/