Les chatterbots Action/réaction.
Edit :
Mon chatterbot français en php
Les chatterbots Action/réaction.
Je voudrais développer un peu sur ce type de robot. C’est un genre que les esprits scientifiques délaisse car ils sont peu intéressants au niveau de la linguistique et de la sémantique.
En effet, ils n’ont pas de processus de réflexion, pas de véritable analyse de la phrase et encore moins de construction de réponse. Ce sont simplement des automates.
Mais à mon avis, c’est l’approche la plus simple pour avoir un chatterbot qui répond de façon correcte. Ils sont à privilégier pour les amateurs.
Techniquement, quels sont les problèmes qui font que ce type de chatterbots ne sont pas efficace ?
-Une base de donnée trop petite.
Solution : L’agrandir.
-Ils se font piéger car ils n’analysent pas la phrase.
Solution : Lui donner les outils pour le faire.
-Ils sont figés, au bout d’un moment on a fait le tour.
Solution : Lui permettre de réutiliser des infos.
A suivre, des solutions techniques chiantes pour me clarifier les idées.
Une grosse base de donnée.
C’est le problème clef. Le robot doit pouvoir reconnaître le plus de phrase possible.
Exemple pour l’age :
(Action)Quel âge as tu ?=(Reaction)J’ai quatre ans.
Quel âge as-tu ?, Quel âge tu as ?, Quel est ton age ?, Dis moi ton âge, Quand as tu été construit ?, Quand as tu été créé ?, Quand as tu été fabriqué ?,Quelle est ta date de naissance ?, Tu es né quel jour ?, Quel jour es-tu né ?, Tu es né quand ?, Tu as été fabriqué quand ?, Tu as été créé quand ?, A quelle date es tu né ? A quelle date as-tu été créé ?, Dis moi ta date de naissance ?, Quand est ce que tu es né ?, Quand est ce que tu as été fabriqué ?, Depuis combien de temps existes-tu ?, Cela fait combien de temps que tu existes ?, Tu existes depuis combien de temps ?, Quand t’a t on fabriqué ?, Quand t’a t on créé ?, C’est a quelle date que tu es né ?, C’est quel jour que tu es né ?, Tu es né quelle année ? Etc etc
Vous voyez le problème ?
Plus la base de donnée est grosse, mieux le robot Action/Reaction marche.
C’est frustrant, des tas d’action réactions ne serviront jamais, et bien sur quelqu’un qui va tester votre robot va tomber à coté de vos AR.
Mais je suis convaincu qu’au bout d’un moment, et avec des tas et des tas de testeurs, on en verra forcément la fin. Et le robot pourra nous dire son âge à chaque fois.
Heureusement, on peut faire quelques feintes. Par exemple, utiliser des "jockers".
(JOCKER)âge(JOCKER) as(JOCKER)tu(JOCKER)?(JOCKER)=J’ai quatre ans.
Cette technique permet de prendre en charge une tripotée de question comme "quel age as tu ?", "quel age as tu?","quel age as-tu ?","quel age as-tu?","quel age as tu, robot ?", ce qui soulage un peu.
On pourrait faire
(JOCKER)ton (JOCKER) âge(JOCKER)?(JOCKER)=j’ai quatre ans
Quel est ton âge, dis moi ton âge, ton âge c’est quoi, vas y donne ton âge fais pas ta pute, file ton âge, c’est quoi ton âge….
Plutôt utile pour agrandir sa base de donnée à peu de frais.
Mais par contre : "zigzerijbgziubgeiuobton aezz âgeeruenoin" donnerait "j’ai quatre ans".
Pour info, Alice, le bot action/réaction de référence possède une soixantaine de façons de reconnaitre cette question de l’âge (bouuh, j’en ai la moitié sur la petite liste faite au pif en haut).
Alice utilise des redirection.
Par exemple, chaque fois qu’on lui dira bonjour, ou salut ou bonsoir, elle redirigera vers "bonjour".
C’est plus simple à programmer mais est à éviter, à mon avis : c’est un frein à la variété car cela encourage la paresse du créateur.
Pourquoi en effet se fatiguer à mettre differentes réponses à hola, hello, bonjour, bonsoir alors qu’on peut facilement tout rediriger vers "bonjour"?
Dans le même ordre d’idées, on pourrait utiliser une liste de mots externes, comme expressionsaffirmatives.txt, qui contiendrait oui, yes, ok, d’accord, etc.
Il suffirait alors d’écrire "si:expressionsaffirmatives.txt, alors répondre…"
A éviter aussi pour la raison citée plus haut.
Pieges dus au manque d’analyse.
Supposons que l’utilisateur dise :
"J’aime les pizzas"
Aie ! Pizza n’est pas dans la base de donnée ! Mais on peut feinter en réutilisant le dernier mot :
"Les pizzas ? Qu’est ce qui t’attire là dedans ?" Ca marche aussi avec les frites à la mayonnaise et les gros culs.
Mais un autre problème du bot Action/Réaction est qu’il ne peut pas distinguer les éléments de la phrase.
Ainsi, il se fait avoir par des phrases comme "Je m’appelle au téléphone".
"Je m’appelle au téléphone.
-Enchanté, au téléphone !"
Lorsque nous apprenons une langue étrangère, pour bien comprendre une phrase, nous apprenons une liste de vocabulaire, par exemple, la liste des verbes irréguliers en anglais, une liste d’adjectif, ou une liste de nom.
C’est très utile.
Mr.jean fuopp pomme troublaref mangé org négaga.
Grosso modo armé de notre liste de nom, de verbes et de mots, on comprend qu’il est question d’un Monsieur Jean qui mange une pomme.
Une liste de ce genre permettrait d’éviter le piège du téléphone vu plus haut, et de pouvoir réutiliser des bouts de phrases en coupant au bon endroit.
Ou même :
"Je m’appelle Netsabes
(scan de la liste de noms…Nom inconnu donc réponse :)
-C’est bizarre comme nom."
Des variables.
Idéalement un bot devrait pouvoir répondre à tout moment aux questions "Je parle de qui/quoi/quand/où ?". C’est loin d’être le cas.
Théoriquement, l’AIML d’ALICE devrait permettre ça, mais c’est sous-exploité.
L’utilisation de variable permettrait également de faire des conversations suivies :
"Ca va, utilisateur ? (variable "ca va demandé activé)
-Non. (si variable ca va demandé est active et que la réponse est non, alors :)
-Pourquoi ca ne va pas ?"
On peut mettre quelques conversations suivies aléatoires dans le cerveau du bot, en gardant à l’esprit que plus la conversation est longue, moins il y a de chances pour que quelqu’un arrive jusqu’a la fin.
Apporter de la variété !
L’autre problème des bots AR, c’est qu’ils sont figés. La seule variété est apportée par la reprise de bout de phrase ("[ta bite] est elle importante pour toi ?", par exemple).
Bien sur, on peut utiliser les réponses variables. Par exemple, la liste d’Alice pour "bonjour" telle qu’on la voit dans son cerveau (sur le site, elle ne répond que Hi there j’ai l’impression).
Well hello there!
Hi there!
Hi there. I was just wanting to talk to <get name="name"/>.
Hello there <get name="name"/>!
Oh, hello again!
Mais même ainsi, un jour, on a fini par faire le tour des bots.
Comment les rendre plus vivants ? J’ai pensé à plusieurs pistes, comme parser google news afin d’avoir des trucs à dire sur l’actualité, réutiliser les logs des gens par exemple en réagissant à des phrases comme "J’ai une ".
Pierre : "J’ai une belle maison "
=>transformation user(pierre) a une belle maison
Puis, plus tard, le bot pourra dire à Paul :
Paul : "J’ai acheté une nouvelle belle maison"
Bot : "Tiens, pierre a une belle maison au fait."
De cette façon, le chatterbot se transformerait en une commère qui fait circuler les ragots. C’est pas cool ?
Pour les rendre plus vivants, on peut aussi leur permettre d’interpeller l’utilisateur au bout d’un certain temps d’inactivité, se baser sur la date et l’heure… Quoi d’autre ?
Je pense que ce type de robot peut être utile occasionnellement dans des domaines bien spécifiques , en tant que guides virtuels ou acteur dans un jeu video.
Pour ceux qui ont tout lu, bravo ! Un article sur les robots apprennant est en route, c’est un sujet beaucoup plus interressant.
Et en cadeau, une bab…Euh non, un programme écrit en vb qui permet de creer son bot A/R simplement pour s’amuser un peu.
http://trotter.poulpe.free.fr/chatterbot/ChatterbotAR.zip (livré avec un petit cerveau de "bonjour")
Ca va me servir de base pour un jeu video sans prétention un peu à la manière de Facade.
31 mai 2007 à 18:48 Citer
TROUVE-TOI DES AMIS ESPèCE D’ASOCIAL
31 mai 2007 à 18:55 Citer
Il expose pleins de problemes c’est tripant.
31 mai 2007 à 19:01 Citer
Perso, les chatterbots ca m’inspire toujours la même réaction : "tout ça pour ça?!"
31 mai 2007 à 19:22 Citer
Je l’avais pas vu comme ça, mais effectivement un chatterbot à la place de chaque NPC dans un jeu comme Oblivion (par exemple), et tout ces dialogues à la cons prendraient une autre dimension. Reste ensuite à pouvoir simuler une sorte de caractère pour distinguer les personnages.
M’enfin faut toujours se taper la base de donnée à remplir.
31 mai 2007 à 22:15 Citer
Dans un autre genre il y a ça aussi.
1 juin 2007 à 15:12 Citer
Y’a un truc auquel tu n’as pas fait reference (ou alors ma lecture en diagonale a foirée), c’est la possibilité d’apprendre "legerement".
Du genre :
"yo le bot c’est quoi ton age ?"
La question ne figurant pas dans sa liste de questions le bot repond :
"désolé je ne comprend pas votre question, pouvez la reformuler ?"
"quel age as tu ?"
La il trouve la reponse :
"j’ai quatre ans"
et il ajoute la question a la liste des questions en rapport a "quel age as tu". Bon c’est caduque mais je trouve qu’il y a de l’idée.
Il me semble qu’Alice a un truc du style :
"PoFzz est un con, retiens bien ça."
et la présence de "retiens bien ça" dans la phrase fait qu’Alice enregistre le fait.
Ce qui donnerait ensuite avec un autre user :
"Tu connais PoFzz ?"
"Oui, PoFzz est un con"
Je pense pas que ca fonctionne ainsi avec Alice mais il me semble qu’il y a un truc similaire.
1 juin 2007 à 17:59 Citer
Pourquoi pas mais si l’user dit "laisse tomber ok ?" au lieu de reformuler :\
Oui, Alice a quelques variables :
Human: Hello !
ALICE: Hi there !
Human: i love birds
ALICE: Birds are very nice. What kind of bird is your favorite?
Human: what am i talking about ?
ALICE: You said you were existing.
(pas bien)
Human: what is the topic ?
ALICE: I believe we were talking about BIRDS.
(bien)
Human: Hello !
ALICE: Hi there !
(pas bien du tout)
(j’aime bien l’embêter)
1 juin 2007 à 18:45 Citer
il y en avait un qui s’appellait Fred a une epoque qui était sur le meme schema. C’etait bien fun.
13 février 2008 à 23:24 Citer
bonjour
article très instructif
aimerais correspondre avec vous sujet chatterrbot
cordialement
Marq…@tele2.fr
13 avril 2008 à 13:26 Citer
Excellent article, mais trop court, il faudrait que tu développes plus, il y a tellement de choses à dire, j’attends la suite avec une impatience extatique