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

 

www.vbfrance.com/code.aspx?ID=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

Introduction. 1

Présentation. 2

Schéma AIML. 2

Schéma DTD.. 4

Versions dédoublonnées. 5

Versions non dédoublonnées (ND) 5

Exemple de mise à plat AIML. 5

Analyse des différents jeux AIML. 7

Program# - An AIML Chatterbot in C#. 7

A.L.I.C.E. 7

Annotated A.L.I.C.E. 7

Standard AIML. 7

Français. 8

Conclusion sur les schémas AIML. 8

Comment changer de jeu AIML. 9

Comment faire une version française ? Internationalizing AIMLBot 9

Projets. 10

Installation des MS-Agents. 10

Petite discussion sur AliceBot 11

Historique des versions. 15

Version 1.02 du 07/09/2008. 15

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. 15

Première version 1.0 du 01/11/2001 : Interface VB6 pour COM_ALICELib.AliceBot 15

Liens. 15

Chatbot (Robot de discussion) 15

MS-Agent 16

Synthèse vocale. 16

Schéma AIML et DTD AIML. 17

Divers. 17

 

 

Introduction : Alice passe le test de Turing avec succès !

 

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

 

 

Présentation

 

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.

 

 

Schéma AIML

 

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 :

aiml_deduit.xsd

 

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 :

 

 

Schéma 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.

 

Versions dédoublonnées

 

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\Anglais2002Alice.dtd

DTD\Anglais2004Stdr.dtd

DTD\Anglais2005Alice.dtd

DTD\Anglais2006AAA.dtd

DTD\Anglais2006Stdr.dtd (correspond à la version actuelle d'AIMLBot)

DTD\Francais2003JLC.dtd

DTD\Francais2005JLC.dtd

DTD\Francais2005TSL.dtd

DTD\Francais2006TSL.dtd

 

Versions non dédoublonnées (ND)

 

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

 

 

Exemple de mise à plat AIML

 

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é.)

 

 

Analyse des différents jeux AIML

 

Program# - An AIML Chatterbot in C#

- 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.

 

A.L.I.C.E.

- 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 !

 

Annotated A.L.I.C.E.

www.alicebot.org/aiml/aaa

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'."

 

Standard AIML

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.

 

Français

 

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.

 

 

Conclusion sur les schémas AIML

 

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.

 

 

Comment changer de jeu AIML

 

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"

 

 

Comment faire une version française ? Internationalizing AIMLBot

 

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!

 

 

Projets

 

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.

 

 

Installation des MS-Agents

 

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 !

 

 

Petite discussion sur AliceBot (2001)

 

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 !

 

 

Historique des versions

 

Version 1.02 du 07/09/2008

- 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.

 

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

- 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

 

Première version 1.0 du 01/11/2001 : Interface VB6 pour COM_ALICELib.AliceBot

- Gestion des MS-Agent

 

 

Liens

 

Chatbot (Robot de discussion)

 

www.alicebot.org

  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)

 

MS-Agent

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

 

Synthèse vocale

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.microsoft.com/downloads/details.aspx?FamilyId=5E86EC97-40A7-453F-B0EE-6583171B4530&displaylang=en

 

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)

 

Schéma AIML et DTD AIML

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)

 

Divers

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

http://ai.about.com

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