VT2019 Rasa

From air
Jump to navigation Jump to search
Logo de Rasa

Rasa est un framework open-source composé de deux librairies. Rasa NLU (Natural Language Understanding) qui est une librairie permettant de comprendre le langage naturel, et Rasa Core qui permet de gérer les réponses d'un chatbot. Ce framework permet de développer des chatbots capable de comprendre le contexte d'une conversation, de répondre à des variantes d'un même message ainsi qu'à des messages non prévus, et capable d'apprendre de ses conversations et de s'améliorer au cours du temps.

Abstract

Rasa is an open-source framework composed of two machine learning tools for developers to create contextual AI assistants and chatbots. Rasa NLU, a library for natural language understanding with intent classification and entity extraction, and Rasa Core a framework capable of dialogue management. This framework makes it possible to develop chatbots that are able to understand the context of a conversation, capable of understanding and responding to different and unexpected inputs, and are able to learn from previous conversations and improve in accuracy over time.

Rasa

Rasa NLU

Exemple de décomposition d'une phrase en intentions et entités

Le NLU (Natural Language Understanding) est la pièce maîtresse d’un chatbot intelligent. C’est cet outil qui va analyser l’entrée de l’utilisateur pour en identifier l’intention et extraire les entités.


Voici un exemple pour mieux visualiser à quoi correspondent ces éléments. L’utilisateur va saisir la phrase

"Je veux prendre rendez-vous avec mon banquier pour lundi"

et le NLU va retourner une donnée structurée de cette manière :

{ 

 "intent" : "creation_rendez-vous" ,

"entities" : { 	

    "conseillé" : "mon banquier" , 

  "date" : "lundi" 

    }

}

Ce sont ces données qui vont par la suite être traitées par RASA Core afin de répondre à l'utilisateur en fonction des actions disponibles et de son modèle.



Afin d’extraire les intentions d’un message, le NLU va être entraîné grace à une pipeline traitant des jeux de données contentant des intentions et leurs formulations possibles. C’est grâce à l’intelligence artificielle que la librairie va construire son modèle, qui sera par la suite utilisé afin de determiner avec un pourcentage de certitude quelle est l’intention du message, et quelles en sont le entités.

Ce modèle est destiné à évoluer. Grace au machine learning, lors du l’utilisation du chatbot, les training data grossissent et permettent au modèle de gagner en precision.

Une pipeline définit différents composants qui traitent un message utilisateur de manière séquentielle et conduisent finalement à la classification des messages utilisateur en intentions et à l'extraction d'entités.


Il existe 2 pipelines majeures déjà crées avec RASA. C’est à l’utilisateur de choisir laquelle utiliser pour entraîner son modèle. Il peut également fabriquer ses propres pipelines pour répondre à des besoins spécifiques.

La première pipeline est pretrained_embeddings_spacy:


Elle est basée sur SpaCy et Scikit-Learn, deux librairies Python de machine learning utilisées comme NLP (Natural Language Processing).


L’avantage principale de cette pipeline est qu’elle fonctionne bien même lorsque que le jeu de données ne contient pas beaucoup d’exemples. En revanche, son point faible est sa difficulté avec le vocabulaire technique, propre au domaine.


La deuxième pipeline est supervised_embeddings : 


Elle est basée sur TensorFlow, la librairie open source de machine learning développée par Google. C’est une des plus connue. Cette pipeline va uniquement se basé sur le jeu de donnée. Pour assurer un bon fonctionnement de l’entrainement, il est recommandé d’utiliser plus de 1000 exemples de formulation par intention. 


Ces points forts sont sa légèreté, la pipeline est très simple. Mais également ses performance avec du vocabulaire spécifique au domaine. En revanche, le point faible est la nécessité d’une quantité énorme d’exemple afin d’obtenir de bon résultats.

Rasa Core

Fonctionnement de la stack Rasa

Rasa Core est un framework qui permet d'effectuer la gestion des dialogues. Une fois les messages de l'utilisateurs analysés et l'intention de ces derniers comprise, Rasa Core se charge d'effectuer des actions et de répondre à l'utilisateur par des actions ou des dialogues.

L'aspect principal de Rasa Core est la notion de domaine. Le domaine est l’environnement dans lequel le chatbot évolue. Il est composé d'intentions, d'entités, de "slots", et d'actions que le chatbot connait. Il peut également être composé d'un template qui est une liste des choses que le bot peut dire. Un domaine se présente sous la forme suivante :

intents:
  - greet
  - goodbye
  - affirm
  - deny
  - saluer
  - inform

actions:
- utter_greet
- utter_demander_cuisine
- utter_demander_nbpeople
- utter_demander_aide

templates:
  utter_greet:
  - text: "Bonjour ! Comment allez-vous ?"

  utter_demander_cuisine:
  - text: "Quel type de cuisine recherchez-vous ?"

  utter_demander_nbpeople:
  - text: "Pour combien de personnes ?"

  utter_demander_aide:
  - text : "Comment puis-je vous aider ?"


Les réponses du bot vont être déterminées grace aux Stories.

## saluer + lieu/prix + cuisine + nb personne   <!-- nom de la story - juste pour le debugging -->
* saluer
   - utter_demander_aide
* inform{"lieu": "rome", "prix": "faible"}  	<!-- message de lutilisateur, an format intention{entitié} -->
   - utter_demander_cuisine
* inform{"cuisine": "espagnole"}
   - utter_demander_nbpeople        		    <!-- action que le bot doit exécuter -->
* inform{"personne": "six"}
   - action_ack_dosearch

Une story peut être vue comme une conversation. Les message envoyé par l'utilisateur sont représentés par des lignes débutant par une étoile :

* saluer

Dans cet exemple, le message de l'utilisateur contient l'intention saluer

Puis, l'action à effectuer par le bot lorsque qu'il reçoit cette intention est représentée par des lignes débutant par un tiret :

   - utter_demander_aide

Dans cet exemple, le bot va effectuer l'action utter_demander_aide, et aller chercher dans le fichier domain.yml le texte associé à renvoyer.

Rasa X

Interface de Rasa X

Rasa X est une interface graphique qui permet de manipuler faciliter l'entrainement des bots et la collecte des données. Rasa X peut tourner en local, ou être déployé sur un serveur afin de la rendre disponible à des testeurs par exemple. Rasa X peut être utilisé pour développer un chatbot de 0, ou pour améliorer et entraîner plus facilement un chatbot existant. Pour arriver à ce but Rasa X propose différentes fonctionnalités :

  • Visualiser et annoter les conversations : L'interface permet de visualiser les conversations et de filtrer, annoter et corriger les conversations qui ne se sont pas bien déroulées. Cela permet de pouvoir améliorer continuellement le chatbot.
  • Obtenir des commentaires de testeurs : Rasa X permet de pouvoir partager son chatbot avec des testeurs afin de pouvoir recevoir leur feedback, et obtenir plus de données d'entrainement.
  • Gestion des versions des modèles : L'interface permet de facilement changer de modèle ou de version d'un modèle, afin de pouvoir revenir en arrière. Ou pour pouvoir avoir un modèle stable pour la production par exemple.
  • Déployer : Facilite le déploiement de chatbots en proposant des conteurs Docker prêt à déployer.

Démonstration

Une démonstration de Rasa et de Rasa X est accessible à ce lien : VT2019 Rasa Demo

Sources

Veille Technologique 2019