Cosas sobre Chatbots

Antes de empezar, me gustaría dar las gracias a @miki que ha sido el que me ha sugerido que hiciera este artículo. Para que el artículo no pareciese insulso he hecho además un pequeño chatbot para jugar, si no quieres leer todo este post tan largo, ve al final y verás los diferentes enlaces para diferentes plataformas.

Qué son los chatbots

Una posible definición la da Amir Shevat, de Slack:

Los bots son usuarios digitales en un producto de mensajería. A diferencia de la mayoría de usuarios, son alimentados por software en lugar de por un ser humano, y nos ofrecen un producto o servicio dentro de esa mensajería mediante la conversación.

Historia de los chatbots

Actualmente hay mucho hype acerca de los chatbots, y todas las grandes empresas están metidas de una u otra manera en proyectos de este tipo, lo cual está generando una demanda en el mercado bastante interesante. Pero, ¿está este hype justificado? ¿Son algo realmente novedoso?

El primer chatbot se llamaba Eliza, y se remonta a 1966 (aunque se empezó a programar en 1964). Fue ralizado por Joseph Weizenbaum en el MIT. Si quieres probar una versión moderna de Eliza puedes hacerlo aquí.

Otra cosa que se considera moderna y novedosa son los agentes de voz, como Siri, Cortana, Amazon Echo, Google Home,... Pero el primer chatbot que tenía bot sintética fue el Dr. Sbaitso, que venía con la tarjeta de sonido Soundblaster desde 1992. Si quieres probarlo, puedes hacerlo aquí.

También en el año 1992 comenzaba una era dorada de los chatbots, gracias al IRC. Fue la primera vez que yo recuerde que se usó ChatOps, es decir, utilizar bots para realizar tareas de operativa de una plataforma, con chatbots como X y W (los dos primeros que conocí en Undernet), Argobot, Scytale, Chan, Memo y Nick. Además de los bots hechos por usuarios que hacían desde cosas tan curiosas como organizar partidas de trivial pursuit, decir citas, hasta hacerse pasar por chicas para ligar.

Y luego hubo un bot al alcance de todos y que todos llegamos a odiar... Clippy, el asistente de Microsoft Office, y que conocimos en 1997.

Si los bots existen hace tanto, ¿por qué ahora se hacen famosos?

Si podemos encontrar una causa principal, es que a la gente le gusta cada vez más chatear. En el IRC los bots se usaban de manera natural y cotidiana, pero no había tanta penetración del IRC en la población mundial como la que hay hoy en día de todas las plataformas de chat. Y es que a la gente le gusta tanto chatear que en el 2015 la cantidad de usuarios activos en las principales plataformas de chat superó a los activos en las principales plataformas sociales.

Por otro lado, somos animales sociales, pero en algunos países más que en otros. Para entenderlo, esta gráfica nos dice el tiempo promedio por país que la gente consume en redes sociales o chats.

Otro gran motivo es el avance en inteligencia artificial: los bots de los años 90 entendían "indio". Incluso los agentes de webs como el famoso de Ikea usaban infumables sistemas de reglas que requerían mucho desarrollo y mantenimiento y salían caros. Hoy en cambio con los sistemas NLP (Natural Language Processing), por ejemplo API.ai (Google), Wit.ai (Facebook) o LUIS.ai (Microsoft) sale mucho más sencillo y barato. Y como regalo de la evolución de la inteligencia artificial, os regalo la famosa perro o muffin:

Otro gran motivo ha sido la inversión de grandes empresas como WeChat, Facebook o Microsoft en añadir elementos del interfaz con el usuario más avanzados, que ayudan a la experiencia de usuario.

¿Es complicado hacer un bot?

Bueno, la respuesta es compleja. Hay plataformas que te permiten hacer bots con mucha facilidad, por ejemplo API.ai, y que además son gratuitas totalmente. El problema viene cuando quieres hacer cosas más complejas, en ese momento no te queda otra que remangarte y programar. Pero por lo generar la complejidad es bastante baja a nivel de desarrollo, pero más elevada a nivel de UX para diseñar mejor la "Persona" (personalidad del bot) y la interacción con el usuario.

Eso del NLP no lo entendí, ¿qué es?

Básicamente consiste en entender, a partir de una frase de un humano, lo que quiere decir. En NLP existen tres conceptos fundamentales: utterance, intent y entity.

  • Utterance es la frase tal y como un humano la dice, por ejemplo "quiero viajar a Berlin el 6 de noviembre". Dichas frases se pueden decir de más maneras aun cuando quieres decir lo mismo: "me gustaría viajar a Berlin a partir del 6 de noviembre".
  • Intent es la intención de la frase, lo que vendría siendo el verbo, en el caso del ejemplo "viajar" (el nombre del intent lo inventamos nosotros)
  • Entity son los parámetros, es decir, la información que podemos extraer, y el proceso de extracción se denomina NER (Named Entity Recognition). En el ejemplo podríamos extraer el destino (Barcelona) y la fecha de inicio (6 de noviembre).

¿Y en serio eso del NLP que es machine learning es gratis?

Efectivamente, hay muchos de ellos gratis. Pero ojo a los términos y condiciones, que estás firmando un pacto con el diablo. Si estás haciendo un bot de juguete, no hay ningún problema. Cuando estás haciendo un bot de una empresa, no te interesa que información privada de los usuarios viaje a esas plataformas dado que estarías incumpliendo la ley. Por eso en proyectos más serios en lugar de usar un servicio en la nube, se hacen despliegues dentro de la empresa, por ejemplo de RASA.ai, que es opensource. Si ya estás buscando algo más a medida o lenguajes no soportados, te toca programar las reglas del lenguaje, pero NLTK te puede ayudar mucho.

¿Y cuánto me puede costar desplegar un bot?

En principio por 0 euros puedes empezar y tener tu bot online. Si no necesitas base de datos, eso que te ahorras, si la necesitas puedes pedir Sandbox de mongodb de 500MB en Amazon, Google o Microsoft a través de mlab. Y para desplegarlo hay plataformas para desplegar gratis, por ejemplo Heroku.

Al principio hablabas de un bot para probar...

Ok, vamos a ello. Lo primero, cuando fui a desplegarlo en Telegram me encontré que había otro con nombre similar (le llamé meneante) desarrollado por @ersiko. Lo siento, no sabía nada, habría escogido otro nombre.

¿Qué hace el bot? Básicamente es el FAQ de menéame más algunas frases de cuñao. Os pongo un ejemplo:

Pero además he dejado abierta la posibilidad de que podáis entrenarle para contestar a lo que queráis. Simplemente usad el comando "entrenar". Os pongo otro ejemplo:

Y no me demoro más, cómo probar el bot:

Web: meneante.herokuapp.com/

Telegram: busca al usuario meneante_bot

Skype: join.skype.com/bot/33c3a884-625c-4bfd-ab92-f8dfa1390945

Slack: slack.com/oauth/authorize?scope=bot&client_id=152591846004.2419750