domingo, 15 de noviembre de 2009

Con las manos en la masa. Jugando a crear texto automático



Introducción


Una posibilidad de la literatura digital es encomendar a un algoritmo la creación de textos. Nadie ha demostrado aún que la creatividad artística humana resida en procesos cognitivos que no puedan ser simulados por un ordenador. Parece poco probable que exista una musa inmaterial y espiritual que alimente el arte. Más bien, es fruto de la compleja actividad neuronal del cerebro y, por tanto, al igual que ya hemos desarrollado programas que mejoran las habilidades de cálculo y clasificación podría pensarse en que, en el futuro, existirá un software capaz de escribir novelas o poemas de una calidad tal que emocionen a un significativo número de personas. Un Lope de Vega cibernético o un Pushkin escondido en las entrañas de un microprocesador.

Hoy por hoy, esto es únicamente una posibilidad teórica y los textos generados totalmente por computadora no son precisamente un dechado de calidad. Se investiga, sin embargo, con ahínco en ello. Por un lado, en comprender las interioridades del lenguaje para poder, eventualmente, simularlo. La aplicación práctica de esta disciplina, el lenguaje computacional (PLN), tiene como primer objetivo la traducción o la recuperación de información más que la creación literaria. En un planeta con tantas lenguas y en tantas instituciones multilingües- como Naciones Unidas o el Parlamento Europeo, por ejemplo- la utilidad y potencial mercado de estos sistemas son evidentes. Pero también existe ávida experimentación en la búsqueda de algoritmos que puedan componer versos o crear ficción de calidad, al menos, aceptable. Hace unos meses, por ejemplo, se publicó la aparición de una novela totalmente generada por ordenador
aunque no he vuelto a saber si la iniciativa llegó a buen término. También han existido notables experiencias como la de unos estudiantes del MIT (http://pdos.csail.mit.edu/scigen/#examples ) que lograron que revistas de prestigio les publicaran ponencias generadas por ordenador auténticamente inconsistentes (bogus text). Y, asimismo, existe investigación sobre software que detecte los escritos generados automáticamente aparentemente correctos, pero carentes de sentido para desenmascararlos (http://www.physorg.com/news65101797.html).

¿Mas cómo puede una máquina automática crear literatura? Porque se trataría no ya sólo de crear frases correctas sino un largo texto que emocione ¿Es posible? Está fuera de las posibilidades de este blog el profundizar en las opciones y en los modelos algorítmicos posibles pero, - ¿por qué no? - podemos intentar crear en nuestros laptops programitas que, al menos, generaran texto inteligible.

En este post quiero proponer un ejercicio práctico para construir un algoritmo que genere texto. Será un pequeño y poco ambicioso modelo con el que se podrá juguetear y ser ampliado por cualquiera que tenga tiempo y disfrute con estos pasatiempos. Yo lo he probado y he de decir que los resultados son pobres pero, al menos, puede competir con algunos discursos
vacíos de ideas y llenos de verborrea. Ideal para provocar la somnolencia tras una copiosa comida. Seguro que los lectores pueden mejorarlo en muchos órdenes de magnitud y les animo a ello. El código está a disposición del que desee usarlo.

El concepto básico.

En el habla común podemos generar oraciones relativamente complejas concatenando frases sencillas. En aras a la sencillez de este post, este algoritmo construirá siempre oraciones compuestas por cuatro unidades básicas. Ello producirá una rutina que hará que el texto resulte aburrido pero que, a efectos de lo que se pretende mostrar, es más que suficiente. Un programa más complejo debería combinar diversos modelos de oraciones y alternarlas de acuerdo a un patrón no reconocible (por ejemplo, utilizando una variable aleatoria) con lo que se rompería la monotonía.

En nuestro sencillo caso, las oraciones podrían por ejemplo construirse siguiendo un esquema A-B-C-D donde A sería un sintagma preposicional, B contendría el sintagma nominal, C el sintagma verbal y D un sintagma adverbial o adjetival. No es nada novedoso. Este tipo de formas de crear oraciones ha existido desde hace mucho en papel. Hay un libro de Didier Noyé titulado ”
Réunionite : guide de survie en el que usa esta técnica para crear discursos insignificantes pero aparentemente contundentes en el área de gestión de empresas. Cortazar y Mozart ya usaron el sistema tanto en literatura como en música. No siendo nada nuevo, el método nos servirá para mostrar la técnica.

Veámoslo con un ejemplo:

“En cualquier caso, la utilidad de la literatura digital podrá ser analizada con detalle en un futuro cercano”

La descomposición de unidades sería:

A= En cualquier caso,
B= la utilidad de la literatura digital
C= podrá ser analizada con detalle
D= en un futuro cercano.

La particularidad de este tipo de subcadenas unidas es que pueden variarse casi a voluntad y siempre encajarán razonablemente en la oración. Así, supongamos que tenemos otro subconjunto “B” que dijera “la calidad de tal poesía”. Podríamos sustituir la “B” anterior por la nueva “B” y nos quedaría la oración:

“En cualquier caso, la calidad de tal poesía podrá ser analizada con detalle en un futuro cercano”

Que es también una oración inteligible y bien construida aunque carezca de contenido y significado real. Imaginemos, ahora, que tenemos sólo diez cadenas de cada uno de los cuatro tipos. Las combinaciones posibles serían diez mil sentencias distintas. Si tuviésemos cien de cada tipo, las combinaciones ascenderían a cien millones, más que suficiente para crear largos y soporíferos discursos o tediosas descripciones.

Vamos, a efectos de este ejemplo (que, insisto, es ampliable hasta el infinito), proponer diez frases por cada grupo que versen sobre teoría de literatura digital, añadiendo una buena dosis de humor. El lector detectará con cierta rapidez la repetición parcial de frases pero esto será únicamente debido a que sólo utilizaremos diez cadenas por bloque y de que las oraciones compuestas serán siempre idénticas A-B-C-D. Recurriendo a más cadenas y a variar la composición de las oraciones, la repetición sería imperceptible.

Para el bloque A serían:

- En cualquier caso,
- De cualquier modo,
- Sin lugar a dudas,
- Evidentemente,
- Así pues,
- Sin entrar en otras consideraciones,
- Por lo tanto,
- Sin embargo no hemos de olvidar que,
- Desde el punto de vista de la forma,
- En resumen,

Para el bloque B tendremos:

- la calidad de la poesía
- la utilidad de la literatura digital
- la profundidad dialéctica de un blog
- la literatura electrónica
- la complejidad de los estudios electro-literarios
- la poesía concebida por un microprocesador
- la literatura ergódica
- la nueva estética de la literatrónica
- la lectura de cibertextos
- la hiperfonía

Para el bloque C elegimos:

- podrá ser analizada hasta el detalle
- podrá concebirse en un adecuado corpus
- se atendrá, sin género de dudas, a lo fundamental del texto
- generará de manera subyacente una nueva visión
- se fragmentará en una constelación muy variada
- se debería estudiar como un subconjunto experimental
- acabará imponiéndose en la memoria literaria
- terminará por difundirse, mientras que se olvidará el ciberespacio
- conformará el núcleo multimedia interdisciplinar
- será considerada, según la Universidad de Mantumbe, la primera obra claramente hipermediática


Y para el bloque D:

- de teoremas sintácticos novedosos.
- de carismáticas vías de futuro.
- por un cada vez un mayor grupo de lingüistas.
- por los lectores.
- dentro de una nueva teoría que alumbre nuevos conceptos.
- dentro de un marco de texto fluido, tan en boga hoy en día.
- por la nueva oferta de lectores electrónicos.
- de la literatura blogdica (permítasenos este neologismo), pieza clave en el - desarrollo de la próxima década.
- de la nueva pragmática.
- entre una pléyade de nuevos escritores.

Programando código.

Para programar este humorístico generador de texto podría usarse cualquier lenguaje de programación. Dado que, en este ejemplo, no buscamos una interface visualmente bella sino sólo leer el texto creado por un ordenador no es preciso recurrir a lenguajes que faciliten la creación gráfica o multimedia. Tampoco pretendemos, ahora, generar interactividad. Y, por último, debe tratarse de un código que cualquier pueda “copiar y pegar” y probarlo inmediatamente. Esto elimina desarrollarlo en FLASH o VISUAL BASIC que requieren paquetes que no todos tenemos. Es por ello que voy a utilizar HTML y javascript que serán ejecutables directamente por el navegador. Está probado con Internet Explorer. Es posible que con otros navegadores las rutinas de javascript deban modificarse ligeramente.

No pretendo enseñar HTML ni javascript y presupongo un cierto conocimiento del mismo. Si algún lector no supiera nada podría leer este interesante tutorial (
http://www.uv.es/jac/guia/ ). En cualquier caso, aún sin entender el código puede hacérsele funcionar “copiando y pegando”. He introducido algunos comentarios dentro del código. Para utilizarlo basta abrir el Bloc de notas, copiar el código y salvarlo con el nombre prueba.html


<HEAD>
<TITLE>EJEMPLO DE TEXTO AUTOMATICO. Félix Remírez. 2009</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">

<script language="JavaScript1.2">

function displaymessage() {

// vamos a generar textos cortos de 4 oraciones. Por tanto hemos de repetir la creación de una oración cuatro veces con un bulce del tipo 'for'.

for (x = 1; x < 5; x++) {

// existen cuatro bloques similares para generar las frases A-B-C-D. Para construirlas se memorizan las frases
// en variables del tipo array y se genera un numero aleatorio con el que se selecciona una de ellas
// al azar.

var preguntas1 = new Array (
"En cualquier caso",
"De cualquier modo",
"Sin lugar a dudas",
"Evidentemente",
"Así pues",
"Sin entrar en otras consideraciones",
"Por lo tanto",
"Sin embargo no hemos de olvidar que",
"Desde el punto de vista de la forma",
"En resumen"
);
var l1 = preguntas1.length;
var rnd_no1 = Math.round((l1-1)*Math.random());
var coma=","
var message1=preguntas1[rnd_no1]+coma;

var preguntas2 = new Array (
"la calidad de la poesía",
"la utilidad de la literatura digital",
"la profundidad dialéctica de un blog",
"la literatura electrónica",
"la complejidad de los estudios electroliterarios",
"la poesía concebida por un microprocesador",
"la literatura ergódica",
"la nueva estética de la literatrónica",
"la lectura de cibertextos",
"la hiperfonía"
);
var l2 = preguntas2.length;
var rnd_no2 = Math.round((l2-1)*Math.random());
var message2=preguntas2[rnd_no2];


var preguntas3 = new Array (
"podrá ser analizada hasta el detalle",
"podrá concebirse en un adecuado corpus ",
"se atendrá sin género de dudas a lo fundamental del texto",
"generará de manera subyacente una nueva visión",
"se fragmentará en una constelación muy variada",
"se debería estudiar como un subconjunto experimental",
"acabará imponiéndose en la memoria literaria ",
"terminará por difundirse mientras que se olvidará el ciberespacio",
"conformará el núcleo multimedia interdisciplinar",
"será considerada- según la Universidad de Mantumbe- la primera obra claramente hipermediática"
);
var l3 = preguntas3.length;
var rnd_no3 = Math.round((l3-1)*Math.random());
var message3=preguntas3[rnd_no3];


var preguntas4 = new Array (
"de teoremas sintácticos novedosos. ",
"de carismáticas vías de futuro. ",
"por un cada vez un mayor grupo de lingüistas. ",
"por los lectores.",
"dentro de una nueva teoría que alumbre nuevos conceptos. ",
"dentro de un marco de texto fluido tan en boga hoy en día. ",
"por la nueva oferta de lectores electrónicos. ",
"de la literatura blogdica (permítasenos este neologismo) pieza clave en el desarrollo de la próxima década. ",
"de la nueva pragmática. ",
"entre una pléyade de nuevos escritores. "
);
var l4 = preguntas4.length;
var rnd_no4 = Math.round((l4-1)*Math.random());
var message4=preguntas4[rnd_no4];

// Formamos el texto con las 4 oraciones y lo visualizamos en una zona DIV llamada div1.

var message5=message1+" "+message2+" "+message3+" "+message4

var myDiv1 = document.getElementById("div1");

myDiv1.appendChild(document.createTextNode(message5)); };

}
</script>

<!--ahora escribimos la estructura HTML de la página-->

<BODY bgcolor="#DDDDD9">

<LEFT>

<!--en la zona DIV1 escribimos el texto cuando hacemos click en un botón-->

<div id="div1">
<input type="button" value="Crear texto" onclick="displaymessage()" />
</div>

<!--en la zona DIV2 ponemos un botón que borre el texto y empiece de nuevo-->
<div id="div2">
<input type="button" value="Limpiar pantalla" onclick="window.location.reload()" style="font-family: Verdana; font-size: 8 pt">
</div>



</BODY>
</HTML>




He aquí algunos ejemplos creados por nuestro escritor cibernético automático:

Desde el punto de vista de la forma, la complejidad de los estudios electroliterarios terminará por difundirse mientras que se olvidará el ciberespacio por la nueva oferta de lectores electrónicos. En cualquier caso, la literatura ergódica acabará imponiéndose en la memoria literaria dentro de una nueva teoría que alumbre nuevos conceptos. Así pues, la nueva estética de la literatrónica conformará el núcleo multimedia interdisciplinar entre una pléyade de nuevos escritores. Sin lugar a dudas, la literatura ergódica se debería estudiar como un subconjunto experimental de la nueva pragmática.
Sin entrar en otras consideraciones, la literatura electrónica generará de manera subyacente una nueva visión por la nueva oferta de lectores electrónicos. Sin lugar a dudas, la literatura electrónica podrá concebirse en un adecuado corpus por un cada vez un mayor grupo de lingüistas. Evidentemente, la calidad de la poesía terminará por difundirse mientras que se olvidará el ciberespacio dentro de una nueva teoría que alumbre nuevos conceptos.

Lamentables, ¿no? . Pero aparentemente inteligibles. Tampoco podemos pretender crear un Moliere con tan escaso código.


Posibles mejoras sencillas y reflexiones sobre literatura automática.


Una vez realizado el ejemplo más sencillo posible cabe pensar en las posibles mejoras:

- Crear dos rutinas javascript. Una, como la mostrada en el capítulo 2. Otra similar, pero con oraciones del tipo A-B-C. O bien, crear varias rutinas A-B-C-D, A-B-C, A-B-C-D-E, etc. y mezclarlas de manera aleatoria.

- Alargar las cadenas a más de 10 elementos. Por ejemplo, 50 o 100 en cada bloque. Con 100 por bloque, la repetición parcial ya no se percibe y la monotonía desaparece.

- Intercalar, cada cierto número de frases determinado aleatoriamente, otras frases con significado previamente preparadas por un humano. El lector, así, encontrará islas de sentido en un mar de verborrea y tenderá a pensar que todo tiene sentido y que es él el que no entiende. Al menos, lo releerá.

- Insertar gráficos de tanto en cuanto. Podríamos almacenar una serie de dibujos o fotografías (en número suficiente para que no se perciba fácilmente la repetición) e intercalarlos cada cierto número de párrafos. Podía ser muy útil en textos técnicos para dar una mayor apariencia de verosimilitud.

- No inventar sentencias anodinas, breves y sin contenido sino crear las cadenas en base a párrafos (o pedazos de ellos) realmente escritos por autores clásicos de renombre (y digo clásicos para evitar problemas de derechos de autor). El resultado final, sobre todo si se incluye un alto número de ellos, comenzará a ser literariamente válido (entre otras cosas porque cada pieza constitutiva proviene de la literatura humana) aunque la emoción narrativa, la arquitectura del relato y la trama seguirán siendo, probablemente, pobres.
Cortazar ya utilizó este método pero los párrafos y el orden en que podían ser leídos surgió de su propia mente, no de una selección aleatoria automática. Y Mozart propuso tablas de creación de sonatas que estaban basadas en la misma técnica pero, claro, cada frase melódica y las posibles combinaciones habían sido imaginadas en el cerebro del de Salzburgo.

- Crear frases plantilla en las que haya “huecos” que se deban rellenar con nombres o lugares que el lector introduzca. Puede entonces particularizarse la narración de acuerdo a los gustos del usuario. Algo que, en definitiva, no es diferente de esos cuentos en papel que se completan con el nombre del niño que los compra. Sólo que realizado de manera digital.

- Incluir, de tanto en cuanto, anglicismos que otorguen un hálito de superioridad. Sobre todo en textos técnicos.

- Programar dos textos independientes que traten de asuntos diferentes pero que se vayan intercalando en ciertos momentos.

- Ya, mucho más complicado, crear las frases partiendo de palabras y cumpliendo las reglas gramaticales y sintácticas del idioma. Tarea harto complicada si se desea obtener un resultado de calidad literaria.

En fin, habría tantas posibilidades como ideas imaginativas puedan existir y habilidad programadora tenga el que las inventa.
Casi todas por desarrollar.


Consideraciones finales


¿Pero, finalmente, un ordenador automático podría crear literatura? ¿Podría crear una novela que nos emocione, que perdure, que nos haga pensar, que construya hábilmente los personajes y la relación entre ellos, que imagine una época, un lugar, unos hechos?

Sería osado decir que nunca se podrá conseguir. Pero estamos muy lejos de ello. Lejísimos. Pienso que ese potencial desarrollo deberá ir ineludiblemente ligado a las técnicas de inteligencia artificial. ¿Pero, cuándo ocurrirá esto? Cuando yo aún era niño, en 1968, Stanley Kubrick nos inquietaba con la súbita toma de conciencia e inteligencia del ordenador HAL en 2001, Una odisea del espacio, película de culto de la ciencia ficción . Aún resuena en los oídos de muchos el amenazador Hello, Dave. Shall we continue the game? de HAL, el prepotente I'm not capable of being wrong, una vez tomado el mando o la triste canción que entona cuando está a punto de ser desconectado (¿asesinado?). Hace treinta años yo comenzaba a usar incipiente sistemas expertos que pronosticaban la cercana llegada del ordenador pensante. Por la misma época el programa ELIZA – que muchos acabamos copiando en BASIC o en FORTRAN una década después- parecía anunciar la inminente llegada del lenguaje artificial. Pero, lo cierto es que hoy- tantos años después- ese objetivo de simulación de la mente humana está aún muy lejos excepto para ciertas tareas muy especializadas, por lo general técnicas. La actividad creativa sigue residiendo en nuestros cerebros y no hay ideas claras de cómo simularla.

Muchos juegos actuales se basan en el trabajo conjunto de cientos de personas (programadores, diseñadores, escritores, músicos) que consiguen crear espectaculares obras. Pero no son literarias. Basta, de momento, la inventiva de un solo escritor humano para lograr vencer – literariamente hablando- a cualquier programación por avanzada que sea.


A muy largo plazo estoy convencido de que nuestros bisnietos verán maravillas. Pero, aquí y ahora, el reto de la literatura digital es no ser sólo digitalizada o sólo decorar con un interface hermoso lo que era literatura en papel. Necesitamos muchas más ideas teóricas y muchos más algoritmos prácticos. Hay un ingente trabajo por hacer que, posiblemente, requerirá generaciones.

¿Se anima alguien a modificar este experimento que hemos llevado a cabo para crear un programa que genere automáticamente un texto literario?

Entrada publicada por Félix Remírez



Share/Save/Bookmark

7 comentarios:

  1. Excelente.
    Todos sabemos que el arte no lo define el productor, sino el receptor. Por lo tanto, el texto artístico bien puede ser creado de forma automática (hay excelentes propuestas de la era pre-electrónica que así lo avalaban antes de los ordenadores). Ahora bien, la clave es el receptor: ¿puede éste ser una máquina? Por ahora, los replicantes sólo han tenido experiencias artísticas en la ciencia ficción. Éste es el punto más inquietante, más interesante: ¿llegará un momento en el que el ser humano sea prescindible también en la recepción de una obra artística?
    Aferrémonos a la idea de que no llegará. Por las consecuencias.

    ResponderEliminar
  2. ¡Qué maravilla de experimento! El texto generado tiene muchos más visos de racionalidad de lo que hubiera pensado nunca.
    En seguida he pensado que aunque mezcladas aleatoriamente, la inteligibilidad del texto se basa sobre todo en la minuciosa y genial elección del corpus de frases que has hecho: todas de la misma área temática, con palabras muy adecuadas a la verborrea teórica de la crítica electrónica, con frases finales de contenido incontestable... ¡Es genial!
    En seguida he pensado que un Dan Brown o un Stieg Larsson inteligente que conoce cuáles son los temas, las palabras, las conclusiones que el gran público espera escuchar... podría beneficiarse de este tipo de programas si se consiguiera solventar el tema del desarrollo de tramas y personajes como tú bien mencionas, claro.
    Pero en literatura hay algo, creo, que la aletaoriedad difícilmente puede emular. Los seres humanos tenemos cerebros que aborrecen lo aleatorio, que buscan inconscientemente las secuencias incluso donde no las hay. Bien, pues en ese uso redundante del lenguaje, muchas veces se encuentra la alegoría, la metáfora y en definitiva la poesía (la literariedad formalista, si se quiere). La palabra "pozo", la palabra "patio", la palabra "fuente" ¿cómo va a ser mezclada de manera que deje de significar lo que significa hasta convertirse en el significante nuevo de un idioma literario específico, como ocurre en la obra poética de Machado?

    Queda abierta la reflexión.
    Y muchas gracias por cedernos tu invento. Estoy deseando ponerlo a prueba.

    ResponderEliminar
  3. Hablando de Dan Brown, hay un excelente entretenimiento aquí donde se generan reseñas infinitas de novelas al estilo de ese autor, incluso con una fotito del supuesto libro y una crítica de los mejores diarios del mundo. Es terriblemente divertido e inteligente.

    El código es parecido al mostrado en mi post, pero introduciendo palabras seleccionadas aleatoriamente en frases predeterminadas.

    Viendo el resultado, uno se pregunta si Brown no estará usando un programa similar.

    No sé quién es el autor.

    Un saludo

    ResponderEliminar
  4. Hola estuve revisando tu blog y me parece muy interesante y entretenido, sobre todo que la información es detallada y precisa, espero que sigas posteando más temas para informarnos y comentar.
    Saludos.

    ResponderEliminar
  5. Ahora entiendo como funciona el "Simulador de Mariano Rajoy y sus frases tontas" que hay en http://www.solosequenosenada.com/2010/05/27/generador-de-discursos-tontos-de-rajoy-de-manera-automatica/ supongo que debe utilizar técnicas parecidas a las que explicas en tu artículo.

    Por cierto, he encontrado tu artículo muy interesante, ojalá sigas desarrollando experimentos como el que nos muestras.

    ResponderEliminar
  6. Gracias a esta web he podido crear mi primer generador: http://2013tiendas.wix.com/hil100

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...