AIML

Un article de Wikipédia, l'encyclopédie libre.

L'Artificial Intelligence Mark-up Language (AIML) est un langage dérivé de XML utilisé pour gérer la connaissance des avatars et bots (robots virtuels). Ce langage utilise une vingtaine de balises de base. Le AIML a été développé par Richard Wallace entre 1995 et 2002.

Vue d'ensemble d'AIML Rédigé à partir d'un article du Dr. Richard S. Wallace.

AIML, ou Artificial Intelligence Mark-up Language permet à des personnes d'insérer de la connaissance dans des robots de discussion basé sur la technologie de logiciel libre d'A.L.I.C.E.

AIML a été développé par la communauté du logiciel libre Alicebot et par moi-même de 1995 à 2000. Il a été, à l'origine, adapté d'une grammaire non-XML également appelé AIML, et a formé la base du premier robot Alicebot, A.L.I.C.E., the Artificial Linguistic Internet Computer Entity.

AIML décrit une classe d'objets de données appelés objets AIML et décrit en partie l'algorithme des programmes pouvant les traiter. Les objets AIML se composent d'unités appelées topics (matières) et catégories. Ces objets peuvent contenir des données à traiter ou non (either parsed or unparsed data).

Les données à traiter (parsed data) se composent de chaînes de caractères, dont certaines sont uniquement des données brutes et d'autres sont des éléments AIML. Les éléments AIML encapsulent la connaissance des stimuli-réponses contenue dans le document. La donnée brute dans ces éléments est parfois analysée par un interprèteur AIML, et parfois laissé en l'état pour être traité plus tard par le système.

Sommaire

[modifier] Catégories

L'unité de base de la connaissance dans AIML s'appelle une catégorie. Chaque catégorie se compose d'une question d'entrée, d'une réponse, et d'un contexte facultatif. La question - ou stimulus - s'appelle le pattern (modèle). La réponse s'appelle le template. Les deux types de contexte facultatif s'appellent le "ça" (that) et le "sujet" (topic). Le langage de modélisation AIML est simple, consistant seulement en mots, espaces, et caractères jocker tel que _ et *. Les mots peuvent être composés de lettres et de chiffres, mais d'aucun autres caractères. Ce langage de modélisation est insensible à la différence entre majuscule et minuscule. Les mots sont séparés par un espace simple et les caractères jocker (wildcard) fonctionnent comme des mots.

Les premières versions d'AIML permettaient seulement un caractère jocker par pattern. Le standard d'AIML 1.01 permet des wildcards multiples dans chaque pattern, mais le langage est conçu pour être aussi simple que possible, plus simple même que des expressions régulières. Un template sert à représenter une réponse dans le langage AIML. Sous sa forme la plus simple, le template se compose seulement d'un texte plat et non marqué.

Plus généralement, les balises AIML transforment la réponse en programme de mini-ordinateur pour sauver des données, lancer d'autres programmes, donner des réponses conditionnelles, et appeler périodiquement l'analyseur de pattern (pattern matcher) pour insérer les réponses issues d'autres catégories. La plupart des balises AIML concerne en fait les patterns.

AIML supporte actuellement deux manières de s'interfacer avec d'autres langages et d'autres systèmes. La balise <system> exécute n'importe quel programme accessible comme commande du système d'exploitation, et insère les résultats dans la réponse. De même, la balise <javascript> permet une programmation à l'intérieur des patterns.

La partie facultative de contexte de la catégorie se compose de deux variantes, appelées <that> et <topic>. La balise <that> apparaît à l'intérieur de la catégorie, et son modèle doit correspondre à la dernière expression du robot. La dernière expression est importante si le robot pose une question. La balise de <topic> apparaît en dehors de la catégorie, et rassemble un groupe de catégories ensemble. Le <topic> peut être placée à l'intérieur de n'importe quel template.

AIML n'est pas exactement une simple base de données de questions-réponses. C'est un langage permettant de modéliser un système de réponse à des questions par reconnaissance de pattern et c'est beaucoup plus simple que quelque chose comme le SQL. Pourtant, AIML inclut la notion de récursivité dans son traitement d'une réponse qui peut au premier abord être difficile à appréhender. Ainsi un template de catégorie peut contenir la balise récursive <srai>, de sorte que a une réponse dépende non seulement une catégorie compatible, mais également toutes les autres périodiquement accédées par le tag <srai>.

[modifier] Récursion

AIML met en application la récursion avec l'opérateur de <srai>. Aucun accord n'existe au sujet de la signification de l'acronyme. Le « A.I. » représente l'intelligence artificielle, mais « S.R. » peut signifier la « stimulus-réponse, » « réécriture syntaxique, » « réduction symbolique, » « récursion simple, » ou « résolution de synonyme. » Le désaccord au-dessus de l'acronyme reflète la variété de demandes de <srai> dans AIML. Chacune de ces dernières est décrite plus en détail dans une sous-section ci-dessous :

  1. Réduction symbolique : Ramener les formes grammaticales complexes à de plus simples.
  2. Diviser et conquérir : Couper une entrée en deux sous-parts ou plus, et combiner les réponses à chacune.
  3. Synonymes : Lier les différentes manières de dire la même chose à la même réponse.
  4. Corrections d'épellation ou de grammaire.
  5. Détection de mots-clés n'importe où dans l'entrée.
  6. Conditionel : Certaines formes d'embranchement peuvent être mises en application avec le <srai>.
  7. Toute combinaison de (1) - (6).

Le danger du <srai> est qu'il permet au maître du robot (botmaster) de créer des boucles infinies. Bien que posant un certain risque aux programmeurs débutants, nous avons pensé que le <srai> était beaucoup plus simple d'utilisation que les balises de commande structurées par bloc itératif.

[modifier] Réduction symbolique

La réduction symbolique se rapporte au processus de simplifier les formes grammaticales complexes en de plus simples. Habituellement, les modèles atomiques dans les catégories stockant la connaissance de robot sont énoncés dans les limites les plus simples possibles, par exemple nous tendons à préférer des modèles comme « QUI EST SOCRATES » à ceux comme « VOUS SAVEZ QUI EST SOCRATES » quand il faut stocker des informations biographiques sur Socrates.

La plupart des formes les plus complexes se réduisent à des formes plus simples en utilisant des catégories d'AIML conçues pour la réduction symbolique :

<category>
<pattern>VOUS SAVEZ QUI EST * </pattern>
<template><srai>QUI EST <star/></srai></template>
</category>

Quelque soit l'entrée qui correspond à ce modèle, la partie liée à l'étoile * peut être insérée dans la réponse avec la balise <star/>. Cette catégorie réduit n'importe quelle entrée de la forme « vous savez qui X est ? » en « qui est X ? »

[modifier] Diviser et conquérir

Beaucoup de différentes phrases peuvent être réduites à deux ou plus sous-phrases, et la réponse constituée en combinant les réponses de chacun. Une phrase commençant par le mot « oui » par exemple, si elle a plus d'un mot, peut être traitée comme la sous-phrase « oui. » plus celle qui la suit.

<category>
<pattern>OUI *</pattern>
<template><srai>OUI</srai> <sr/></template>
</category>

La balise <sr/> est simplement une abréviation pour <srai><star/></srai>.

[modifier] Synonymes

La norme d'AIML 1.01 ne permet pas plus d'un modèle par catégorie. Les synonymes sont peut-être l'utilisation la plus commune du <srai>. Beaucoup de manières de dire la même chose se réduisent à une catégorie, qui contient la réponse :

<category>
<pattern>HELLO</pattern>
<template>Bonjour vous! </template>
</category>
<category>
<pattern>HI</pattern>
<template><srai>HELLO</srai></template>
</category>
<category>
<pattern>Hé vous là</pattern>
<template><srai>HELLO</srai></template>
</category>
<category>
<pattern>Bonjour </pattern>
<template><srai>HELLO</srai></template>
</category>
<category>
<pattern>HOLA</pattern>
<template><srai>HELLO</srai></template>
</category>

[modifier] Correction d'épellation et de grammaire

L'erreur la plus commune simple d'épellation de client est l'utilisation du « your » au lieu de « you're» ou « you are». Mais chaque occurrence de « your » ne peut être transformée en « you're». Un peu de contexte grammatical est habituellement nécessaire pour déceler cette erreur :

<category>
<pattern>YOUR A *</pattern>
<template>Je pense que vous vous voulez dire « you're» ou « you are» non « your. »
<srai>VOUS ETES UN <STAR/></SRAI>
</template>
</category>

Ici le robot corrige l'entrée du client et agit en tant que professeur de langue.

[modifier] Mots-clés

Fréquemment nous voudrions écrire un calibre d'AIML qui est activé par l'apparition d'un mot-clé n'importe où dans la phrase d'entrée. Le format général de quatre catégories d'AIML est illustré par cet exemple emprunté à ELIZA :

<category>
<pattern>MERE</pattern>
<template> Dites m'en davantage au sujet de votre famille. </template>
</category>
<category>
<pattern>_MERE</pattern>
<template><srai>MERE</srai></template>
</category>
<category>
<pattern>MERE_</pattern>
<template><srai>MERE</srai></template>
</category>
<category>
</pattern> _MERE*<pattern>_
<template><srai>MERE</srai></template>
</category>

La première catégorie détecte en même temps le mot-clé quand il apparaît tel quel et fournit la réponse générique. La deuxième catégorie détecte le mot-clé comme suffixe d'une phrase. Le troisième la détecte comme préfixe d'une phrase d'entrée, et finalement la dernière catégorie détecte le mot-clé comme infixe. Chacun des trois <srai> utilise le lien au premier, de sorte que chacun des quatre cas produise la même réponse, mais à elle d'être écrite et stocké seulement une fois.

[modifier] Conditions

Il est possible d'écrire les branches conditionnelles dans AIML, en utilisant seulement la balise <srai>. Considérons trois catégories :

<category>
<pattern>QUI EST-IL</pattern>
<template><srai>QUIESTIL <get name="lui"/></srai></template>
</category>
<category>
<pattern>QUIESTIL *</pattern>
<template>Il est <get name="lui"/>.</template>
</category>
<category>
<pattern>QUIESTIL INCONNU</pattern>
<template>Je ne sais pas qui il est.</template>
</category>

À condition que l'attribut « lui» soit initialisé à « INCONNU », les catégories exécutent une branche conditionnelle selon si « lui » a été placé. Comme convenance au maître du robot, AIML fournit également la fonction équivalente par la balise de <condition>.

[modifier] Ciblage

Les personnalités de robot sont créées et formées par un processus cyclique d'étude dirigée appelée ciblage (TARGETING). Le ciblage est un cycle qui comprend le client, un robot, et un maître de robot, où les entrées de client qui ne trouvent aucun correspondance complète parmi les catégories sont notées par le robot et fournies comme cibles au maître de robot, qui crée alors des réponses appropriées, commençant par les questions les plus communes. Le cycle de ciblage produit progressivement une personnalité de robot de plus en plus fine.

Une technique qui illustre l'art de l'écriture AIML revient à créer des catégories par défaut, qui fournissent des réponses évasives à un éventail d'entrées. Voici un exemple très gentil trouvé sur la liste de diffusion alicebot-general:

Utilisateur : Où puis-je trouver la page Web avec l'australopithèque ?

Alice : Où voulez-vous la trouver ?

Utilisateur : Mauvaise réponse Alice, il est temps d'apprendre une nouvelle ligne

Alice : Comment vous répondriez « Où puis-je trouver la page Web avec l'australopithèque?»

Utilisateur : Je dirais : « http://www.ancientskulls.net/australopithecus.html »

Alice : Merci, humains. Essaie de me reposer la question.

Utilisateur : Où puis-je trouver la page Web avec l'australopithèque ?

Alice : http://www.ancientskulls.net/australopithecus.html

C'est un exemple très agréable. C'est exactement la même chose que le ciblage quand le maître robot est le professeur. Ou je devrais dire, il est une interface d'AIML au ciblage. Naturellement ce scénario soulève beaucoup de problèmes, tels que la façon de jeter dehors les intrus et autres donateurs d'ordures, qui pourraient enclencher l'apprentissage pendant un certain temps, alors que c'est le travail bénévole de beaucoup de chatters d'aider le robot à grandir rapidement en sagesse.

C'est le cœur du problème de l'apprentissage. On en revient toujours à l'édition. Ou bien le maître du robot édite des réponses de bonne qualité pour commencer, ou bien le robot est ouvert au public puis le professeur doit éditer toutes les réponses misérables fournies par le robot aux travailleurs bénévoles. Ma vue personnelle est que, comparé à une machine hypothétique d'étude capable d'apprendre la langue comme un enfant, l'approche de ciblage d'AIML est plus efficace.

[modifier] Contexte

Le mot-clé « that» dans AIML se rapporte à l'expression précédente du robot. Spécifiquement, si le robot répond avec plusieurs phrases, la valeur de « that» est la dernière phrase dans l'ordre. Le choix du mot-clé «that» est motivé par son utilisation dans la langue ordinaire :

R : Aujourd'hui est hier.

C : Cela n'a aucun sens.

R : La réponse est 3.1412926 approximativement.

C : C'est sympa.

Dans AIML, la syntaxe <that> … </that> englobe un modèle qui correspond à l'expression précédente du robot. Une application commune de <that> est utilisée dans des questions oui-non :

<category>
<pattern>OUI</pattern>
<that>VOUS AIMEZ LES FILMS</that>
<template>Quel est votre film préféré ? </template>
</category>

Cette catégorie est activée quand le client dit OUI. Le robot doit découvrir à quoi le client dit oui. Si le robot demande « vous aimez les films ?», cette catégorie correspond, et la réponse « Quel est votre film préféré ?» continue la conversation.

Une application intéressante de <that> sont les catégories qui permettent au robot de répondre aux blagues genre toc-toc. Les catégories :

<category>
<pattern>TOC TOC TOC</pattern>
<template>Qui est là ? </template>
</category>
<category>
<pattern>*</pattern>
<that>QUI EST LA</that>
<template><person/> qui ? </template>
</category>
<category>
<pattern>*</pattern>
<that>* QUI</that>
<template>Ha ha très drôle, <get name="name"/>.</template>
</category>

produisent le dialogue suivant :

C : Toc toc toc.

R : Qui est là ?

C : Banane.

R : Banane qui ?

C : Toc toc toc.

R : Qui est là ?

C : Banane.

R : Banane qui ?

C : Toc toc toc.

R : Qui est là ?

C : Orange.

R : Orange qui ?

C : Orange tout heureux de ne pas avoir dit banane.

R : Ha ha très drôle, Nancy.

Intérieurement l'interprète d'AIML stocke le modèle d'entrée, ce modèle et modèle de matière le long d'un chemin simple, comme : <THAT> D'ENTRÉE CETTE MATIÈRE DE <TOPIC>. Quand les valeurs du <that> ou du <topic> ne sont pas indiquées, le programme place implicitement les valeurs de la correspondance modèle de CELA ou de MATIÈRE au wildcard *.

La première pièce du chemin au match est l'entrée. Si plus d'une catégorie ont le même modèle d'entrée, le programme peut distinguer eux selon la valeur du <that>. Si deux catégories ou plus ont le mêmes <pattern> et <that>, l'étape finale est de choisir la réponse basée sur le <topic>.

Cette structure suggère une règle de conception : ne jamais employer le <that> à moins que vous ayez écrit deux catégories avec le même <pattern>, et ne jamais employer le <topic> à moins que vous écriviez deux catégories avec le mêmes <pattern> et <that>. Toujours, une des demandes les plus utiles de <topic> est de créer les « lignes sujet-dépendantes de collecte, » comme :

name= <topic " VOITURES ">
<category>
<pattern>*</pattern>
<template>
<random>
le <li>What est votre voiture préférée ? </li>
 genre de <li>What de voiture conduisez-vous ? </li>
 <li>Do vous obtenez beaucoup de P.-V.s invariable ? </li>
 la voiture préférée <li>My est une avec un driver.</li>
</random>
</template>

Vu la vaste taille de l'ensemble de choses les gens pourraient dire qui sont grammaticalement corrects ou sémantiquement signicatif, le nombre de choses que les gens réellement disent sont étonnamment petits. Steven Pinker, en son livre comment les travaux d'esprit ont écrit, « dire que vous avez dix choix pour que le premier mot commence une phrase, dix choix pour le deuxième mot (rapportant 100 commencements de deux mots), dix choix pour le troisième mot (rapportant d'des commencements mille trois-mots), et ainsi de suite. (Dix est en fait le moyen géométrique approximatif du nombre de choix de mot disponibles à chaque point en assemblant une phrase grammaticale et sensible). Une peu d'arithmétique prouve que le nombre de phrases de 20 mots ou de moins (pas une longueur peu commune) est environ 1020. »

Heureusement pour des programmeurs de robot de causerie, les calculs de Pinker sont éteints manière. Nos expériences avec A.L.I.C.E. indiquent que le nombre de choix pour le « premier mot » est plus de dix, mais il est seulement environ deux mille. Spécifiquement, environ 2000 exprime des couvertures 95% de tous premiers mots entrés dans A.L.I.C.E. Le nombre de choix pour le deuxième mot est seulement environ deux. Pour être sûr, il y a quelques premiers mots (« I » et « toi » par exemple) qui ont beaucoup de deuxièmes mots possibles, mais la moyenne globale est juste au-dessous de deux mots. Le facteur s'embranchant moyen diminue avec chaque mot successif.

Nous avons tracé quelques belles images du contenu de cerveau d'A.L.I.C.E. représenté par ce graphique (http://alice.sunlitsurf.com/documentation/gallery/). Plus que juste les images élégantes du cerveau d'A.L.I.C.E., ces images en spirale (voir plus) décrivent un territoire de la langue qui « a été efficacement conquise » par A.L.I.C.E. et AIML.

Aucune autre théorie de traitement de langage naturel ne peut mieux expliquer ou reproduire les résultats dans notre territoire. Vous n'avez pas besoin d'une théorie complexe d'étude, de filets neuraux, ou de modèles cognitifs pour expliquer comment causer dans les limites des catégories d'A.L.I.C.E. 25.000. Notre modèle de stimulus-réponse est aussi bon une théorie que tout autre pour ces cas, et certainement le plus simple. S'il y a n'importe quelle pièce encore pour des théories « plus élevées » de langage naturel, elle se trouve en dehors de la carte du cerveau d'A.L.I.C.E.

Les universitaires sont fanatiques d'inventer des énigmes et des paradoxes linguistiques qui montrent censément comment difficile le problème de langage naturel est. « John a vu les montagnes voler au-dessus des mouches à fruit de Zurich » ou « comme une banane » pour indiquer l'ambiguïté de la langue et les limites d'un A.L.I.C.E. - approche de modèle (cependant non ces exemples particuliers, naturellement, A.L.I.C.E. sait déjà elles). En quelques années à venir nous avancerons seulement la frontière plus loin. Le contour de base du graphique en spirale peut regarder la plus ou moins même chose, parce que nous avons trouvé tous les « grands arbres » de « A * » « VOTRE * ». Ces arbres peuvent devenir plus grands, mais à moins que la langue elle-même change nous ne trouverons plus de grands arbres (excepté naturellement dans des langues étrangères). Le travail de ceux cherchant à expliquer le langage naturel en termes de quelque chose plus complexe que la réponse de stimulus aura lieu au delà de notre frontière, de plus en plus dans les hinterlands occupés par seulement les formes les plus rares de langue. Notre territoire de langue contient déjà la plus haute population des phrases qui peuplent l'utilisation. Augmentant les frontières encore plus nous continuerons à absorber les retardataires dehors, jusqu'à ce que le tout dernier critique humain ne puisse pas penser à une phrase « pour duper » A.L.I.C.E.

[modifier] Voir aussi

[modifier] Articles connexes

[modifier] Références externes