APOLO: Un compositor automático de poesía tipo ‘Pie Forzado’*
En el marco del concurso Creative Turing Tests 2018, organizado por el Dartmouth College’s Neukom Institute for Computational Science, presenté al desafío LyriX un sistema generativo de IA capaz de crear poemas a partir de una frase.
Si bien el premio fue a parar a otro participante, siento que gané el premio a la participación. Fue una experiencia intelectualmente gratificante en la que disfruté del tiempo que pasé resolviendo un montón de problemas. El método de learning by doing te permite aprender por ti mismo mientras resuelves los problemas.
Apolo es un sistema de Modelado del Lenguaje basado en n-gramas y Cadenas de Markov. La lógica de modelado, entrenamiento y generación, están encapsuladas en una clase POCO de C#, no tiene dependencias de ningún framework externo o SDK. Para simplificar la distribución del archivo ejecutable, el proyecto fue desarrollado como una solución WPF.
Utiliza dos Cadenas de Markov, una con bigramas y trigramas extraídos de los poemas, y la otra con trigramas extraídos de textos abiertos. La primera se utiliza para generar el poema como tal, mientras que la segunda permite encontrar la primera palabra introducida por el usuario.
El proceso generativo predice dos o tres palabras a la vez (n-gramas completos) con cada transición. Para representar los grafos se utilizan diccionarios de nodos. Cada clave es un n-grama, mientras que el valor asociado contiene una lista de índices en el diccionario. Estos índices representan posibles transiciones del n-grama actual al siguiente. La tokenización de poemas y textos mantiene los signos de puntuación y los cambios de línea (newlines, \r\n).
El algoritmo generativo funciona en sentido inverso, del final al principio, empezando por la primera palabra que introdujo el usuario, por lo que las máquinas de estado representan transiciones también en sentido inverso.
Se utilizan dos tipos de conjuntos de datos, uno para cada modelo. El modelo de poemas se entrena con unos pocos cientos de poemas creados por varios poetas relevantes de la lengua inglesa y traducciones de Petrarca, mientras que el modelo de textos se entrena con algunos textos de dominio público provenientes del Proyecto Gutenberg y otras fuentes. Los poemas y los textos se normalizaron y limpiaron previamente.
Recientemente he publicado el código fuente del proyecto como contribución a la comunidad de código abierto y al conocimiento colectivo. Puedes obtenerlo en GitHub: https://github.com/hinojosachapel/CreativeTuringTests2018.
También puedes leer el texto presentado como descripción del proyecto.
*Esta entrada es una versión del original en inglés publicado en LinkedIn.