Staf14 ex6 robot Moo (rapport)


Objectifs

  • Mon premier objectif était tout simplement de créer un robot conversationnel, car depuis le cours de M. Brouze, j'avais été intrigué par la présence de Chantal. Avec un autre étudiant, nous nous promenions dans le Cafv, lorsque nous tombâmes sur Chantal, qui se mit à nous parler. Nous avons poliment répondu. Par la suite, et à notre étonnement, nous apprîmes que Chantal était un robot... je me suis juré qu'un jour, je ferais aussi mon robot, car je trouve que ça fait tout simplement classe.
  • Deuxièmement, je ne le savais pas à l'époque, mais un robot fonctionne grâce aux "expressions régulières". Mon deuxième objectif fut donc de m'approprier leur fonctionnement de base.

Réflexions préalables

  • Créer un robot qui puisse converser avec d'éventuels visiteurs n'est pas chose aisée. En effet, j'avais le choix entre créer un robot très pointu dans un domaine précis ou alors un robot accueillant un visiteur et parlant avec lui de thèmes généraux. La première possibilité aurait été plus facile et aurait assuré que le robot réponde de manière précise aux interrogations du visiteur. Pourtant je n'avais pas du tout envie de faire un robot qui réponde à des questions du genre "c'est quoi le tag br", "le tag br est ..", etc. Je me suis donc lancé dans une aventure plus risquée et qui de fait n'est pas si aisée... Mon robot, "Mooine" a comme fonction essentielle d'amener les visiteurs à parler de thèmes généraux tournant autour de l'être humain, comme l'éducation, la sagesse, la science, l'amour, etc... Le dialogue reposerait, toute proportion gardée, sur l'art de la maïeutique instaurée et maniée avec l'excellence qui caractérisait Socrate. Comme un tel robot ne possède pas de mémoire et ne peut donc garder une trace de la conversation, je n'ai pu faire qu'une conversation de type "question - réponse", puis "nouvelle question - nouvelle réponse". Le dialogue ne dépasse donc pas "une question - une réponse". Construire une conversation fut donc assez difficile, voire impossible dans ces conditions. Néanmoins, un résultat est là et pourrait être grandement amélioré si je continuais à ajouter des expressions régulières de plus en plus fine et précise. Ce robot cherche donc à déstabiliser le visiteur en lui sortant des réponses quelques peu moralisantes. L'objectif est prétentieux mais vise à pousser le visiteur à remettre en question certaines de ses convictions pour les retravailler.
  • Pour un tel robot, la solution réside dans la bonne préparation des réponses aléatoires si le visiteur pose des questions "à côtés" des questions auxquelles s'attend le robot.
  • Je tiens finalement à préciser que je n'ai pas vraiment développé des expressions régulières compliquées. Néanmoins, je reste très impressionné par les capacités d'un tel robot et convaincu qu'une utilisaton pertinente sur un site (par exemple) pourrait fortement augmenter le degré d'interactivité. Il faudrait alors viser une version javascript et le tour est joué. On pourrait imaginer un robot de type "glossaire" ou "aide" qui pourrait prendre en compte les questions fréquemment posées par l'apprenant. A voir si tout cela est vrai!

Aspects techniques et implémentation

  • J'ai commencé par donner naissance au robot"@create #1680 named bot"
  • Pour mettre au point ce robot, j'ai utilisé tout d'abord la fonction "@show #5374" pour obtenir la liste de tous les messages le concernant. J'ai modifié les paramètres suivants: description, htext (image), help_msg, drop_failed_msg, drop_succeeded_msg, odrop_failed_msg, odrop_succeeded_msg, otake_succeeded_msg, otake_failed_msg, take_succeeded_msg, take_failed_msg, guest_responses et le wakeup_msg.
  • J'ai ensuite utilisé la méthode suivante pour configurer les patterns, les mots-clefs et les autres réponses aléatoires. Dans le moo, je tapais ;#5374.pats, ou ;#5374.keywords, ou ;#5374.randresponses ou ;#5374.questionresponses. Ensuite, je collais le résultat dans un éditeur de texte, puis je le modifiais et le recollais dans le moo. C'est une méthode très souple, parce qu'on peut changer l'ordre d'un pattern très facilement.
  • J'ai relevé quelques problèmes qui sont assez compliqués à résoudre. Par exemple, si nous voulons que le robot réponde au mot "politique", par exemple, il suffit de créer un keywords "politique". Mais si nous avons un pattern "j'aime .*", et que le visiteur entre "j'aime la politique", alors ce sera le pattern qui sera pris en premier et non le keywords et la réponse souhaitée. Une solution consiste à mettre tous les keywords également dans les pattern pour qu'ils soient pris en priorité. Mais alors, le pattern "j'aime la politique" ne sera jamais pris en considération...
  • D'autres détails m'ont montré la complexité d'une telle conception. Par exemple, si nous mettons "tu .w*" et que nous préparons une réponse de type "tu dis que je .w*"... comment gérer l'accord du verbe... Cela donnerait "tu détestes...." et la réponse "tu dis que je détestes"... difficile non? Pour être vraiment parfait, il faudrait par exemple aussi préparer les situations "te" et celles "t'" comme je l'ai fait pour un exemple. Bref, il y a une multitude de petits détails à prendre en compte qui, si nous voudrions faire un robot efficace, prendrait beaucoup de temps à mettre en place.

Ressources et références



© D. TOUVET (2001.05.05/2001.05.05)