CodeNet, un proyecto de IBM para sistemas de aprendizaje automático 

mayo 12, 2021 , 0 Comments

IBM logo

IBM dio a conocer recientemente su nuevo proyecto llamado «CodeNet» el cual tiene como objetivo proporcionar a los investigadores un conjunto de datos para experimentar con el uso de técnicas de aprendizaje automático para crear traductores de un lenguaje de programación a otro, así como generadores y analizadores de código.

CodeNet incluye una colección de 14 millones de ejemplos de código que resuelven 4053 problemas de programación comunes. En total, la colección contiene alrededor de 500 millones de líneas de código y cubre 55 lenguajes de programación, tanto lenguajes modernos como C++, Java, Python y Go, como heredados, incluidos COBOL, Pascal y FORTRAN.

«El software se está comiendo el mundo», escribió el famoso empresario estadounidense Marc Andreessen en 2011. Un avance rápido hasta el día de hoy: el software se encuentra en servicios financieros y atención médica, teléfonos inteligentes y hogares inteligentes. Incluso los automóviles ahora tienen más de 100 millones de líneas de código.

Los desarrollos del proyecto se distribuyen bajo la licencia Apache 2.0 y se prevé que los conjuntos de datos se distribuyan en forma de dominio público.

Los ejemplos están anotados e implementan algoritmos idénticos en diferentes lenguajes de programación. Se supone que el conjunto propuesto ayudará a entrenar sistemas de aprendizaje automático y desarrollar innovaciones en el campo de la traducción y el análisis automático de código, por analogía con la forma en que la base de datos ImageNet de imágenes anotadas ayudó al desarrollo de sistemas de reconocimiento de imágenes y visión artificial. Varios concursos de programación se mencionan como una de las principales fuentes de formación de colecciones.

Project CodeNet específicamente puede impulsar la innovación algorítmica para extraer este contexto con modelos secuencia a secuencia, al igual que lo que hemos aplicado en los lenguajes humanos, para hacer una mella más significativa en la comprensión de la máquina del código en lugar del procesamiento de la máquina del código.

A diferencia de los traductores tradicionales basados ​​en reglas de traducción, los sistemas de aprendizaje automático pueden capturar y tener en cuenta el contexto del uso del código. Al convertir de un lenguaje de programación a otro, el contexto es tan importante como al traducir de un lenguaje humano a otro. Es la falta de conciencia contextual lo que evita que el código se convierta de lenguajes heredados como COBOL.

La presencia de una gran base de implementaciones de algoritmos en varios lenguajes ayudará a crear sistemas universales de aprendizaje automático que, en lugar de traducción en vivo entre lenguajes específicos, manipulen una representación más abstracta del código, independiente de lenguajes de programación específicos.

Dicho sistema se puede utilizar como un traductor que traduce el código transmitido en cualquiera de los idiomas admitidos a su representación abstracta interna, a partir de la cual se puede generar código en muchos idiomas.

Incluyendo el sistema podrá realizar transformaciones bidireccionales. Por ejemplo, los bancos y las agencias gubernamentales continúan utilizando proyectos COBOL heredados. Un traductor de aprendizaje automático puede convertir el código COBOL a la representación de Java y, opcionalmente, traducir un fragmento de Java de nuevo al código COBOL.

Además de la traducción entre idiomas, se mencionan áreas de aplicación de CodeNet como la creación de sistemas de búsqueda de códigos inteligentes y la automatización de la detección de clones, así como el desarrollo de optimizadores y sistemas para la corrección automática de códigos.

En particular, los ejemplos presentados en CodeNet se proporcionan con metadatos que describen los resultados de las pruebas de rendimiento, el tamaño del programa resultante, el consumo de memoria y el estado que permite distinguir el código correcto del código con errores (para distinguir el código correcto del código incorrecto, ejemplos con errores se incluyen especialmente en la colección, cuya participación es del 29,5%).

Un sistema de aprendizaje automático puede tener en cuenta estos metadatos para generar el código más óptimo o para detectar regresiones en el código analizado (el sistema puede entender que el algoritmo no está implementado de manera óptima en el código transmitido o contiene errores).

Finalmente si estás interesado en conocer más al respecto sobre CodeNet, puedes consultar los detalles en el siguiente enlace.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.