lunes, 6 de junio de 2016

Diarios de desarrollo de Habla con Cervantes 1: Aleatoriedad percibida en chatbots

Tal como comentamos en nuestra entrada sobre aleatoriedad percibida, confiar en números aleatorios con el objetivo de ofrecerle al usuario una experiencia lo más diversa posible, con frecuencia puede jugarnos malas palabras. En esta ocasión, vamos a ver una aplicación práctica de esta teoría al campo en el que ahora estamos trabajando, los bots de conversación.

Imaginemos que escribimos la siguiente regla:

{Eso que&Lo que} {señalas&comentas&dices}, ¿es una interpretación tuya?

Para quién no esté versado en la sintaxis que utiliza nuestro bot y que puede consultarse en las completas instrucciones que hay en nuestra página web dedicada al proyector Mentor, basta con saber que los corchetes sirven para indicar varias posibilidades separándolas con ampersands, de manera que se elige al azar una de ellas.

Es decir, cuando el bot muestre la salida anterior, elegirá al azar entre Eso que y Lo que, para luego añadirle señalas, comentas o dices, también al azar. Por tanto, con apenas una línea, hemos creado 2 × 3 = 6 posibilidades. Una gran variedad con un esfuerzo mínimo... ¿o no?

Basta con forzar al bot a que recurra una y otra vez a esta regla para ver que los resultados no son exactamente los esperados, como podemos ver a continuación.



Aunque los resultados no son malos, podemos ver que hay tres ocasiones en las que el bot responde Lo que dices, ¿es una interpretación tuya? Con seguridad, alguien pensará que ha sido una cuestión de mala suerte, pero basta con repetir este experimento con una secuencia de números aleatorios para encontrarse con un problema similar.

El problema reside en que los números aleatorios son, pues eso, aleatorios y no hay ninguna norma que establezca que el mismo número no se puede repetir dos, tres o cien veces, porque existe la posibilidad, aunque mínima, de que esto ocurra. Sin embargo, el usuario sencillamente pensará que el bot repite respuestas.

Afortunadamente, se trata de un problema con una solución muy sencilla. Basta con dividir la regla anterior en dos reglas, que se muestren de manera consecutiva:

Eso que {señalas&comentas&dices}, ¿es una interpretación tuya?
Lo que {señalas&comentas&dices}, ¿es una interpretación tuya?

Así conseguimos que en las ocasiones impares, el bot muestre Eso que..., y en las pares, Lo que... Hemos elegido estas palabras para realizar la diferenciación porque son visualmente más evidentes. De esta manera, trabajamos con las mismas seis posibilidades que antes, pero el orden en el que se muestra ya sigue cierto patrón, como podemos ver a continuación.



Se puede objetar que la aparición alternante de Eso que... y Lo que... es de todo menos aleatoria, pero será más difícil de percibir para el usuario, que en este caso, jamás se encontrará con dos respuestas seguidas que sean exactamente iguales.

Esta técnica resulta muy útil para escribir bots que sea más sorprendentes y, a fin de cuentas, no es más que una puesta al día del famoso Eliza de Joseph Weizenbaum que, dadas las importantes limitaciones de los ordenadores en aquella época, consiguió unos resultados lo suficientemente buenos como para embaucar a varios usuarios.
Por ejemplo, cuando el bot  detectaba una palabra de otro idioma, por ejemplo, el francés, mostraba sucesivamente las siguientes dos reglas.

No hablo francés.
 Ya te he dicho que no hablo francés.

Con estas dos reglas solo, se garantizaba que el usuario no recibiese nunca dos veces seguidas la misma regla y tenían un tono ligeramente distinto que hacía pensar que el bot realmente recordaba lo que se había dicho durante la conversación. Y es que tratándose de aleatoriedad pasa un poco como con la lluvia en el cine: la auténtica no da bien en pantalla.