Cómo crear bots conversacionales

myBotEstoy trabajando en un proyecto personal para acercar la inteligencia artificial a todo el mundo. Se trata de un editor de bots conversacionales. El proyecto se llama myBot, y podéis probarlo aquí.

También os había prometido detalles técnicos. A continuación os cuento un poco cómo funciona. El motor de todo el sistema es una red de neuronas recurrente. Más específicamente, una red con neuronas (o células) LSTM. La principal ventaja de este tipo de redes es que poseen memoria. Son capaces de recordar información que recibieron en su entrada anteriormente. Por eso mismo, se utilizan con frecuencia para reconocer secuencias de datos.

Si recordáis el artículo sobre Deep Learning, las redes de neuronas convencionales (feed forward) se entrenan con ejemplos que son pares [entrada, salida], de forma que si a la red le presentamos esa entrada, nos gustaría que produjese la salida que le hemos enseñado. Si recordáis, lo primero que tenemos que decidir, es cómo codificar entrada y salida como listas fijas de números. ¿Pero qué sucede si intentamos aplicar este modelo a secuencias de datos, como por ejemplo las secuencias de caracteres en frases o párrafos? Pues que hay que empezar a usar hacks, para adaptar secuencias de longitud variable a una red con longitudes fijas.

Aquí es donde entran las redes recurrentes. Dado que son capaces de recordar las entradas anteriores, no es necesario hacer ningún hack. En el ejemplo de las frases (que es lo que se hace en myBot), damos a la red un caracter a la entrada, y luego otro, y luego otro, y así sucesivamente. Cada vez que la red recibe una entrada, producirá una salida, con lo cual, la salida también es una secuencia!

¿Y cómo entrenamos una red así? Pues ahora, los ejemplos de entrada y salida no son dos vectores con números, sino dos secuencias de vectores (posiblemente de distinta longitud). Uno de los algoritmos más utilizados para entrenar este tipo de redes se llama Propagación hacia atrás a través del tiempo (BPTT). No os voy a aburrir con los detalles, pero si os interesa más información que lo que sale en la página de Wikipedia, dejadme un mensaje y os contesto con más referencias.

¿Qué podemos hacer con una red como esta? Prácticamente cualquier cosa que tenga que ver con secuencias. Por ejemplo, asociar preguntas con respuestas, de forma que dada una pregunta, la red produzca una respuesta. Estaréis pensando, ¡seguro que eso es lo que hace myBot! Pues no exactamente, en myBot se utiliza la red recurrente sólo con el objetivo de clasificar las preguntas según el grupo al que pertenecen. A continuación se proporciona una de las respuestas definidas por el usuario. De esta forma, no hay sorpresas cuando la red genera gramáticas divertidas, o palabras que no existen.

Alguien se preguntará, si simplemente se reconocen preguntas y se elige una respuesta, ¿qué valor proporcionan las  redes de neuronas recurrentes? El valor que proporcionan es que modelan el lenguaje y son capaces de reconocer incluso preguntas que nadie les ha enseñado, y son muy resistentes a errores tipográficos. Esto lógicamente funciona mucho mejor cuantas más preguntas y variaciones se le enseñen al bot. Como todas las redes de neuronas, son una herramienta estadística. Cuanta más información consumen, más habilidad tienen para reconocer patrones y encontrar la información que es realmente importante.

El mundo de las redes de neuronas recurrentes es algo más enrevesado que las redes convencionales, pero si hay suficiente interés, puedo escribir un artículo de divulgación más detallado explicando cómo funcionan y cómo se entrenan. ¡Ya me contaréis!

Mientras tanto, probad mybot.be y compartid vuestras creaciones, tengo curiosidad por ver lo que sois capaces de hacer con la herramienta 🙂

Anuncios

Acerca de Rubén L.

Software Engineer
Esta entrada fue publicada en Uncategorized. Guarda el enlace permanente.

4 respuestas a Cómo crear bots conversacionales

  1. fernando dijo:

    Hola Rubén, estoy preparando una charla sobre inteligencia artificial y me gustaría mostrar tu bot (mybot.be), la audiencia no es especializada, sería una introducción. asimismo me gustaría conocer lenguaje y herramientas del bot, gracias fernando folla

  2. Rubén L. dijo:

    Hola Fernando,

    Es un honor que menciones myBot en tu charla! Se trata de una webapp para crear chatbots, donde también se pueden publicar. Si lo que te interesa es enseñar un chatbot concreto, te recomiendo Arturito (https://mybot.be/chat/EJEMPLO), que es uno de los más completos en español dentro de la plataforma.

    En este artículo donde comentas tienes los detalles técnicos de cómo funciona la parte de IA. La webapp está programada en Javascript (incluida la red de neuronas), usando angularjs para la interfaz y firebase para el hosting y base de datos. Ya me contarás si necesitas algún detalle más.

    Un saludo

  3. Hola Ruben, te encontré por tu artículo de deep learning, sería fantástico que escribas un artículo sobre los proyectos de IA en el mundo y cómo los recientes desarrollos de hardware de Google y Nvidia van a repercutir en ello. Saludos!

  4. t4h4wk dijo:

    Muy bueno tu proyecto. A ver si aprendo un poco de IA. Conoces algún tutorial que pueda seguir para aprender a programar una lstm? Me recomiendas alguna libreria?
    Saludos!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s