Generador de poemas usando Word Embedding, basado en la poesía de Gabriela Mistral
29 Mar 2020
En términos simples el Word Embedding consiste en la transformación de palabras en vectores numéricos con los que, luego, se pueden efectuar operaciones matemáticas (como calcular la similitud, por ejemplo). Buscando algún uso entretenido a este método, se me ocurrió desarrollar un generador de poemas utilizando la obra de Gabriela Mistral.
El objetivo es crear un nuevo poema a partir de una palabra inicial. Luego, selecciono algunos versos al azar y calculo la similitud con esta palabra. El verso con mayor similitud se agrega al “nuevo poema” para, posteriormente, repetir el proceso tomando este verso como texto de comparación en el siguiente ciclo, hasta completar el poema. Aquí una ilustración del proceso:
Recopilación de los poemas
Los poemas los obtuve desde el sitio web www.poemas-del-alma.com utilizando un web-scraper que escribí en Python, con el que logre recopilar 86 poemas en total, que guarde en un archivo .csv.
El código es el siguiente:
Separación y limpieza de versos
Para la separación de los versos creé una función que toma como input el archivo .csv con los poemas y una expresión regular, que se utiliza como criterio de división. En mi caso todos los versos se encuentran divididos por un salto de línea, por lo que solo tuve que ingresar eso en la función.
En relación a la limpieza, corregí algunos caracteres que se encontraban erróneos en todos los texto (signos de puntuación e interrogación en lugares equivocados, por ejemplo) también decidí eliminar los dos puntos y los puntos a parte, de manera que el poema resultante pudiera verse con mayor conexión entre los versos.
Generador de poemas
El generador de poemas toma el archivo .csv del paso anterior, una palabra inicial y el numero de versos como input.
Con la palabra inicial se inicia el proceso, por lo que idealmente esta debería ser un término amplio para aumentar la posibilidad de encontrar un verso con alta similitud.
El cálculo de similitud se hace con la librería spaCy, que cuenta con un modelo en español que incluye los vectores del Word Embedding.
Para realizar la selección aleatoria elegí tomar un numero de 30 frases o versos y también verifiqué que estos no fueran del mismo poema que el verso anterior. El código es el siguiente:
Formato del poema
Para darle un mejor formato al poema resultante pase mayúscula la primera palabra y también agregue un punto al final.
Resultados
Yo elegí generar poemas con 4 versos, para disminuir la posibilitad de que estos no tuvieran sentido.
Estos son algunos de los resultados que a mi más me gustaron:
Poema “sueño”
Poema “amor”
Poema “hambre”
En general, los poemas son bien entretenidos y aunque en algunos casos el resultado final no es muy coherente, en la mayoría de las veces pasa desapercibido cómo se crearon.