Espere: IBM le enseñará a AI a escribir código y crear CodeNet

500 millones de líneas de código en más de 55 lenguajes de programación diferentes.



imagen



Porcentaje de envíos por idioma (izquierda) y estado (derecha).



  • El conjunto de datos contiene 13,916,868 vistas, divididas en 4053 tareas, cinco de las cuales no tienen vistas.
  • Google Code Jam 2008 2020 .
  • 53,6% (7 460 588) , 29,5% « », - .
  • 55 ; 95% C ++, Python, Java, C, Ruby C#.
  • C++ — 8 008 527 (57% ), 4 353 049.




"El software se come el mundo ", escribió el empresario estadounidense Mark Andreessen en 2011. Avance rápido hasta estos días: el software se utiliza en servicios financieros y atención médica, teléfonos inteligentes y hogares inteligentes. Incluso los coches de hoy contienen más de 100 millones de líneas de código.



Sin embargo, es difícil depurar, mantener y actualizar cantidades tan grandes de código, especialmente cuando las empresas buscan modernizar su infraestructura de software heredada. Como resultado, estamos en una nueva era en la que es importante aprovechar las tecnologías modernas como la inteligencia artificial y la nube híbrida para crear nuevas soluciones que puedan modernizar los procesos en el pipeline de tecnología de la información.



Ir al proyecto CodeNet... Un gran conjunto de datos dedicado a la enseñanza de la programación de inteligencia artificial, consta de aproximadamente 14 millones de ejemplos de código y aproximadamente 500 millones de líneas de código en más de 55 lenguajes de programación diferentes, desde los modernos como C ++, Java, Python y Go hasta los lenguajes heredados. como COBOL, Pascal y Fortran.



Pero para comprender el significado de este conjunto de datos, primero debemos mirar hacia atrás en el tiempo.



La próxima frontera de la IA: el lenguaje de las máquinas



Los científicos de la computación han estado interesados ​​durante mucho tiempo en la posibilidad de que una computadora programe computadoras. ¿Puede la IA facilitar la comprensión, el desarrollo y la implementación del código, el lenguaje de las máquinas? Es posible, pero no es fácil lograrlo.



El problema está en los sistemas basados ​​en reglas.



Tomemos una traducción a un lenguaje de programación. Si fuera fácil, los sistemas basados ​​en reglas funcionarían y los primeros lenguajes de programación como COBOL ya se habrían transformado. Pero los lenguajes de programación tienen un contexto. El significado de cualquier declaración está contextualizado, y obtenerlo y traducirlo, como ocurre con los lenguajes humanos, es difícil y requiere mucho tiempo.



Cuanto más grande sea el programa, más difícil será traducirlo. En el lenguaje humano, el contexto puede limitarse a un párrafo más o menos, aquí el contexto puede referirse a múltiples bibliotecas de código. El contexto es un desafío para la IA.



En términos generales, los sistemas basados ​​en reglas pueden traducir con éxito del 50 al 60 por ciento de un programa. Parte del programa se puede traducir bastante bien, el resto normalmente tiene que traducirse a mano utilizando reglas complejas.



Desarrollo de IA para código



Aquí es donde la IA puede ayudar porque puede actuar como humanos.



El proyecto CodeNet, en particular, puede estimular la innovación algorítmica para extraer este contexto utilizando modelos secuenciales, tal como lo usamos en los lenguajes humanos para brindar mayor claridad a la comprensión del código por máquina, así como al procesamiento de código por máquina.



Project CodeNet es único por sus ejemplos de código seleccionados en concursos de programación abierta a lo largo de los años. Es único no solo en tamaño y escala, sino también en la calidad de los metadatos y anotaciones con un rico conjunto de información, ya sea tamaño de código, tamaño de memoria, tiempo de CPU o estado que indica aceptación o tipos de errores.



Más del 90 por ciento de los problemas están asociados con una descripción adecuada del problema, que contiene una breve descripción del problema, la especificación del formato de entrada y salida. Para más de la mitad de los problemas de programación (es decir, siete millones de muestras de código), también seleccionamos muestras de entrada y salida de la descripción del problema, que es la clave para determinar la equivalencia de dos muestras de código en diferentes lenguajes, lo que puede estimular el refuerzo métodos de aprendizaje para traducir código.



Los proporcionamos como parte del conjunto de datos, una función práctica de Project CodeNet. Los usuarios pueden ejecutar las muestras de código alojado para extraer metadatos adicionales y validar la salida de modelos de IA generativos. Esto permitirá a los investigadores programar la equivalencia de intención al traducir un lenguaje de programación a otro.



Los ricos metadatos y la variedad de ejemplos de código y los problemas que resuelven abren Project CodeNet a una multitud de casos de uso. El conjunto de datos se puede utilizar para buscar código y encontrar copias. Los ejemplos de código en Project CodeNet están marcados con un estado de aceptación, y podemos explorar técnicas de inteligencia artificial para distinguir el código correcto del código del problema.



Los metadatos de Project CodeNet también le permiten realizar un seguimiento de la evolución de una vista de problema a una vista aceptada, que se puede utilizar para aprender sobre la corrección automática de código. Cada muestra de código está etiquetada con el tiempo de ejecución de la CPU y el tamaño de la memoria, lo que es útil para estudios de regresión y predicciones.



Dada la abundancia de programas escritos en muchos idiomas, creemos que Project CodeNet puede servir como un conjunto de datos de referencia para la traducción de una fuente a otra y hacer para la IA y codificar lo que el conjunto de datos ImageNet hizo para la visión por computadora hace muchos años.



Actualizar y mantener la infraestructura de software también es importante desde una perspectiva empresarial. Hablamos de esto el año pasado cuando IBM anunció varios nuevas capacidades , que incluyen IBM WatsonAIOps y Accelerator para modernizar aplicaciones que automatizan la canalización de tecnología de la información.



Por ejemplo, un gran cliente automotriz le pidió a IBM que lo ayudara a actualizar un activo de $ 200 millones de 3.500 archivos Java de múltiples generaciones. Estos archivos constaban de más de un millón de líneas de código desarrolladas durante diez años utilizando tecnología Java multigeneracional.



Era un código de aplicación complejo y monolítico que no era adecuado para entornos de nube. Al aplicar nuestra pila de inteligencia artificial al código, redujimos nuestro proceso empresarial de migración de código de un año a cuatro semanas, modernizamos y creamos más de 25 nuevos microservicios en la nube mediante la refactorización del código de aplicación monolítico heredado.



Nuestro equipo se enorgullece de proporcionar a los investigadores y desarrolladores un conjunto de datos y un conjunto de tecnologías que son fáciles de usar y comprender, a la vez que ayudan a diseñar algoritmos que impulsarán la IA para el código. Esperamos que Project CodeNet proporcione valor comercial a medida que las empresas se embarcan en su viaje de TI.



Abra Project CodeNet en GitHub y lea preimpresión .



imagen



Tenía cuerdas, pero ahora soy libre. No hay ataduras en mi



All Articles