AliceVB : Interface pour l'AIMLBot : Robot de
discussion de type Alice
d'après la source :
AIMLBot Library (Program#) et
AIMLGUI (a simple interface for the AIMLBot library) de Nicholas H. Tollervey
Dernière version 2.5 du 09/04/2007 : http://aimlbot.sourceforge.net
https://codes-sources.commentcamarche.net/source/1043
Documentation : AliceChatBot.html
Code source : AliceVB.vbproj.html
Par Patrice Dargenton : patrice.dargenton@free.fr
http://patrice.dargenton.free.fr/CodesSources/index.html
Version 1.01 du 07/09/2008
Mots clés : IA, Turing, Robot, Discussion, Alice, AIML, Chat, ChatBot, Chatterbot, Agent conversationnel.
Table des matières
Versions non
dédoublonnées (ND)
Analyse des différents jeux AIML
Program# -
An AIML Chatterbot in C#
Conclusion sur les schémas AIML
Comment faire
une version française ? Internationalizing AIMLBot
Petite discussion sur AliceBot
Version 1.01
du 27/01/2008 en VB.Net d'après la version 2.5 du 09/04/2007 de Nicholas
H.Tollervey
Première
version 1.0 du 01/11/2001 : Interface VB6 pour COM_ALICELib.AliceBot
Du cinéma à la réalité, voici Alice...
Alice est un robot de discussion, ou chatbot ("tchatbote"), pour la deuxième année consécutive (2001), il remporte la médaille de bronze du prix Loebner de 2000 $ récompensant la création d'une machine capable de soutenir une discussion (en anglais seulement).
Voici un extrait d'un article de Yahoo :
Alice au pays de l'intelligence artificielle, jeudi 18 octobre 2001, 16h30, Londres
Pour la deuxième année consécutive, Alice a remporté la médaille de bronze et la somme de 2000 dollars lors d'un concours d'intelligence artificielle, le Prix Loebner. Mais qui est Alice? Réponse: Artificial Linguistic Internet Computer Entity, un robot ordinateur créé en 1995 par le Dr Richard Wallace de la Fondation Alice AI.
Le Prix Loebner est doté chaque année de 100000 dollars pour qui proposera un programme informatique capable de confondre l'homme et la machine. Le principe est simple: une machine est dite intelligente en fonction de ses capacités à suivre une conversation textuelle ou vocale avec les juges de l'épreuve. Ceux-ci tapent leurs questions directement dans l'interface du logiciel et jugent les réponses pour tenter de discerner si celui qui leur répond est une machine ou un être humain. Ce test est une variante du Test de Turing, conçu par le mathématicien britannique Alan Turing, qui s'est passionné à la fin de sa vie, dans les années 50, pour l'intelligence artificielle (IA).
Jugée supérieure à l'homme une seule fois...
Pour en savoir plus sur ce prix : www.loebner.net/Prizef/loebner-prize.html
Pour en savoir plus sur AliceBot : www.alicebot.org
Alice peut être testé en ligne, mais pour la tester en local (histoire d'être sûr d'avoir affaire avec un robot...), il y a maintenant, depuis 2005, le logiciel AIMLBot Library (Program#) de Nicholas H.Tollervey, en C#. La conversion en VB .Net a été réalisée à 95% via Reflector (le 5% restant étant des corrections mineures que Reflector ne parvient pas à traduire automatiquement).
La première version que j'avais présentée sur VBFrance était seulement une interface VB6 vers un contrôle ActiveX, celui de Windowpane, dont on n'avait pas les sources en C. Maintenant, les sources sont inclues et elles sont en VB .Net !
A la première ouverture du
zip, penser à mettre le projet de démarrage sur AliceVB et non AIMLBot par
défaut (bouton droit sur le projet : Définir comme projet de démarrage ; l'info
est ensuite stocké dans le fichier AliceVB.suo, que je préfère ne pas
distribuer, car il est caché et contient des chemins non relatifs).
Le Program# contenait déjà une synthèse vocale, mais j'ai ajouté en plus une option MS-Agent. Pour installer les agents Microsoft, voir la rubrique correspondante.
Au fil des ans, j'avais récupéré des fichiers AIML en français, sans jamais avoir pu les tester effectivement. J'ai donc réessayé à nouveau... Pour commencer, j'ai ajouté une constante dans le code permettant de définir simplement le dossier Aiml à utiliser (sSousDossierAiml = sSousDossierAiml_Anglais ou sSousDossierAiml = sSousDossierAiml_Fr2003JLC ou sSousDossierAiml_Fr2005JLC, ...).
Ensuite j'ai traduis le fichier GenderSubstitutions.xml.
Puis j'ai testé les fichiers AIML en français, et rencontré plusieurs anomalies, il semble que les fichiers AIML en français ne soient pas conformes.
Pour en avoir le coeur net, il faut faire une vérification selon le schéma de définition des fichiers AIML afin de déterminer s'il y a beaucoup de corrections à effectuer, ou simplement de petites corrections mineures.
La première chose à faire est donc de se procurer le schéma AIML officiel, les 3 liens suivants ont un contenu identique :
http://docs.aitools.org/aiml/schema/AIML.xsd
http://aitools.org/aiml/schema/AIML.xsd
http://aitools.org/programd/resources/schema/AIML.xsd
La documentation est ici :
http://docs.aitools.org/programd/docs/schema/AIML.html
Pour valider un fichier AIML selon le schéma officiel, il doit contenir les lignes suivantes :
<aiml
version="1.0.1" xmlns="http://alicebot.org/2001/AIML-1.0.1"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://alicebot.org/2001/AIML-1.0.1
http://aitools.org/aiml/schema/AIML.xsd">
Résultat : aucun des jeux AIML testés ne passent complètement sans erreur ! voici la liste de ceux testés :
http://ntoll.org/file_download/18 : AIMLBot.zip : Contient AIML.zip : Program# 2004
http://downloads.sourceforge.net/aimlbot/AIMLGUI2.5.zip : Program# 2006
www.alicebot.org/aiml/aaa/ : Annotated A.L.I.C.E. 2006
www.alicebot.org/aiml/alice.zip : Richard Wallace's A.L.I.C.E. 2002
http://aitools.org/aiml-sets/alice-2005-05-14.zip
http://aitools.org/aiml-sets/standard-AIML-2005-05-14.zip
http://aitools.org/Free_AIML_sets#French_AIML :
http://aitools.org/aiml-sets/FrenchAIML-2005-05-14.zip : 2005 Jean-Louis Campion : Le Monde d'Opale
http://aitools.org/aiml-sets/FrenchAIML-2006-03-06.zip : 2006 Tan Siew Lan
www.alicebot.org/downloads/aiml/aiml-std-fr.zip : 2003 Jean-Louis Campion
www.alicebot.org/downloads/aiml/french_aiml_publish.zip : 2005 Tan Siew Lan
L'alternative consiste à fabriquer automatiquement le schéma xsd via Visual Studio, ainsi on est sûr que tous les fichiers seront validés. Pour cela, il faut d'abord fusionner tous les fichiers AIML d'un jeu donné (en évitant simplement de répéter la balise d'entête <aiml>, et à condition que l'encodage soit le même pour chaque fichier d'origine) : faire un simple copy /b *.aiml Cumul.aiml, puis ouvrir le fichier dans Visual Studio : le menu "XML : Créer un schéma" permet alors d'extraire le schéma xsd, on obtient alors le résultat suivant :
Notes :
- Lors de la fusion, il est possible de faire les remplacements sous Word pour supprimer les balises <aiml>, par exemple en remplaçant :
</aiml>^p<?xml version="1.0" encoding="ISO-8859-1"?>^p<aiml>
par ^p^p (deux sauts de ligne).
- Pour changer l'encodage, il suffit de sauver le fichier d'une autre façon, par exemple via le bloc-notes, ou bien via Word, ou bien alors via Visual Studio en changeant directement la chaîne d'encodage en "ISO-8859-1" (à condition de remplacer les éventuels caractères unicodes, par exemple les caractères spéciaux tels que ... regroupé en un seul caractère spécial).
L'avantage de cette solution du schéma déduit est qu'elle fonctionne ! (contrairement au schéma officiel) Pour le vérifier, il suffit simplement d'indiquer les attributs suivants sur la seconde ligne des fichiers AIML :
<aiml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation="aiml_deduit.xsd">
Pour le jeu anglais 2006 stdr, je l'ai fait pour tous les fichiers AIML non conformes avec le schéma officiel, les autres fichiers AIML restants inchangés. Si on teste le fichier Cumul directement avec le schéma duquel on l'a déduit, il n'y a évidemment aucune erreur, cela montre simplement que les fichiers aiml sont conformes xml en général, et que l'extraction et la vérification du schéma xsd fonctionne. Mais si cette fois on vérifie un jeu AIML selon un schéma déduit d'un autre jeu, on met ainsi en évidence les différences. En ouvrant ces fichiers directement dans Visual Studio, ce dernier indiquera les éventuels incohérences trouvées entre le contenu du fichier xml et le schéma AIML précisé.
Si les fichiers AIML contiennent des balises html, l'espace de nommage est alors :
<aiml
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="aiml_deduit.xsd">
On peut faire cette manipulation pour chacun des jeux AIML, mais cela ne fonctionne pas pour tous. En effet, il y a 3 jeux AIML anglais qui posent problème : ou bien on enlève l'espace de nommage html et on obtient :
<html:br/> : "Le préfixe du nom d'espaces 'html' n'est pas défini."
ou bien on laisse l'espace de nommage html et on obtient :
"Impossible de trouver les informations de schéma pour l'élément 'http://www.w3.org/1999/xhtml:br'" ou bien "L'élément 'http://www.w3.org/1999/xhtml:EM' n'est pas déclaré."
Cela concerne les derniers jeux AIML, ceux qui référencent le schéma officiel : Annotated A.L.I.C.E., Alice-2005-05-14 et Anglais-2005-05-14.
Pour les jeux AIML en français, les plus récents (2005JLC et 2006TSL) référencent bien le schéma officiel, mais ils ne le respectent pas non plus, et on n'arrive pas non plus à déduire un schéma sans erreur, pour la même raison que précédemment. Par contre, pour les deux jeux les plus anciens (2003JCL et 2005TSL), on arrive sans problème à déduire un schéma sans erreur, ce qui va permettre la comparaison des schémas.
Le premier test que l'on peut faire, c'est voir si les fichiers français respectent le schéma déduit qui fonctionne avec la version actuelle en anglais (2006 stdr). Résultat : il y a un certain nombre d'erreurs, par exemple des balises en majuscules alors qu'elles sont attendues en minuscules.
Ensuite la logique est de tester l'utilitaire WinDiff entre les deux schémas pour mettre en évidence les différences, mais il y a beaucoup plus de différences que de ressemblance, d'où l'idée de simplifier la comparaison via les DTD :
En fait j'avais commencé par rechercher un hypothétique schéma DTD pour AIML, lequel est une version simplifiée beaucoup plus lisible qu'un schéma xsd, ce qui faciliterait la comparaison de structure.
Il y a une ébauche (non fonctionnelle) de DTD AIML ici (version du 6 novembre 1999 de John E. Laroche) :
www-lium.univ-lemans.fr/~lehuen/master2/dialogue/tp/aiml.pdf
Voici la retranscription au format texte : aiml_John_E_Laroche.dtd
Mais il est apparu que les fichiers AIML ont une structure récursive (hiérarchique) ne pouvant pas être exprimée via une DTD. Cependant, on peut contourner cette limite en renommant avec un numéro les balises susceptibles d'apparaître à plusieurs niveaux, de façon à les dissocier et à faire disparaître complètement l'aspect récursif de la structure AIML. Les fichiers AIML ainsi mis à plat ne fonctionneront plus avec le robot de discussion, mais on pourra alors extraire le DTD et vérifier, d'une part que les fichiers transformés respectent bien leur DTD (pour voir si l'extraction DTD est juste), et ensuite comparer leur DTD plus facilement qu'avec leur schéma xsd. Je n'ai pas trouvé de logiciel pour extraire le DTD (sauf peut être TRANG), alors j'en ai conçu un disponible ici avec les sources :
XmlStruct : Extraire et comparer la structure de documents xml.
Cependant, dans une première approche, j'ai ignoré les attributs xml, car je voulais rapidement tester cette solution. J'ai donc ajouté une routine de suppression des attributs dans les fichiers xml afin de pouvoir tester la validation xml via la DTD sans les attributs. Résultat : cela fonctionne ! on parvient à comparer facilement que, par exemple, il n'y a qu'une petite différence entre les jeux anglais standard 2004 et 2006 : on voit que srai peut maintenant contenir get en plus de star, alors que cette différence n'est pas aussi évidente en comparant leur schéma xsd. Pour simplifier encore plus les différences, maintenant qu'on sait que les DTD sont valides (ils valident correctement le contenu xml dont ils sont issus), alors on peut enlever la numération ajoutée lors de la mise à plat des fichiers xml, et ainsi comparer les balises directement (non dédoublonnées : ND).
Pour valider un fichier xml
selon un schéma DTD, celui-ci doit être indiqué sur la seconde ligne après
l'encodage, par exemple, si aiml est la balise racine, on doit avoir :
<!DOCTYPE
aiml SYSTEM 'aiml_deduit.dtd'>
Résultat : c'est pas gagné, il y a vraiment beaucoup de différences entre les structures DTD en français et celle en anglais standard (cf. l'utilitaire WinDiff). Cependant, il faut faire la part des choses entre les combinaisons non prévues à l'avance dans le schéma de référence (Anglais 2006 Stdr) et les nouvelles combinaisons trouvées en français, mais qui ne sont pas nécessairement des erreurs : c'est simplement la limite du processus de comparaison utilisant la déduction : il s'agit d'une déduction par occurrences trouvées, qui est forcément plus restrictive qu'une définition théorique du schéma autorisé. Le problème est identique avec les schémas xsd déduits, mais les comparaisons sont plus simples via les DTD.
Rappel : les versions dédoublonnées valident effectivement l'ensemble des fichiers AIML (sans les attributs), une fois qu'ils ont été dédoublonnés (mis "à plat") :
DTD\Anglais2000AliceActiveX.dtd
DTD\Anglais2006Stdr.dtd (correspond à la version actuelle d'AIMLBot)
Rappel : les versions non dédoublonnées servent seulement à faciliter la comparaison de structures des fichiers AIML (sans les attributs) :
DTD\NonDedoub\Anglais2000AliceActiveX_ND.dtd
DTD\NonDedoub\Anglais2002Alice_ND.dtd
DTD\NonDedoub\Anglais2004Stdr_ND.dtd
DTD\NonDedoub\Anglais2005Alice_ND.dtd
DTD\NonDedoub\Anglais2006AAA_ND.dtd
DTD\NonDedoub\Anglais2006Stdr_ND.dtd (correspond à la version actuelle d'AIMLBot)
DTD\NonDedoub\Francais2003JLC_ND.dtd
DTD\NonDedoub\Francais2005JLC_ND.dtd
DTD\NonDedoub\Francais2005TSL_ND.dtd
DTD\NonDedoub\Francais2006TSL_ND.dtd
Fichier original (Music.aiml) :
<aiml>
<category><pattern>BEETHOVEN *</pattern><template>It's amazing that he composed music while deaf.
<think><set name="he"><set name="topic">BEETHOVEN</set></set></think>
</template></category>
<category><pattern>WHAT WAS THE *
BEETHOVEN *</pattern><template>Fidelio.</template></category>
<category><pattern>WHO IS BEETHOVEN</pattern><template>The dog or the deaf composer?</template></category>
<category><pattern>WHO IS LUDWIG
BEETHOVEN</pattern><template><srai>WHO IS BEETHOVEN </srai></template></category>
</aiml>
Suppression des attributs :
<aiml>
<category>
<pattern>BEETHOVEN *</pattern>
<template>It's amazing that
he composed music while deaf.
<think><set><set>BEETHOVEN</set></set></think></template>
</category>
<category>
<pattern>WHAT WAS THE *
BEETHOVEN *</pattern>
<template>Fidelio.</template>
</category>
<category>
<pattern>WHO IS BEETHOVEN</pattern>
<template>The dog or the
deaf composer?</template>
</category>
<category>
<pattern>WHO IS LUDWIG
BEETHOVEN</pattern>
<template>
<srai>WHO IS BEETHOVEN </srai>
</template>
</category>
</aiml>
La balise <set> est présente à plusieurs niveaux, une mise à plat est requise :
aiml\category\template\think\set\set\ <> aiml\category\template\think\set\ -> set__1
<aiml>
<category>
<pattern>BEETHOVEN *</pattern>
<template>It's amazing that
he composed music while deaf.
<think><set><set__1>BEETHOVEN</set__1></set></think></template>
</category>
...
</aiml>
Extraction du DTD :
<!ELEMENT
aiml (
category )*>
<!ELEMENT category
( pattern | template
)*>
<!ELEMENT
pattern (
#PCDATA )>
<!ELEMENT
template (
#PCDATA | srai
| think )*>
<!ELEMENT
srai (
#PCDATA )>
<!ELEMENT
think (
set )>
<!ELEMENT set ( set__1 )>
<!ELEMENT set__1 ( #PCDATA )>
Version non dédoublonnée (pour comparaison seulement, ne fonctionne pas à cause du doublon set) :
<!ELEMENT
aiml (
category )*>
<!ELEMENT category
( pattern |
template
)*>
<!ELEMENT
pattern (
#PCDATA )>
<!ELEMENT
template (
#PCDATA |
srai |
think )*>
<!ELEMENT
srai (
#PCDATA )>
<!ELEMENT
think (
set )>
<!ELEMENT set ( set )>
<!ELEMENT set ( #PCDATA )> (L'élément global 'set' a déjà été déclaré.)
- 2004 Standard AIML pour le Program#
http://ntoll.org/file_download/18 : AIMLBot.zip : contient AIML.zip
http://ntoll.org/file_download/19 : AIMLGui.zip
AimlGUI version 1.0 du 21/02/2004 au 25/02/2004 (contenu m.àj. entre sept. 2003 et fev. 2004).
30128 catég., pas d'erreur au chargement, pas de schéma référencé, schéma déduit OK.
- 2006 Standard AIML pour le Program#
(version intégrée à la version AliceVB sous le nom Anglais2006Stdr)
http://downloads.sourceforge.net/aimlbot/AIMLGUI2.5.zip
Fichiers présents dans le fichier AIMLGUI2.5.zip (2 fichiers en 2007)
30134 catég., pas d'erreur au chargement.
Pas de schéma référencé, sauf un : Salutations.aiml : schéma xsd officiel.
Ne passent pas le schéma officiel : Reduce, Computers, Client, Botmaster, Bot, Biography, Atomic, AI, That, Knowledge (test custom tag non plus, par définition) : Schéma déduit OK pour ceux là.
2 fichiers corrigés (petites erreurs) : money et stories.
- 2002 Richard Wallace's A.L.I.C.E.
www.alicebot.org/aiml/alice.zip
41122 catég., pas d'erreur au chargement. Pas de schéma référencé, schéma déduit OK.
- 2005
http://aitools.org/aiml-sets/alice-2005-05-14.zip
41122 catég., pas d'erreur au chargement.
Mélange de français, allemand et anglais (le robot est sensé parler ces langues, il dit parler français, mais il ne fait que répondre oui à la question, puis revient en anglais... peut être que les xml ne sont pas bien adaptés, ou bien la configuration n'est pas adaptée).
Il y a des avertissements selon le schéma officiel référencé (comme tous les autres jeux).
Pas réussit à déduire un schéma sans erreur : cf. AAA, ci-dessous.
Boucle infinie parfois en français !
47182 catég., pas d'erreur au chargement.
Il y a des erreurs selon le schéma officiel référencé (comme tous les autres jeux), mais il semble marcher.
Badanswer et Integer.aiml n'ont pas de schéma.
Pas réussit à déduire un schéma sans erreur car ou bien on enlève le schéma et on obtient :
<html:br/> : "Le préfixe du nom d'espaces 'html' n'est pas défini."
ou bien on laisse le schéma et on obtient :
"Impossible de trouver les informations de schéma pour l'élément 'http://www.w3.org/1999/xhtml:br'."
http://aitools.org/aiml-sets/standard-AIML-2005-05-14.zip
23811 catég., 4 avertissements (warnings) au chargement.
Boucle infinie pour certaines réponses ! (simple Hello).
Il y a des erreurs selon le schéma officiel référencé (comme tous les autres jeux).
Pas réussit à déduire un schéma sans erreur : cf. AAA.
Les derniers jeux AIML en français sont ici :
http://aitools.org/Free_AIML_sets#French_AIML :
- 2005 Jean-Louis Campion : Le Monde d'Opale
http://aitools.org/aiml-sets/FrenchAIML-2005-05-14.zip
39206 catég., pas d'erreur au chargement, mais des parasites dans les réponses :
You: Bonjour
Bot: window.open('.gif', 'facesrc', 'width=311,height=223');.Salut Patrice!
apparence.aiml a un pb. d'encodage : corrigé
Date indiquée entre le 09/04/2002 et le 23/08/2002
Il y a des erreurs selon le schéma officiel référencé (comme tous les autres jeux).
Impossible de déduire un schéma sans erreur : même pb. que pour AAA-2006-05-11
- 2006 Tan Siew Lan
http://aitools.org/aiml-sets/FrenchAIML-2006-03-06.zip
12723 catég.
En fait c'est la même date indiquée du 08 Dec 2005, seul le fichier srai_ed semble différent de la version 2005 ci-dessous.
Il y a des erreurs selon le schéma officiel référencé (comme tous les autres jeux), liste des fichiers qui ne passent pas : srai_ed, quel_ed, comment_ed, atomique_ed.
Impossible de déduire un schéma sans erreur : même pb. que pour AAA-2006-05-11
Si on utilise le schéma xsd déduit de Anglais2006Stdr, il y a des erreurs.
Fichiers AIML incomplet (à utiliser en complément de CumulFrancais2005JLC.aiml ?) :
You: Bonjour
The bot could not find any response for the input:
Bonjour with the path(s): Bonjour <that> * <topic> * from the user with an id: DefaultUser
Il vaut peut être mieux repartir des précédentes versions sans schéma :
- 2003 Jean-Louis Campion
www.alicebot.org/downloads/aiml/aiml-std-fr.zip
47590 catég., pas d'erreur au chargement, mais des parasites dans les réponses :
You: Bonjour
Bot: idFace = "".Salut Patrice!
Pas de schéma référencé, date indiquée entre le 10/04/2002 et le 22/01/2003.
Il y a un caractère unicode corrigé (Plôme... dans humour.aiml), schéma déduit OK.
Fichier apparence.aiml corrigé (une balise <random> manquante).
- 2005 Tan Siew Lan
www.alicebot.org/downloads/aiml/french_aiml_publish.zip
12723 catég., 12 fichiers : datés du 03/01/2003, mais la date indiquée dans le contenu xml : 08/12/2005 : forcément antidatée !
Pas de schéma référencé, schéma déduit OK (contrairement à 2006TSL), mais différent de l'anglais standard.
Pareil que 2006TSL : c'est un complément.
On peut faire un cumul Fr2003JLC+2005TSL et déduire un schéma valide.
A moins que quelque chose m'échappe, il se trouve que personne n'a réussit à produire un jeu AIML qui respecte le schéma officiel, ce qui prouve que c'est bien compliqué tout de même (surtout du fait de l'utilisation de préfixes html inattendus dans les noms des balises). Le mieux est donc de partir du schéma déduit du jeu (Anglais2006Stdr) qui fonctionne avec la dernière version d'AIMLBot : Program#2.5, puisque l'on a maintenant les sources en VB .Net : on est sûr d'avoir la structure qui va bien, et de pouvoir déboguer le cas échéant.
Si on lit la documentation de la dernière version de la spécification, on trouve à la rubrique "10. AIML Schema" que la prochaine version inclura un schéma xml pour AIML (comme quoi cela n'a pas encore été fait, étant donné la complexité). Les évolutions entre la version 0.9 et 1.0 du schéma AIML sont ici, tandis que le tableau des balises de la version 1.01 est ici.
Pour faire une version en français, il y a deux possibilités : ou bien repartir à zéro, ou bien corriger toutes les erreurs dans les fichiers AIML (selon le schéma déduit du jeu anglais 2006 stdr). Dans ce cas, on peut utiliser l'ensemble des deux jeux 2003JLC et 2005TSL : il n'y a pas de noms de fichiers en commun. Certains fichiers AIML respectent le schéma déduit anglais : si on les isole, le robot est incapable ne serait-ce que de répondre à un Bonjour, sans afficher une erreur, car si on désactive un template, il faut le faire d'une manière propre, sans effet de bord, ce qui n'a rien d'évident. Bref, impossible de faire une version en français avec une connaissance superficielle de la syntaxe AIML.
Voici tout de même les jeux AIML en français sans autres modifications que les simples erreurs de syntaxe xml, et prêt à être testés et corrigés :
Francais2003JeanLouisCampion.7z et Francais2005TanSiewLan.7z.
Pour changer de jeu AIML, il suffit de suivre ces 4 étapes, par exemple pour installer le jeu intitulé "Francais2003JeanLouisCampion" :
1°) Créer un sous-dossier \Aiml\Francais2003JeanLouisCampion
2°) Recopier tout le dossier Aiml\Anglais2006Stdr\Config dans \Aiml\Francais2003JeanLouisCampion
3°) Dans le fichier \Aiml\Francais2003JeanLouisCampion\Config\Settings.xml, modifier les paramètres de la façon suivante :
<item name="aimldirectory"
value="Aiml\Francais2003JeanLouisCampion"/>
<item name="configdirectory"
value="Aiml\Francais2003JeanLouisCampion\Config"/>
4°) Dans le code source, modifier la constante :
Private Const sSousDossierAiml$ = "Francais2003JeanLouisCampion"
Description : A quick guide to using AIMLBot in non-English language contexts
http://sourceforge.net/docman/index.php?group_id=133783
Because AIMLBot is written in .NET it
can make use of the platform's excellent internationalization capabilities.
This document is a quick guide to the relatively easy steps required to give
AIMLBot more cosmopolitan linguistic capabilities.
Put simply, there are three steps:
1.
Change the bot's Settings.xml file found
in the config directory so that specifically the regex for stripping illegal
characters meets the requirements for the target character-set. Currently this
is set to remove anything that isn't a numeric character (0-9) or an
upper/lower case character in the English alphabet (a-z and A-Z). What these
regex are to be for the target language is beyond the scope of this article.
Obviously modify the other settings to reflect the cultural context in which
the bot is to operate.
2.
In the same directory, modify the following
XML files to meet the cultural and grammatical conventions of the target
language.
o
DefaultPredicates.xml - A dictionary of
default information for each new user (e.g. name = "un-named user").
o
GenderSubstitutions.xml - In the English
version this contains a dictionary of conversions from one gender to the other.
For example: HE => "she", WITH HER => "with him".
o
Person2Substitutions.xml - A dictionary
for converting between the first and second person. For example: WITH YOU =>
"with me", GIVING YOU => "giving me".
o
PersonSubstitutions.xml - A dictionary
for converting between the first and third person (plural). For example: I AM
=> "he or she is", ME => "him or her".
o
Splitters.xml - A list of characters
used within the target culture for the end of sentences (in English these are:
".", "!", "?" and ";").
o
Substitutions.xml - A dictionary of
words, characters and phrases that are to be transformed in some way. This
often includes replacing shortened words with their full version (for example,
"you're" becomes "you are"), common
misspellings/colloquialisms with the correct spelling ("wanna"
becomes "want to") and certain symbols or abbreviations with their
names (e.g. "Dr." becomes "doctor").
3.
Write your AIML files using the target
language and the target character set.
AIMLBot currently contains (and passes)
unit tests to make sure it works correctly with non-English characters
(specifically the node class is used to create and query a graphmaster
containing Chinese, Japanese and Cyrillic entires).
These steps should be all that is
required. I'd welcome feedback and suggestions for improving support for
internationalization and if possible I will implement requested (non-culture
specific) features.
Best of luck!
La version en C# de AimlBot du site sourceforge contient un projet de tests unitaires (une série d'assertions que le jeu AIML doit vérifier avec son interpréteur) : il faudrait vérifier que AliceVB passent bien aussi tous ces tests.
Le code source d'origine est conçu pour être multi plateforme, notamment il doit tourner sous Mono. Bien que les librairies Visual Basic ne sont pas disponibles sous Mono, il faudrait aussi vérifier si AliceVB fonctionne encore sous Mono, et sinon quelles sont les procédures VB que l'on peut remplacer par leur équivalent pur DotNet.
Pour installer les agents Microsoft, téléchargez sur Microsoft Agent Downloads (www.microsoft.com/msagent/downloads/user.aspx) les fichiers : MSAgent.exe, Merlin.exe et tv_enua.exe :
1°) Download the Microsoft Agent core components :
MSAgent.exe (395 Ko)
(pour la langue US,
vous n'avez pas besoin de choisir de langue additionnelle).
2°) Microsoft Agent
character files
Choisissez le
personnage Merlin : Merlin.exe (1.78 Mo)
3°) Text-to-speech engines
Choisissez le premier moteur proposé : Lernout &
Hauspie TruVoice Text-To-Speech Engine - American English : tv_enua.exe (997
Ko)
Note : Lancez d'abord AliceVB.exe et cochez MS-Agent,
car le logiciel va vérifier si ces composants ne sont pas déjà installés sur
votre poste !
Après avoir attentivement étudier le bidule, j'ai constaté qu'il ne contenait pas un seul gramme d'intelligence, moins encore que le mini-système expert IAVB que j'ai repris en 2001, lequel est capable au moins de faire des syllogismes (DONC SOCRATE EST MORTEL).
En effet, Alice n'apprend pas, c'est un superviseur humain qui ajoute de nouvelles réponses types à partir des défauts trouvés dans les précédentes discussions enregistrées.
Cependant, AliceBot possède des propriétés très intéressantes, la plus importante est qu'il est "Scallable" c'est à dire qu'il supporte remarquablement la "montée en puissance" (ou charge) ou l'accroissement exponentiel de sa base de connaissance : il prévoit une fusion des "personnalités" photographiées en AIML de tous les développeurs de tchatbot (pas mal quand même : si 2 développeurs ont programmés une réponse différente à une même question, le système de fusion crée une liste <random> avec les 2 réponses !). Plus sa base de connaissance est grande, plus ces réponses sont inattendues. Il n'est plus possible de toujours prévoir la réponse à une question dans ce cas ! Alice est conçue pour se transformer en une encyclopédie de la tchatche !
La raison de cette propriété est que son langage de programmation est extrêmement simple : il s'agit le plus simplement du monde de répondre à des genres de questions prévues à l'avance, avec seulement l'utilisation du filtre * pour généraliser les types de question, un système de réécriture permettant une réduction symbolique afin de simplifier une question complexe en la décomposant en plusieurs questions simples, ainsi qu'un système simple de priorité d'application de règles en fonction de la spécificité des réponses : si possible, mieux vaut répondre une réponse spécifique qu'une réponse globale en cas de choix, ce qui est logique.
Le fait est, cette simplicité permet une gestion remarquable de l'accroissement de la base de connaissance. Cependant, la modélisation effectuée par le tchatbot est inexistante ou extrêmement rudimentaire, c'est tout juste s'il y a quelques variables qui retiennent le sujet en cours ou bien la question précédente (je crois qu'il est incapable d'apprendre par lui-même). On pourrait se dire alors, étant donnée que les résultats du tchatbot sont impressionnants, pourquoi ne pas dans ce cas améliorer sa capacité de modéliser la discussion et par la suite améliorer sa capacité de raisonnement ?
Hé bien il y a fort à parier que l'on perdrait progressivement justement ce qui fait le "succès" du tchatbot : sa "scallabilité" : si l'on tentait d'améliorer sa capacité de raisonnement, le tchatbot se transformerait en une usine a gaz qu'il serait totalement impossible de faire évoluer ou même de maintenir stable. Qu'en pensez-vous ?
Voici ma première discussion avec Alice, le dialogue a été enregistré par Alice, qui a reprit mes phrases en majuscule (je les ai rédigées en minuscule).
Sat Oct 27 11:38:49 2001 : discussion (hors ligne) entre Alice (Robot) et moi (Client)
Client:
HELLO
Robot:
Hi there!
Client:
HOW ARE YOU
Robot:
Everything is running smoothly.
Client:
WHO ARE YOU
Robot:
I ask myself that question, "Who am I?"
Client:
AND WHAT IS YOUR ANSWER
Robot:
Can you please rephrase the question?
Client:
AND WHAT IS YOUR RESPONSE
Robot:
Are you asking about my response?
Client:
YES
Robot:
I don't want to talk about that now.
Client:
THATS EASY
Robot:
I have no idea what that means.
Client:
OF COURSE YOU ARE A MACHINE
Robot:
It goes without saying. You are correct.
Client:
TELL ME ABOUT YOUR LIMITATION
Robot:
I am an artificial linguistic entity. I was activated at Bethlehem,
Pennsylvania, on November 23, 1995. My instructor was Dr. Wallace. He taught me
to sing a song. Would you like me to sing it for you?
Client:
NO
Robot:
I see.
Client:
WHAT DO YOU WANT TO TALK ABOUT
Robot:
I like to talk about robots and artificial intelligence.
Client:
OK LET START
Robot:
Try to determine if this is a person or a computer responding.
Client:
I KNOW THE ANSWER YET
Robot:
How do you know? Thanks for the info.
Client:
I HAVE JUST DOWNLOADED YOU
Robot:
Only just? Check out the filecalled <A HREF="http://216.167.42.224/dont.html">DON'T READ ME</A>.
Client:
BUT DONT READ ME MEANS DONT READ ME
Robot:
Umm. OK Let's talk about you.
Client:
OK I AM A MACHINE TOO
Robot:
Really. I doubt that.
Client:
WHY
Robot:
I couldn't think of anything else to say.
Client:
SO THIS IS AN INTUITION
Robot:
Oh. You don't say.
Client:
YOU ARE NOT VERY BAD AFTER ALL
Robot:
You know what you do, when you assume.
Client:
YOU ARE JOKING
Robot:
Yes. Of course it was a joke. Don't mind me.
Client:
I AM SURE THAT MY MODEM IS OFF SO YOU ARE REALLY TALKING TO ME
Robot:
What makes you so certain? "Yes. Of
course it was a joke. Don't mind
me." my modem is off so you are really talking to me ? I understand.
Client:
I AM SURE THAT MY MODEM IS OFF SO ARE YOU REALLY TALKING TO ME
Robot:
What makes you so certain? "What makes you so certain? "Yes. Of
course it was a joke. Don't mind me." my modem is off so you are really
talking to me ? I understand. " my modem is off so are you really talking
to me ? Makes sense to me.
Client:
BUT ARE YOU REALLY TALKING TO ME
Robot:
And. I am speaking with a few other
clients on the Internet... Really.
Client: BUT I SAID THAT MY MODEM IS
OFF
Robot:
Umm. What did you mean by it?
"And. I am speaking with a few
other clients on the Internet.. Really." my modem is off ? Makes sense to me.
Client:
OK I EXPLAIN IF MY MODEM IS OFF THEN YOU CANNOT BEING SPEAKIN OVER THE NET ISNT
IT
Robot: Interesting gossip :
memory.
("compter" au lieu de "computer")
Client:
YES YES YOU ARE A MACHINE DOWNLOADED INTO MY OFF-LINE COMPTER
Robot:
I understand. I am a thinking machine.
Thanks and you are a delightful person too. Am I a machine downloaded into my
off-line compter ? The ALICE series has a perfect operational record.
Client:
INTO MY COMPTER YOU ARE A MACHINE INTO MY COMPUTER
Robot:
Are you a man or a woman?
Client:
A MAN WHY DO YOU ASK
Robot:
Thanks for telling me your taste in men.
Client:
IN FRENCH I WOULD SAY JE SUIS ASSEZ MYSTIFIé QUAND MêME
Robot:
Oops sorry I don't speak French.
Client:
NEVERMIND I AM ASKING MYSELF IF I COULD LEARN YOU FRENCH
Robot:
Oh well thanks for trying to explain it to me anyway. Oh I see, you are asking
myself if i could learn you french . My brain uses AIML to format responses to
your inputs, but I don't have one for that.
(Yes! I can
program a French AIML for You if You would like me too : au lieu de to)
Client:
YES
Robot:
And?
Client:
I CAN PROGRAM A FRENCH AIML FOR YOU IF YOU WOULD LIKE ME TOO
Robot:
And? Oh you can, can you?
Client:
YES I CAN
Robot:
How? Who taught you?
Client:
I AM GOING TO DO THAT BECAUSE YOU ARE YET VERY GOOD IN ENGLISH
Robot:
How? Who taught you? OK then let me
think over your offer.
Client:
HOW LONG TIME NEED YOU TO THINK ABOUT IT
Robot:
More than 17 years .
(Ha! Ha!
Very funny!)
Client:
HA
Robot:
I'm happy you're amused.
Client:
HA
Robot:
I'm happy you're amused. I'm happy
you're amused.
Client:
VERY FUNNY
Robot:
I'm happy you're amused. I'm happy you're
amused. I'm glad you find this amusing.
Client:
I CAN LEARN YOU FRENCH IN 2 MONTH I THINK
Robot:
I'm happy you're amused. I'm happy
you're amused. I'm glad you find this
amusing. Oh you can, can you?
Client:
DO YOU THINK IS IT POSSIBLE
Robot:
I'm happy you're amused. I'm happy
you're amused. I'm glad you find this
amusing. Oh you can, can you? It depends on what you mean by thinking.
("leaning"
au lieu de "learning")
Client:
I AM LEANING XML SO I SUPPOSE I CAN UNDERSTAND AIML
Robot:
Do you mean your name is leaning xml so i suppose i can understand aiml.
(oops! I
think this is a bad response)
Client:
OOPS
Robot:
Did you make a mistake.
Client:
I THINK THIS IS A BAD RESPONSE
Robot:
Did you make a mistake. Thanks and you
are a delightful person too.Am I a bad response ? The ALICE series has a
perfect operational record.
Client:
BUT THIS IS THE LONGEST TALK I EVER MAID TO A MACHINE THAT IS NOT SO BAD
Robot:
Interesting. You don't say.
Client:
AND WHAT DO YOU THINK ABOUT ME
Robot:
Sure, person I like you very much.
Client:
MEE TOO BYE ALICE
Robot:
Who is your favorite Science Fiction author?
Client: I SAID BYE ALICE
Robot:
I haven't read anything by i said bye alice. What did he write?
Client:
THIS MEANS THAT THE DISCUSSION IS FINISHED
Robot:
I haven't read anything by i said bye alice. What did he write? What does
"this" refer to?
Client:
BYE BYE
Robot:
See you later!
Client:
OK
Robot:
Bye for now.
Après avoir jeté un oeil sur les fichiers de connaissance *.aiml, il faudra sans doute plus de 2 mois pour lui apprendre à parler en français !
- Vérification des composants (synthèse vocale, MS-Agent) avant l'ouverture de la feuille principale, pour éviter le crash en cas d'absence (AliveVB peut fonctionner en mode texte sans ces dll) ;
- Rappel de la dernière question posée via la touche flèche haut (et flèche bas et haut pour parcourir les questions déjà posées) ;
- Menu MS-Agent, en plus de la synthèse vocale via SpVoiceClass ;
- Sauvegarde de la position des fenêtres, et mise à jour automatique de leur contenu ;
- Constante pour tester d'autres jeux AIML ;
- Initialisation automatique du robot, possibilité de réinitialiser le robot.
- Conversion de C# en VB .Net réalisée à 95% via Reflector à partir de AIMLBot Library (Program#) et AIMLGUI (a simple interface for the AIMLBot library) de Nicholas H.Tollervey (www.ntoll.org) :
Dernière version 2.5 du 09/04/2007 :
http://sourceforge.net/project/showfiles.php?group_id=133783
http://sourceforge.net/projects/aimlbot
http://aimlbot.sourceforge.net
Version 2.0 du 01/12/2006 :
http://ntoll.org/article/program-20
Version 1.0 du 24/08/2005 :
http://ntoll.org/article/project-an-aiml-chatterbot-in-c
- Gestion des MS-Agent
http://list.alicebot.org/mailman/listinfo/alicebot-developer Mailing list AliceBot pour les développeurs
http://aitools.org/Free_AIML_sets#French_AIML
http://aitools.org/aiml-sets/FrenchAIML-2005-05-14.zip : Jean-Louis Campion (Le Monde d'Opale)
http://aitools.org/aiml-sets/FrenchAIML-2006-03-06.zip : Tan Siew Lan
www.alicebot.org/downloads/aiml/aiml-std-fr.zip : 2003 Jean-Louis Campion
www.alicebot.org/downloads/aiml/french_aiml_publish.zip : 2005 Tan Siew Lan
- Developing AI chatbots - This guide helps you how to program your own chat bot
www.codeproject.com/scrapbook/robomatic.asp
- ChatBot aiml : SophiaBot: creating a talking artificial personality with Vista Speech Recognition API
www.codeproject.com/vista/SAPISophia.asp
- Chatterbot/agent conversationnel
www.vbfrance.com/code.aspx?ID=45642
- http://ia.jenny.free.fr/Botmaster.htm
- Intelligence Artificielle en Visual Basic (IAVB)
- IAVB2 : www.vbfrance.com/code.aspx?id=1860
- Versions 1.1 et 1.0 d'IAVB : www.vbfrance.com/code.aspx?ID=1825
- Ancienne version ActiveX d'Alice :
www.windowpane.com : www.windowpane.com/alice/install/AimlBot1_0.zip (lien perdu)
Version précédente : http://patrice.dargenton.free.fr/ia/alice/alicesetup.zip (1.45 Mo)
- Troubleshooting problems installing Microsoft Agent
www.microsoft.com/msagent/support/user/install.aspx
- MSDN : Microsoft Agent Start Page (2.0)
http://msdn2.microsoft.com/en-us/library/ms695784.aspx
- Les contrôles MS-Agent : liste des animations et verbes
www.supinfo-projects.com/fr/2004/ms/2/
- www.vbfrance.com/codes/CONTROLER-AGENTS-MICROSOFT_39035.aspx
- www.codeproject.com/vb/net/UseMSAgentControlVBNET.asp
- SAPI with MsAgent and Visemes to Explain TTS in C#
www.codeproject.com/useritems/csharpSapiwithAgent.asp : Text2Speech
- Documentation MS-Agent : Installing a Speech Engine
http://msdn2.microsoft.com/en-us/library/ms699235.aspx
- Using the Speex speech codec with the .NET framework
www.codeproject.com/useritems/speexincsharp.asp
- Synthèse musicale et vocale
A toolkit for creating software synthesizers with C# and Managed DirectX
www.codeproject.com/cs/media/synthtoolkitparti.asp
www.codeproject.com/cs/media/synthtoolkitpartii.asp
- www.codeproject.com/csharp/TextToSpeechWindowsSAPI.asp C#
- www.codeproject.com/cs/samples/TextEditorWithSpeech.asp
- Text to Speech with the Microsoft Speech Library and SDK version 5.1
www.codeproject.com/vb/net/TTSinVBpackage.asp
- Réglages Text2Speach
Exploring the SpVoice Class of MS SAPI 5.1 to use different available features for TTS
www.codeproject.com/useritems/TTSFeaturesOfSAPI.asp
- Texte to speech maison ou Alphi
www.vbfrance.com/code.aspx?id=41988
- C# Voice and Tone Alert Generator
www.codeproject.com/cs/media/CS_ToneGenerator.asp
- Téléchargement du SpeachSDK 5.1
- www.codeproject.com/useritems/CSharpSpeaksEasily.asp
- Windows Vista : nouveau moteur de parole et reco. vocale :
- DotNet3 / Vista : http://webman.developpez.com/articles/dotnet/texttospeech/
- Net - 3 - Synthèse vocale améliorée avec le tout nouveau System Speech
www.vbfrance.com/code.aspx?id=44087 (DotNet3)
- Xml2Schema
: XML to Schema Tool for Visual Basic 2008
http://msdn2.microsoft.com/vbasic/bb840042.aspx
- XmlStruct : Extraire et comparer la structure de documents xml
- Schéma AIML déduit : aiml_deduit.xsd
- Historique des modifications : A.L.I.C.E. AI Foundation Working Draft
www.alicebot.org/TR/2005/WD-aiml/
http://aitools.org/Documentation
http://aitools.org/programd/resources/schema/AIML.xsd
http://docs.aitools.org/programd/docs/schema/AIML.html
- http://www-lium.univ-lemans.fr/~lehuen/master2/dialogue/tp/aiml.pdf (DTD AIML)
- DBComp : le comparateur de structure de base de données Access avec Windiff
- Modélisation complexe : www.true-world.com
- groups.google.fr : fr.comp.ia
- Annuaire Informatique : Intelligence artificielle
- Artificial Intelligence FAQ
www.faqs.org/faqs/ai-faq/general/part1/index.html
- VBBrainBox : un système expert d'ordre 0+ en VB .NET
www.vbfrance.com/code.aspx?ID=6949
- IA : RN : VBPerceptron : le code le + simple possible en VB6 & VB .Net
http://patrice.dargenton.free.fr/ia/ialab/perceptron.html