intent:afirmar
- sí
- 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
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.
Tabla de contenidos
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:
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.
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.
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.
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:
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:
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.
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:
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:
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.
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:
github.com
Buenos días
¿Es posible crear botones en rasa? Si es posible ¿Alguna documentación? Gracias