Authentification :

Connexion
Pas encore de compte ? Enregistrez-vous
 
Accueil arrow AIML arrow Principes du langage arrow Comment faire réagir un chatterbot à des mots clés précis ?

Moteur de recherche

Comment faire réagir un chatterbot à des mots clés précis ? Convertir en PDF Version imprimable Suggérer par mail
Appréciation des utilisateurs: / 0
FaibleMeilleur 
Écrit par Philippe YONNET   
11-05-2008
Pour que le Chatterbot semble intelligent et comprendre ce qu'on lui demande, il doit répondre à la fois à deux objectifs contradictoires :

1°) Reconnaître des stimulus précis. Et répondre précisément (=> savoir reconnaître ces mots clés au niveau du bruit)
2°) Comprendre le type de questions qu'on lui pose... Et réagir en fonction (=> savoir créer des comportements génériques adaptés)

Le second objectif est très difficile à atteindre... Il oblige à recenser tous les types d'interaction habituels avec l'avatar, de rédiger des patterns correspondant avec l'ensemble des variantes des stimulus entrés dans chaque contexte, de procéder à des réductions symboliques en cascade et de renvoyer vers une (ou le plus souvent plusieurs) catégorie(s) chargée de fournir les réponses. Nous détaillerons abondamment dans de prochains articles les techniques que l'on peut utiliser pour traiter les questions, et nous aborderons notamment quelles méthodes utilisées pour contourner les problèmes spécifiques posés par la langue française.


Comment parvenir à faire reconnaître un mots clé ?

Prenons un exemple : vous voulez que votre bot donne la définition du mot "ornithorynque" si on la lui demande.

Vous avez créé une catégorie avec pour pattern "ornithorynque" et vous avez écrit la définition dans le template.

<category>
<pattern>ORNITHORYNQUE</pattern>
<template>L'ornithorynque (Ornithorhynchus anatinus) est une petite espèce de mammifère semi-aquatique endémique vivant dans l'est de l'Australie</template>
</category>

mais quand vous testez le bot en lui posant la question "c'est quoi un ornithorynque ?", il ne comprend pas.

L'explication est simple. Le pattern créé ne correspond qu'à un seul stimulus possible :"Ornithorynque". Il faut donc autoriser la correspondance entre ce pattern et "c'est quoi un ornithorynque".

La solution : ajouter le caractère joker (wildcard) "*" dans le pattern. Cela donne :

<category>
<pattern>* ORNITHORYNQUE</pattern>
<template>L'ornithorynque (Ornithorhynchus anatinus) est une petite espèce de mammifère semi-aquatique endémique vivant dans l'est de l'Australie</template>
</category>


Le bot répond la définition cette fois ci, que l'on tape "c'est quoi un ornithorynque" ou "que sais tu sur l'ornithorynque" ou "je voudrais savoir ce qu'est un ornithorynque"

Sauf que cette fois-ci, si on tape juste "ornithorynque", le bot ne reconnait plus le pattern, qui se traduit par "n'importe quoi" + "ornithorynque. S'il n'y a pas quelque chose au début du stimulus avant ornithorynque, la catégorie ne matche plus. Il faut donc créer une catégorie de plus, et renvoyer vers la première avec la balise <srai>

<category>
<pattern>* ORNITHORYNQUE</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>ORNITHORYNQUE</pattern>
<template>L'ornithorynque (Ornithorhynchus anatinus) est une petite espèce de mammifère semi-aquatique endémique vivant dans l'est de l'Australie</template>
</category>


Les problèmes ne sont pas tous réglés. Il ne faudra pas attendre longtemps pour s'apercevoir que si on tape "ornithorynque australie", votre bot ne sait plus reconnaître le mot "ornithorynque". Il faut donc aussi prévoir les cas ou le stimulus commence par "Ornithorynque".

<category>
<pattern>ORNITHORYNQUE *</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

Et pour finir, il faut matcher aussi avec ce genre de stimulus beaucoup plus classiques "est-ce que l' ornithorynque vit en australie ?", c'est à dire le cas dans lequel le mot clé est précédé ET suivi par d'autres éléments.

<category>
<pattern>* ORNITHORYNQUE *</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>


N'oublions pas non plus que l'utilisateur à le droit de taper "est-ce que les ornithorynques vivent en Australie". Il faut donc aussi prévoir trois variantes supplémentaires avec la marque du pluriel.

Voila le résultat (provisoire)

<category>
<pattern>* ORNITHORYNQUE</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>ORNITHORYNQUE *</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>* ORNITHORYNQUE *</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>* ORNITHORYNQUES</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>ORNITHORYNQUES *</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>* ORNITHORYNQUES *</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>ORNITHORYNQUES</pattern>
<template><srai>ORNITHORYNQUE</srai></template>
</category>

<category>
<pattern>ORNITHORYNQUE</pattern>
<template>L'ornithorynque (Ornithorhynchus anatinus) est une petite espèce de mammifère semi-aquatique endémique vivant dans l'est de l'Australie</template>
</category>


Un coup d'oeil sur les logs de votre chatterbot vous permettra de vous rendre compte que pas grand monde ne tape "ornithorynque" correctement. Il faut donc aussi prévoir les variantes orthographiques. Chaque variante nécessite la création de quatre catégories supplémentaires... On arrive vite à une inflation de catégories, mais c'est le prix à payer pour être compris (disons le plus souvent)...

Oui mais il y'a encore des cas ou quand je tape un stimulus avec "ornithorynque" dedans, il ne me répond pas la définition

L'ennui avec l'AIML, c'est que l'on arrive vite à générer des dizaines de milliers de "formes" (patterns), qui sont analysées en cascade, et que le risque est grand que l'on crée à un endroit un "conflit", une règle qui semble pertinente mais qui va en réalité entrer en conflit avec d'autres règles, pour produire un résultat inattendu.

Imaginons par exemple que l'on ait voulu intercepter les insultes adressées aux chatterbots en créant une pattern adaptée :

<category>
<pattern>ESPECE DE *</pattern>
<template>Malotru !</template>
</category>

<category>
<pattern>ESPECE D *</pattern>
<template>Goujat !</template>
</category>

<category>
<pattern>_ ESPECE *</pattern>
<template>Mal élevé !</template>
</category>

<category>
<pattern>_ ESPECES D *</pattern>
<template>Toi-même !</template>
</category>


Et imaginons que quelqu'un pose la question suivante :

"Est-ce qu'il y a plusieurs espèces d'ornithorynque ?". Je pense que la réponse "toi même !" risque de surprendre l'utilisateur...

(la phrase ci dessus correspond au pattern _ ESPECES D *)

En fait il y'a une collision entre deux patterns, le premier "_ ESPECES D *" prenant le dessus.

 
< Précédent   Suivant >

Dans cette catégorie :