El proceso de programar no es tarea sencilla, pues requiere conocimientos en varias áreas distintas, además del dominio de un lenguaje específico, algoritmos y lógica formal. El léxico tiende a asemejarse al natural, aunque con la diferencia de que busca ante todo reducir la ambigüedad, lo que lo hace mucho más complejo.
Ahora, investigadores de Ciencias de la Computación y el Laboratorio de Inteligencia Artificial del Instituto Tecnológico de Massachusetts (MIT) en Estados Unidos, aseguran haber encontrado una fórmula para programar sin necesidad de conocer esos códigos especializados, utilizando en su lugar un lenguaje más cercano al que utilizamos habitualmente –de momento, en inglés-.
Este avance sería de gran ayuda no sólo para los programadores, pues permitiría además el acceso generalizado a archivos comunes, como documentos de procesamiento de texto y hojas de cálculo, que hasta ahora requerían cierta familiaridad con los lenguajes de programación.
La profesora de Ciencias de la Computación e Ingeniería Eléctrica del MIT Regina Barzilay, señala en un comunicado de la universidad, no creer “que seamos capaces de aplicarlo a toda la programación, pero hay áreas con muchos ejemplos de cómo se han hecho traducciones”. Por tanto, no duda en asegurar que “si la información está disponible, cualquiera puede aprender a traducir ese lenguaje a código”.
Barzilay es coautora de los dos estudios presentados por el MIT. Por una parte, junto a su alumno Nate Kushman, utilizaron ejemplos recopilados de Internet para entrenar un sistema informático capaz de convertir descripciones en lengua natural en las conocidas como expresiones regulares: combinaciones de símbolos que facilitan la búsqueda de archivos por encima de las funciones de un motor de búsqueda tradicional.
Por otra parte, junto a la estudiante de posgrado Tao Lei y el equipo formado por el profesor Martin Rinard y su estudiante Fan Long, Barzilay describió un sistema que aprendió automáticamente cómo manejar datos almacenados en diferentes formatos de archivo, basándose en especificaciones preparadas para una competencia de programación popular.
Expresiones regulares
Las expresiones regulares o patrones han demostrado ser una herramienta poderosa y versátil en cualquiera de sus usos en el ámbito de la informática, desde las hojas de cálculo a bases de datos.
Sin embargo, Barzilay y Kushman afirman en su estudio que se siguen considerando un “arte oscuro” para muchos programadores.
Esto se debe a que el código que utilizan no se correlaciona bien normalmente con el lenguaje natural. Por ejemplo, la expresión regular para buscar “palabra de tres letras que empieza por X” sería “\bX[A-Za-z]{2}\b”, el resultado de un símbolo que indica el comienzo de palabra, otro para la letra en cuestión, un conjunto de símbolos que indican la identificación de una letra, y otros tantos para señalar que la operación anterior debe repetirse dos veces.
Por el contrario, los investigadores llegaron a la conclusión de que cualquier expresión regular tiene un equivalente para esquematizar en lenguaje natural, aunque pudiera no ser muy conciso o intuitivo para un programador.
De esta forma, la idea clave de su trabajo es utilizar la unificación semántica para eliminar la ambigüedad del léxico ordinario. O lo que es lo mismo, encontrar una manera sencilla de esquematizar la lengua en símbolos hasta conseguir la versión más concisa de la misma expresión.
Según los resultados del trabajo, el modelo de Barzilay y Kushman generó la expresión regular correcta en el 66 por ciento de los casos.
Análisis de entrada
El problema general de la traducción natural ha existido desde los inicios de la informática. Aunque se han conseguido algunos éxitos en los últimos años, el trabajo desarrollado por Barzilay, Rinard, Lei y Long explora un aspecto diferente de esta traba: la traducción de especificaciones de entrada en lenguaje natural a códigos ejecutables que analicen correctamente los datos de entrada y generen estructuras para contenerlos.
Toda aplicación de software cuenta con un tipo de archivo asociado -doc para programas de Word, pdf para visualizar documentos, mp3 para reproducir música, etc… Y cada tipo de archivo organiza los datos de forma diferente. Así, un archivo de imagen puede comenzar con unos cuantos bits que indican el tipo de archivo, otros para el tamaño, y algunos más que indican el número de bits asignados a cada píxel, hasta llegar a los que realmente representan los colores de píxel.
El papel de los analizadores de entrada consiste en averiguar qué parte del archivo contiene cada tipo de datos. Sin estos programas, un archivo sería simplemente una cadena aleatoria de ceros y unos.
La novedad introducida por los investigadores del MIT es el desarrollo de un analizador de entrada basado en especificaciones escritas en lenguaje natural. La automatización de esa traducción eliminará los costes que supone el desarrollo manual del software por parte de un programador. Para ello, en lugar de generar directamente el código partiendo del texto, lo primero que se hace es traducirlo en un árbol de especificaciones. A partir de ahí se esquematiza el árbol en programas de análisis.
En este caso, lo probaron con más de 100 ejemplos extraídos de la Competición Internacional Universitaria ACM de Programación (ACM-ICPC), que incluye especificaciones de archivo para todos los retos que plantea la programación. El sistema fue capaz de crear analizadores de entrada en alrededor del 80 por ciento de los casos. En el resto, bastaba con cambiar una o dos palabras de la especificación general.
Ambos métodos suponen un primer paso para permitir a usuarios comunes poder programar sus ordenadores sin necesidad de un conocimiento de lenguajes de programación. En ello coinciden expertos como el profesor Lucas Zettlemoyer, de la Universidad de Washington, quien espera que “las técnicas desarrolladas se generalicen a otras tareas de programación relacionadas”.
Hacer un comentario