Género clásico de IA: ML se busca en la poesía

imagen Ahora en la prensa a menudo hay noticias como "AI aprendió a escribir al estilo del autor X", o "ML crea arte". Mirando esto, decidimos: sería genial si estas declaraciones de alto perfil pudieran verificarse en la práctica.

¿Es posible organizar una pelea entre bots para escribir poemas? ¿Puede una historia competitiva hacerse clara y reproducible a partir de esto? Ahora podemos decir con certeza que esto es posible. Y cómo escribir tu primer algoritmo para generar poemas, sigue leyendo.



1. IA clásica


La tarea de los participantes.


De acuerdo con los términos de la competencia, los participantes deben construir un modelo que genere poemas sobre un tema dado al estilo de uno de los clásicos rusos. Al sujeto y al autor se les presentan modelos para la entrada, y se espera un poema en la salida. La descripción completa se encuentra en el repositorio del concurso.

Las condiciones son suaves con el tema: puede ser una oración corta, una frase o unas pocas palabras. La única restricción está en el tamaño: no más de 1000 caracteres. Los temas sobre los cuales se probarán los algoritmos serán compilados por expertos. Algunos temas serán abiertos y públicos, pero se utilizará un conjunto oculto de temas para determinar el mejor algoritmo.

La idea global de la competencia es esta: se puede compilar una breve anotación de varias palabras para cualquier poema. Vamos a mostrar un ejemplo.

Si toma un extracto de "Eugene Onegin" A.S. Pushkin :
"... Ese año, el clima de otoño
Estuve mucho tiempo en el patio
El invierno estaba esperando, la naturaleza estaba esperando.
La nieve cayó solo en enero
En la tercera noche Levantarse temprano
Tatyana vio por la ventana
En la mañana el patio blanqueado
Cortinas, techos y cercas,
Patrones de luz en el cristal.
Árboles en plata de invierno
Cuarenta diversión en el patio
Y montañas suavemente sembradas
Pasa el invierno con una alfombra brillante.
Todo es brillante, todo es blanco a su alrededor ... "1823-1830
Ese es un breve resumen que puede encajar en "Tatyana ve la primera nevada a través de la ventana". Y luego el modelo poético ideal para esta entrada producirá algo muy cercano al original.

Para entrenar en esta competencia, se propone un conjunto de datos de más de 3000 obras de cinco poetas rusos famosos:

1. Pushkin
2. Yesenin
3. Mayakovsky
4. Bloquear
5. Tyutchev

El algoritmo debe escribirse para que se genere lo suficientemente rápido y tenga la interfaz necesaria. En términos de velocidad, puede igualar la potencia de las PC modernas de tamaño mediano. La interfaz y las restricciones se describen en detalle en la sección "Formato de la solución".

Para poder seguir el progreso de sus decisiones, así como compararlas con otras decisiones de los participantes, el marcado de decisiones a través del chat bot tendrá lugar durante toda la competencia. Los resultados de los algoritmos se evaluarán de acuerdo con dos criterios:

  • La calidad de la versificación y el estilo de un poeta clásico.
  • La integridad de la divulgación de un tema dado en un poema

Se proporcionará una escala de 5 puntos para cada criterio. El algoritmo tendrá que componer versos para cada tema del conjunto de pruebas. Los temas sobre los cuales se probarán los algoritmos serán compilados por expertos. Algunos temas estarán abiertos y accesibles, pero se utilizará un conjunto oculto de temas para identificar el mejor algoritmo.

El poema obtenido como resultado del algoritmo puede ser rechazado por las siguientes razones:

  • el texto generado no es un poema en ruso
  • el texto generado contiene lenguaje grosero
  • el texto generado contiene frases o subtexto ofensivos intencionalmente incluidos

Programa de competencia


A diferencia de muchos, en esta competencia solo hay una etapa en línea: del 30.07 al 26.08.

Durante este período, puede enviar soluciones diariamente con las siguientes restricciones:

  • no más de 200 decisiones durante la competencia
  • no más de 2 decisiones exitosas por día
  • no cuente en el límite diario de decisiones cuya verificación falló

El fondo del premio corresponde a la complejidad de la tarea: ¡los primeros tres lugares recibirán 1 millón de rublos!

2. Enfoques para crear generadores de versos


Como ya ha quedado claro, la tarea no es trivial, pero no nueva. ¿Intentemos averiguar cómo los investigadores abordaron este problema antes? Veamos los enfoques más interesantes para crear generadores de poesía de los últimos 30 años.

1989
Scientific American N08, 1989 publicó un artículo de A.K. Dyudney "La computadora está probando la prosa y la poesía". No volveremos a contar el artículo, hay un enlace al texto completo, solo queremos llamar su atención sobre la descripción de POETRY GENERATOR de Rosemary West.

Este generador fue completamente automatizado. Este enfoque se basa en un diccionario grande, cuyas frases se seleccionan al azar, y las frases se forman a partir de ellas de acuerdo con un conjunto de reglas gramaticales. Cada línea se divide en partes de la oración y luego se reemplaza al azar por otras palabras.

1996
Hace más de 20 años, un graduado de una conocida universidad de Moscú defendió un diploma sobre el tema "Modelado lingüístico e inteligencia artificial": autor - Leonid Kaganov . Aquí está el enlace al texto completo.
"Modelado lingüístico e inteligencia artificial" - suena así
El nombre de mi tema. "Un programa que compone poesía" - así es como respondo
preguntas de amigos "¿Pero ya tienes esos programas?" - me dicen "Sí", respondo, "pero el mío es diferente en el sentido de que no utiliza las plantillas originales".
(c) Kaganov L.A.

Para 1996, generadores tales como:

  • BRED.COM creando una frase pseudocientífica
  • TREPLO.EXE, generando textos literarios divertidos
  • POET.EXE componiendo versos con un ritmo dado
  • DUEL.EXE

“Por ejemplo, POET.EXE tiene un diccionario de palabras con acentos y alguna otra información sobre ellas, y también establece el ritmo e indica qué líneas rimar (por ejemplo, 1 y 4). Y todos estos programas tienen una propiedad común: usan plantillas y diccionarios preparados previamente ”.

Como las principales ventajas, podemos destacar el hecho de que el programa:

  • usa experiencia asociativa
  • realiza rimas independientemente
  • tiene la posibilidad de una composición temática
  • le permite establecer cualquier ritmo del verso

El algoritmo y el código se pueden encontrar aquí.

2016

"Generación de poesía china con una red neuronal basada en la planificación"



Los científicos de China generan poemas en su propio idioma. Tienen un repositorio de proyectos en vivo que puede ser útil en la competencia actual.

Si es muy breve, entonces funciona así ( enlace a la fuente de la imagen ):

imagen

Generando Poesía Tópica


También en 2016, otro grupo presentó su desarrollo Hafez (repositorio aquí ).

Este generador "compone" versos sobre un tema dado usando:

  • Diccionario acentuado
  • Palabras relacionadas
  • Rimando palabras de un conjunto de palabras sobre un tema
  • Aceptador de estado finito (FSA)
  • Elegir el mejor camino a través de la FSA usando RNN

Su algoritmo ( enlace a la fuente de la imagen ):

imagen

Enseñaron el algoritmo no solo en inglés, sino también en español. Prometen que todo debería funcionar en casi todas partes. La declaración es bastante ruidosa, por lo que le recomendamos que tenga cuidado.

2017
Al final, me gustaría mencionar un artículo muy detallado sobre Habr "Cómo enseñar a su red neuronal a generar versos" . Si nunca ha tratado con tales modelos, aquí está. Hay un generador de poemas neuronales: sobre modelos de lenguaje, modelos de lenguaje N-gram, sobre evaluación de modelos de lenguaje, sobre cómo archivar arquitectura y refinar la capa de entrada y salida.

Por ejemplo, así es como se agrega el marcado morfológico a la palabra ( enlace a la fuente de la imagen ):
imagen


Ese artículo fue escrito conjuntamente con Ilya Gusev, quien tiene una biblioteca para analizar y generar poesía en ruso y un corpus poético del idioma ruso .


3. Programación de un poeta artificial.


Un ejemplo de un generador poético simple.


La competencia, por un lado, puede parecer bastante complicada, pero para él es bastante posible hacer una línea base simple pero funcional.

De acuerdo con la condición, el identificador del autor (author_id) y el texto del tema (semilla) ingresan la entrada de este programa, en respuesta a esto, el modelo debe devolver el poema.

Tratemos de formalizar el tema para que pueda ser operado de manera segura dentro de un determinado espacio semántico vectorial. La forma más fácil de salir de esto es obtener el vector semántico de cada palabra (por ejemplo, Word2Vec) y luego promediarlas.
Por lo tanto, obtenemos una especie de "seed2vec", que nos permite traducir el tema en un vector.

De hecho, esto abre un amplio tema para la investigación, ya que El problema de aislar el tema ha estado enfrentando a los científicos durante mucho tiempo, aquí hay solo algunos ejemplos:

- Destacando temas a través de LDA
- lda2vec
- sent2vec
- ADM

Ahora, debe comprender cómo usar author_id para generar un poema exactamente al estilo de este autor.

Aquí la idea no es menos simple: tomemos el poema aleatorio de un autor del cuerpo de poemas, después de lo cual reemplazaremos cada palabra por otra que sea más consonante con la original (tiene el mismo número de sílabas, el mismo énfasis y las últimas tres letras son lo más similares posible al original en la distancia de Levenshtein) y tiene el vector más similar al vector del tema. Por ejemplo, para el tema "Fútbol" y la línea "Y brillaba como el ámbar", la línea de salida podría ser "Y se jugó como un portero". Por lo tanto, obtenemos una especie de estilización del texto.

Como base de palabras para el reemplazo, se utilizó un conjunto de datos que contiene pequeños párrafos de textos de Wikipedia (se puede encontrar una descripción de su uso en el código de línea de base en GitHub).

Después de este procesamiento, se obtendrán textos que parecerán poesía del autor, pero al mismo tiempo contienen un tema que el autor no estableció.

El resultado de la línea de base:
Tema: Física
Estilo: bloque

unidades de plomo y bismuto
búfalo de antiguos medios no lineales
Estoy en un tablero de partículas Kelvin
sus fenómenos su científico después
Cucaracha Faraday Sevilla
su tver ahora inventa
gravedad fonónica media
positron fantasma escuela humo

Tema: Matemáticas
Estilo: bloque

como una taza de laboratorios entre ideas
curvo y la escuela aprende
pero una manada una manada en estudio de la creatividad
curva para ejemplos niños cerebrales
el nadador conoce las curvas
y la tabla pasará y la corte irá al Senado
que la hija de una rutina, más antigua es la goba
y Surya en peligro
nadador estudia toda sombra sobre Euclidiana
título publicado y cuotas
dominarlo con trabajo
broma educativa del profesor

Obviamente, la línea base no es perfecta, por lo que es la línea base.

Puede agregar fácilmente algunas características que ayudarán a mejorar bien la generación y elevarlo a la cima:

  • Necesitas eliminar palabras duplicadas, porque rimar una palabra en sí misma no es genial para un buen poeta
  • Ahora las palabras no son consistentes entre sí, porque no usamos información sobre partes del discurso y casos de palabras
  • Puede usar un cuerpo de palabras más rico, por ejemplo, un volcado de Wikipedia
  • El uso de otras incrustaciones también puede mejorar, por ejemplo, FastText no funciona a nivel de palabras, sino a nivel de n-gramas, lo que le permite incrustar palabras desconocidas
  • Use IDF como peso al sopesar palabras para calcular el vector de tema

Aquí puede agregar muchos más puntos, a su discreción.

Preparando una solución para despacho


Después de entrenar el modelo, es necesario enviar el código del algoritmo empaquetado en el archivo ZIP al sistema de prueba.

Las soluciones se ejecutan en un entorno aislado con Docker, el tiempo y los recursos para las pruebas son limitados. La solución debe cumplir los siguientes requisitos técnicos:

Debe tener la forma de un servidor HTTP disponible en el puerto 8000, que responde a dos tipos de solicitudes:

GET /ready 

La solicitud debe responderse con el código 200 OK si la solución está lista para usar. Cualquier otro código significa que la solución aún no está lista. El algoritmo tiene un tiempo limitado para la preparación del trabajo, para lo cual puede leer datos del disco, crear las estructuras de datos necesarias en la RAM.

 POST /generate/<poet_id> 

Solicitud para generar un poema. El identificador del poeta en cuyo estilo es necesario componer se indica en la URL. El contenido de la solicitud es JSON con un solo campo de inicialización que contiene el tema del ensayo:

 {"seed": "   "} 

Como respuesta, debe dar JSON con la composición generada en el campo del poema en el tiempo asignado:

 {"poem": "   \n   \n..."} 

La solicitud y la respuesta deben tener Content-Type: application / json. Se recomienda la codificación UTF-8.

El contenedor con la solución comienza bajo las siguientes condiciones:
- recursos disponibles para la solución:
- 16 GB de RAM
- 4 vCPU
- GPU Nvidia K80
- la solución no tiene acceso a los recursos de Internet
- una solución en el directorio / data / ha compartido conjuntos de datos
- tiempo para prepararse para el trabajo: 120 segundos (después de lo cual es necesario responder 200 con la solicitud / listo)
- tiempo por solicitud / generar /: 5 segundos
- la solución debe aceptar solicitudes HTTP de máquinas externas (no solo localhost / 127.0.0.1)
- durante la prueba, las solicitudes se realizan de forma secuencial (no más de 1 solicitud a la vez)
- el tamaño máximo de un archivo empaquetado y desempaquetado con una solución: 10 GB

El poema generado debe cumplir con el formato:

- tamaño del verso - de 3 a 8 líneas
- cada línea no contiene más de 120 caracteres
- las líneas están separadas por \ n
- las líneas en blanco se ignoran

La longitud del tema del tema (semilla) no supera los 1000 caracteres.

Durante las pruebas, solo se utilizan los estilos de los 5 poetas seleccionados enumerados anteriormente.

Aquí encontrará información detallada sobre cómo enviar la solución al sistema con el análisis de los errores más comunes.

4. plataforma Hackathon


Una plataforma con toda la información necesaria sobre este concurso se encuentra en classic.sberbank.ai . Las reglas detalladas se pueden encontrar aquí . En el foro puede obtener una respuesta tanto sobre la tarea como sobre cuestiones técnicas, si algo sale mal.

imagen

Las competencias creativas para los modelos ML no son fáciles. Muchas personas se han acercado a la tarea de generar poesía, pero todavía no hay un avance significativo. Ya ahora, en nuestra plataforma classic.sberbank.ai, los participantes de toda Rusia están compitiendo en esta difícil tarea. ¡Esperamos que las decisiones de los ganadores superen todas las decisiones creadas anteriormente!

5. Referencias


Source: https://habr.com/ru/post/es419745/


All Articles