Esta IA podría traernos computadoras que puedan escribir su propio software
Cuando OpenAI publicó por primera vez un documento sobre su nueva generación de lenguaje AI, GPT-3, el interés tardó en desarrollarse. El documento indicaba que GPT-3, el modelo de IA de lenguaje natural más grande hasta la fecha, estaba avanzado, pero solo tenía unos pocos ejemplos escritos de su salida. Luego, OpenAI dio acceso selecto a una versión beta de GPT-3 para ver qué harían los desarrolladores con él, y todos quedaron impresionados.
Desarrolladores jugando con GPT-3 han llevado a Twitter ejemplos de sus capacidades: historias cortas, comunicados de prensa, artículos sobre sí mismo, un motor de búsqueda. Quizás lo más sorprendente fue el descubrimiento de que GPT-3 puede escribir código de computadora simple. Cuando el desarrollador web, Sharif Shameem, lo modificó para escupir HTML en lugar de lenguaje natural, el programa generó código para diseños de página web a partir de mensajes como «un botón que parece una sandía».
«Solía decir que la investigación de IA parecía tener un punto ciego extraño hacia la automatización del trabajo de programación, y sospechaba un sesgo de autoconservación subconsciente». tuiteó John Carmack, legendario desarrollador de juegos de computadora y consultor CTO en Oculus VR. «El reciente descubrimiento, casi accidental, de que GPT-3 puede escribir un tipo de código genera un ligero escalofrío».
Si bien el descubrimiento de las habilidades de codificación de GPT-3 puede haber sido algo fortuito, de hecho, hay todo un campo dedicado al desarrollo de algoritmos de aprendizaje automático que pueden codificar. La investigación ha avanzado y un nuevo algoritmo recientemente dio otro paso.
El algoritmo, llamado similitud de código inferido por máquina (MISIM), es una creación de investigadores de Intel, el Instituto de Tecnología de Georgia, la Universidad de Pennsylvania y el MIT. Capacitado en la gran cantidad de código que ya está disponible públicamente en la web, MISIM puede descubrir qué se supone que debe hacer un programa. Luego, después de encontrar otros programas similares y compararlos con ellos, MISIM puede ofrecer formas de hacer que el programa sea más rápido o más eficiente.
No es el primer algoritmo de aprendizaje automático que hace recomendaciones o compara similitudes, pero según los investigadores en un nuevo papel de preimpresión en MISIM, fue hasta 40 veces más preciso en la tarea cuando se enfrentó a varios de sus competidores más avanzados.
A corto plazo, la IA podría ser un compañero útil para los programadores de hoy. Más allá, el campo podría abrir la programación a cualquiera que pueda describir lo que quiere crear en el lenguaje cotidiano o traer máquinas que escriban y mantengan su propio código.
El sueño de la programación de máquinas
La búsqueda de computadoras que pueden codificar es casi tan antiguo como la informática moderna. Si bien ha habido avances en la automatización de la programación, la reciente explosión en el aprendizaje automático está acelerando el progreso en un campo llamado programación automática.
En un Documento sobre el campo 2018, un grupo de investigadores de Intel y MIT escribió: «El objetivo general de la programación de máquinas es eliminar la carga de escribir código correcto y eficiente de un programador humano y, en su lugar, colocarlo en una máquina».
Los investigadores están buscando sistemas que puedan automatizar los pasos necesarios para transformar la intención de una persona, es decir, lo que quieren que haga una pieza de software, en un programa de trabajo. También tienen como objetivo automatizar el mantenimiento del software a lo largo del tiempo, como, por ejemplo, encontrar y corregir errores, mantener programas compatibles o actualizar el código para mantenerse al día con las actualizaciones de hardware.
Eso es más fácil decirlo que hacerlo, por supuesto. Escribir software es tanto arte como ciencia. Se necesita mucha experiencia y creatividad para traducir la intención humana al lenguaje de las máquinas.
Pero como muestra GPT-3, el lenguaje es en realidad una habilidad que el aprendizaje automático está dominando rápidamente, y los lenguajes de programación no son tan diferentes del inglés, chino o swahili. Es por eso que GPT-3 adquiere algunas habilidades de codificación como subproducto de su entrenamiento en lenguaje natural es notable.
Si bien los avances algorítmicos en el aprendizaje automático, como GPT-3, son clave para el éxito de la programación de máquinas, serían inútiles sin buenos datos de entrenamiento. Afortunadamente, hay una gran cantidad de código disponible públicamente en sitios como GitHub—Completar con historiales de revisión y notas— y fragmentos de código y hilos de comentarios en sitios como Desbordamiento de pila. Incluso Internet en general, con páginas web y códigos accesibles, es una fuente abundante de material de aprendizaje para que la IA se trague.
En teoría, al igual que GPT-3 ingiere millones de artículos de ejemplo para aprender a escribir, las IA de programación de máquinas podrían consumir millones de programas y aprender a codificar. Pero cómo hacer que esto funcione en la práctica es una pregunta abierta. Que es donde entra MISIM.
Un compañero robot para escribir código
MISIM avanza la programación de la máquina un paso al poder identificar con precisión lo que se supone que debe hacer un fragmento de código. Una vez que clasifica el código, lo compara con millones de otros fragmentos en su base de datos, muestra los que son más similares y sugiere mejoras al fragmento de código basado en esos otros ejemplos.
Debido a que MISIM clasifica el propósito del código a un alto nivel, puede encontrar fragmentos de código que hacen lo mismo pero están escritos de manera diferente (hay más de una forma de resolver el mismo problema) e incluso fragmentos en otros lenguajes de programación. Simplificando, esto es un poco como si alguien leyera un artículo neoyorquino, identificara su tema y luego encontrara todos los demás artículos sobre ese tema, ya sea que estén en Der Spiegel o Xinhua.
Otro beneficio de trabajar en ese nivel superior de clasificación es que el programa no necesita compilar el código. Es decir, no tiene que traducirlo al código de máquina que ejecuta la computadora. Dado que MISIM no requiere un compilador, puede analizar fragmentos de código a medida que se escriben y ofrecer fragmentos de código similares que podrían ser más rápidos o más eficientes. Es un poco como una función de autocompletado de correo electrónico que termina sus oraciones.
Intel planea ofrecer MISIM a los desarrolladores internos solo para este propósito. La esperanza es que resultará útil, haciendo que el proceso de escritura de código sea más rápido, más fácil y más efectivo. Pero hay potencialmente más que puede hacer. Traducción entre lenguajes de computadora, por ejemplo, también podría ser una aplicación valiosa. Quizás podría ayudar a los programadores a actualizar el software gubernamental escrito en idiomas arcaicos a algo más moderno.
Pero Justin Gottschlich, director de programación de máquinas de Intel, tiene una visión aún mayor: la democratización total de la codificación.
Combine MISIM (o algo así) con IA de lenguaje natural, y los futuros programadores podrían simplemente escribir lo que quieren que haga una pieza de software, y la computadora crea el código. Eso abriría la programación a cualquiera con un dominio decente de su idioma nativo y un deseo de hacer algo genial.
Como Gottschlich dijo MIT Technology Review, «Me gustaría ver a 8 mil millones de personas crear software de la forma más natural para ellos».