Cuando me encargaron por primera vez la tarea de crear un chatbot, no tenía idea de cómo comenzar. Mi experiencia en Machine Learning de concentraba principalmente en Visión Artificial y Redes Neuronales, nunca había experimentado con Lenguaje Natural.

Sabía que se tiene que procesar el texto y producir un mensaje con base en esto, pero desconocía las técnicas apropiadas.

Teniendo conocimientos de Python, investigué las opciones disponibles para la creación de asistentes en dicho lenguaje, y entonces encontré Rasa.

Introducción

Rasa es un framework para la creación de asistentes y chatbots, escrito en Python y de código abierto. Basa su funcionamiento en dos componentes principales, NLU y Core:

  • NLU es la parte encargada de tomar el texto, analizarlo y descomponerlo de tal manera que el bot comprenda el contenido del mensaje.
  • Core es la parte encargada de tomar decisiones y dar seguimiento a la conversación según lo que NLU provee.

Ambos elementos utilizan técnicas de aprendizaje de máquina.

Si tienes experiencia en aprendizaje de máquina será más fácil que comprendas los pasos siguientes, de lo contrario, no te asustes, no tendrás que escribir código, Rasa es muy fácil de configurar.

Antes de empezar

Para utilizar este bot debes instalar RASA, puedes utilizar pip para hacerlo. Personalmente utilizo la versión 1.10.1, pero no debería haber problema con las versiones, al menos para este ejemplo.

De igual manera he preparado un Dockerfile con lo necesario para ejecutar este bot. Puedes ver todo el código original en mi repositorio.

Configuración y entrenamiento

Aunque no lo creas, este primer bot será creado con tan sólo 4 archivos. Sí, no es broma, para la creación de este chatbot básico (al que Rasa llama Moodbot) necesitaremos 4 archivos. Cada uno de ellos nos ayudará a entender mejor el funcionamiento de Rasa.

nlu.md

En este primer archivo describiremos la manera en la que el bot comprenderá el texto. Aquí enlistaremos los intents, que son las intenciones o propósitos que buscaremos captar del usuario, por ejemplo, el mensaje “buenos días” tiene como intención “saludar”, mientras que el mensaje “¿cómo estará el clima mañana?” tiene la intención “consultar clima”.

Para cada intent que se busque clasificar se deberán proporcionar textos de ejemplo, a través de los cuales el bot se entrenará. El formato a utilizar es el siguiente:

intent:afirmar

  • si claro
  • por supuesto
  • ok
  • afirmativo
  • así es
  • sin duda

intent:negar

  • No
  • para nada
  • no me gusta
  • Nunca
  • Claro que no
  • jamás
  • no no no
view raw01_nlu.md hosted with ❤ by GitHub

stories.md

En este archivo se escriben las interacciones entre el bot y el usuario con las que se entrenará el asistente. Se deben incluir múltiples ejemplos de “historias”, con el objetivo de que el bot pueda decidir cuál es la mejor acción a tomar después de una interacción con el usuario.

Los intents del usuario se colocan con asteriscos (*), mientras que las acciones o mensajes del bot se escriben con guiones (-). Las historias pueden tener títulos, sin embargo estos no afectarán el entrenamiento. El archivo debe mantener el siguiente formato:

camino feliz

  • saludo
    • utter_saludo
  • humor_bien
    • utter_feliz

camino infeliz

  • saludo
    • utter_saludo
  • humor_mal
    • utter_animo
view raw01_stories.md hosted with ❤ by GitHub

domain.yml

En este archivo debemos registrar todos los intents que buscaremos captar del usuario, así como los mensajes (utterances) y acciones (actions) que el bot realizará. Aquí es donde definiremos el texto que contendrán los mensajes que incluimos en las interacciones de stories.md. A continuación un ejemplo de este archivo:

 

Si te das cuenta, incluso se pueden incluir imágenes en las respuestas que proporcionará el bot.

config.yml

Por último tenemos el archivo de configuración. Aquí se definirá el pipeline, que son los procesos que se le aplicarán al texto de entrada para que el bot pueda usarlo. Cada parte del pipeline es un componente diferente que ayuda en las tareas de Lenguaje Natural, por ejemplo:

  • Tokenizers: la tokenización consiste en separar el texto en entidades llamadas tokens, para facilitar el procesamiento de este.
  • Featurizers: estos componentes convierten texto en features, que son representaciones numéricas del texto, para su uso en otros algoritmos.
  • Classifiers: los clasificadores se encargarán de decidir a qué intent se refieren los mensajes del usuario.

De igual manera, en este archivo se listan las políticas (policies) bajo las cuales se regirá la conversación. Cada política tiene un principio de funcionamiento diferente, y la combinación de ellas hace que el bot sea más robusto y pueda tomar mejores decisiones. Ejemplos de policies son los siguientes:

  • TEDPolicy: usa una red neuronal recurrente para predecir la mejor acción a tomar, basándose en las historias de entrenamiento.
  • MemoizationPolicy: decide la acción siguiente si las interacciones previas ocurrieron en las historias de entrenamiento.
  • MappingPolicy: ejecuta acciones basadas en “mapeos”; se pueden programar acciones específicas cuando se encuentren ciertos intents.

Ejecución

Con estos 4 archivos listos, podemos proceder a utilizar el bot por primera vez. Empezaremos por entrenar el bot.

rasa train

Con este comando entrenarás tanto la parte NLU como la parte Core del chatbot. Después de un momento, cuando finalice el entrenamiento, podrás usar el siguiente comando:

rasa shell

Con este último podrás interactuar con el chatbot a través de la línea de comandos. Puedes experimentar un poco y ver qué responde ante respuestas diferentes, aunque toma en cuenta que este ejemplo es muy simple.

Docker

Si te interesa ejecutar el chatbot en Docker, he creado en el repositorio para este tutorial un archivo Dockerfile.

La imagen de la cual partimos es una que yo he creado, la cual contiene el modelo de lenguaje de español, que es útil para obtener features en el pipeline. Los pasos restantes son añadir los archivos y entrenar el modelo.

Puedes construir la imagen con el comando:

docker build -t moodbot-es .

Y ejecutarlo con:

docker run -it --entrypoint rasa moodbot-es shell

Aquí puedes encontrar la segunda parte de este tutorial.

Espero que este tutorial te haya sido de utilidad. Escribiré más tutoriales de RASA en español en el futuro. Por lo pronto, visita mi GitHub:

jaimeteb – Overview

Dismiss Sign up for your own profile on GitHub, the best place to host code, manage projects, and build software…

github.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *