Intelligence artificielle

Les chatbots sont cool! Un framework utilisant Python Part 1: Vue d'ensemble

Les chatbots sont cool! Un framework utilisant Python Part 1: Vue d'ensemble


Qu'est-ce que Chatbot?

Chatbot est un outil permettant de récupérer des informations et de générer une conversation humaine. Il s’agit principalement d’un système de dialogue destiné à résoudre / servir un objectif spécifique. Selon la conception, les chatbots se divisent généralement en 4 catégories.

Crédit - Types de Chatbot.
Domaine ouvert

Les bots Open Domain sont autrement appelés bots généralistes. Aujourd'hui, nous utilisons Alexa, Google Home, Siri, Cortana, qui entrent dans cette catégorie (domaine ouvert / base générative). Ces robots tentent d'imiter une conversation à la manière d'un homme. Là encore, il répond aux questions (comme les FAQ) posées par la plupart des humains. Cependant, ils ne peuvent pas répondre à une question de domaine spécifique. Par exemple: Quelle a été la performance de la division des ventes de mon entreprise au cours du dernier trimestre? C’est l’une des raisons pour lesquelles il est impossible de construire des robots basés sur un domaine ouvert / une récupération.

Domaine fermé

Les bots de domaine fermés sont autrement appelés bots spécialisés. Selon le type, il peut être facile à développer (basé sur la recherche) ou difficile (basé sur la génération). Le bot décrit dans cet article est un bot spécialisé qui relève de la catégorie domaine fermé / récupération. Les autres robots de cette catégorie comprennent: - commander une pizza, réserver des vols / restaurants / hôtels / rendez-vous. D'autre part, les robots génératifs incluent les chatbots du service client qui essaient de s'imiter comme un agent tout en répondant aux questions du client. Ces robots sont difficiles à construire car ils essaient de faire croire au client qu’ils parlent à un humain.

Comment fonctionnent les chatbots?

Les chatbots doivent comprendre les éléments suivants pour répondre à une question d'un utilisateur.

  1. De quoi parle l'utilisateur? (Intention)
  2. L'utilisateur a-t-il mentionné quelque chose de spécifique? (Entités)
  3. Que devrait demander le bot pour obtenir plus de détails de l'utilisateur? (Contexte de dialogue / maintenance)
  4. Comment répondre à la demande de l'utilisateur? (Réponse / accomplissement)

Utilisons un exemple de Flight Bot illustré ci-dessous pour comprendre chacune de ces pièces en détail. L'utilisateur dit «Je veux réserver un billet entre New York et Seattle, qui partira le 15 septembre et qui reviendra le 19 septembre pour 2 personnes».

Crédit: Flight Bot
Intention

L'intention de l'utilisateur est de réserver des vols.

Entités

Les entités sont également appelées mots-clés ou emplacements. Ici, il y a plusieurs entités.

De - New York, à - Seattle

To - Seattle

Date de départ - 15 septembre

Date de retour - 19 septembre

#personnes - 2

Dialogue / Maintien du contexte

Les dialogues sont une communication réciproque entre le bot et l'utilisateur. Un contexte permet au bot de savoir dans quel état se trouve le bot. Il existe trois états: Précédent, Présent et Futur. Lorsque l'utilisateur ouvre la boîte de dialogue, le bot réitère l'itinéraire de l'utilisateur, puis vérifie auprès de l'utilisateur «Ces informations sont-elles correctes?». Ici, l'état précédent est vide, l'état actuel est «validation de l'utilisateur» et l'état futur est «Fournir une réponse basée sur la validation de l'utilisateur». Lorsque l'utilisateur répond «Oui», l'état du bot devient «Validation de l'utilisateur», «Fournir une réponse basée sur la validation de l'utilisateur» et «Réserver un vol» pour les états Précédent, Présent et Futur, respectivement. Sans maintenir le contexte, les robots ne peuvent pas établir la communication en avant et en arrière. Dans l'exemple du bot de vol, si le contexte n'est pas maintenu, le bot demande «Est-ce que cette information est correcte?» Jusqu'à ce que l'utilisateur abandonne.

Réponse / accomplissement

Répondre à la demande de l'utilisateur est la dernière étape de la conversation. Ici, le bot fournit les résultats sous forme de liens "Voir tous les résultats". Ainsi, lorsque l'utilisateur cliquera sur le lien, il pourra voir les vols et faire une réservation.

Les robots génératifs utilisent l'IA et l'apprentissage de la machine pour générer des réponses des utilisateurs. Ils n'ont donc pas besoin de comprendre les intentions et les entités pour répondre à un utilisateur.

J'ai trouvé cet article qui couvre de nombreux sujets dont nous avons discuté jusqu'à présent, ainsi que les frameworks de bot que vous pouvez utiliser pour construire des chatbots. C'est une bonne lecture.

Mettons-nous au travail

Bon, maintenant il est temps de déployer le bot vidéo Kelly. C'est un simple bot qui répond aux questions sur les films. L'utilisateur peut poser des questions sur les classements, #les personnes ont voté pour le film, le genre, la présentation du film, les films similaires, les liens imdb et tmdb, le budget, les revenus et le contenu réservé aux adultes. Le jeu de données pour cet exercice provient de Kaggle - movies_metadata. Le code complet de ce projet se trouve dans Github.

Comme je l'ai déjà dit, tout le framework est modularisé. Nous allons donc couvrir chacun à la fois. Dans cet article, nous allons parler de la conception et du programme de bot principal qui se connecte à différentes pièces. Par souci de brièveté, je n'ai abordé que les informations clés de l'article. Le lien Github contient toutes les instructions pour configurer le bot et l’exécuter.

Kelly Design

Kelly Design

Étape 1 (l'utilisateur pose la question):

Les utilisateurs peuvent interagir avec Kelly via Slack. Une fois que l'utilisateur a posé une question, celle-ci est transmise au système dorsal pour analyse.

Étape 2 et 3 (traitement de la PNL et renvoi des résultats de la PNL):

Tout le traitement en langage naturel a lieu à l'étape 2. Cela inclut le traitement IBM Watson, la recherche de similarité et la recommandation basée sur le filtrage collaboratif. Une fois le traitement de la PNL terminé, nous en avons trois résultats:

  1. Intentions - Qu'est-ce que l'utilisateur essaie de demander ou d'interroger?
  2. Entités - Quel est le champ ou la colonne exacte qu'ils recherchent?
  3. Dialogue / Interaction - Fournissez la demande / réponse appropriée pour la question de l'utilisateur.

Étape 4 et 5 (interroger les données):

Actuellement, les données résident dans un fichier Excel. Cependant, vous pouvez ajouter plusieurs bases de données / fichiers Excel si nécessaire pour accéder à différentes sources. En fonction des résultats de l'étape 3, le fichier de base de données / excel approprié est interrogé et les résultats sont renvoyés.

Étape 6 (Publiez le résultat sur l'utilisateur):

Les résultats obtenus à partir du backend sont envoyés à l'utilisateur via Slack.

Étape 7 (Maintenance du journal):

Les interactions entre les utilisateurs sont enregistrées et stockées dans un fichier texte. De plus, si le bot n'est pas en mesure d'identifier les questions des utilisateurs, il les ajoutera à un fichier de suivi.

Main.py

Importations de colis

Comme d'habitude, nous définissons le programme en important les packages. Remarquez quelque chose, où il est écrit "slack.slack_commands" et "nlp.nlp_commands". Cela importerait les programmes python slack_commands et nlp_commands du dossier slack et nlp respectivement. De plus, quelques fonctions du fichier de configuration sont importées.

Initialisation des variables

Le contexte utilisateur est maintenu dans la variable «context». Une fois le chat démarré, la variable de contexte générée par IBM Watson se présente comme suit:

{'conversation_id': '76e59c57-8257-4390-ae15-ba75e7576476',
'system': {'_node_output_map': {'node_2_1541443578896': [0]},
'branch_exited': Vrai,
'branch_exited_reason': 'terminé',
'dialog_request_counter': 1,
'dialog_stack': [{'dialog_node': 'root'}],
'dialog_turn_counter': 1,
'initialized': True}}

Il possède un «id_conversion» utilisé pour suivre l'état (état précédent / présent et futur) du flux de conversation. Au début de la conversation, il est affecté à une valeur de dictionnaire vide.

En plus de maintenir une conversation, nous devons également informer le bot du moment où il doit arrêter une conversation. Ceci est réalisé par la variable "current_action". Un exemple de fin d'une conversation est présenté ci-dessous. Chaque fois que l'utilisateur invoque une intention "Au revoir" (nous en discuterons plus en détail dans Part4: PNL utilisant IBM Watson), le bot affecte la variable "end_conversation" à la variable "current_action". Plus tard dans le programme main.py, cette variable sera évaluée pour réaffecter les variables context, current_action et session_df.

{'actes':[{'name':'end_conversation'[{'name':'end_conversation'
'result_variable': 'null',
'type': 'client'}],
'output': {'text': {'selection_policy': 'random',
'valeurs':['Àplustard'['Seeyoulater'
'Ciao',
'Au revoir',
'S'amuser',
'Peace out, mon pote',
'Au revoir']}}}

Une autre variable clé est la trame de données «session_df». Lorsqu'un utilisateur entame une conversation avec le bot, une session est créée. Cela garantit que le contexte entre un utilisateur et le bot est géré par utilisateur. Lorsqu'un même utilisateur parle au bot sur plusieurs canaux, ils sont également traités comme des sessions différentes. Donc, il n'y a pas de chevauchement dans la conversation entre bot et utilisateur.

Lorsqu'un utilisateur pose une question aléatoire que le bot ne peut pas gérer, il va déclencher la procédure «follow_ind» pour écrire la question dans un fichier texte de suivi. Pendant le début de la conversation, il est attribué à 0. Les deux dernières variables "bot_id" et "RTM_READ_DELAY" correspondent à un temps mort. Lorsque le bot est appelé, le bot_id est attribué. RTM signifie Real Time Messaging. Cette variable attendra une seconde avant de lire le prochain message d'entrée de l'utilisateur.

Invoquer le code

Enfin, le reste du programme garantit que le bot est toujours en cours d'exécution et recherche les messages d'entrée de l'utilisateur. Certaines des fonctions mentionnées ci-dessous - parse_bot_commands, handle_command et output_command seront discutées en détail dans la section suivante.

C'est tout. Nous avons initié notre bot Kelly. Notre prochaine étape consiste à comprendre les données utilisées pour cet exercice. Cet article fournit une vue d'ensemble des codes techniques. Si vous avez besoin de discuter de quoi que ce soit en particulier ou si vous avez des commentaires sur l'un des modules, laissez-nous un commentaire ou contactez-moi via LinkedIn.

S'amuser!

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close