Académique Documents
Professionnel Documents
Culture Documents
04 Rapport de Stage de Dea Fait
04 Rapport de Stage de Dea Fait
R
esum
e :
Le stage de DEA se situe dans le cadre des agents dialogiques, cest-`a-dire des composants
logiciels capables de raisonner sur leur propre structure et fonctionnement pour repondre
`a des requetes (formelles ou, idealement, en langue naturelle).
Il sest deroule au sein du LIMSI-CNRS `a Orsay (91), sous la direction de J.-P. Sansonnet,
et de J.-C. Martin. Mon objectif est de definir une architecture de mediateur pour des
agents conversationnels animes. Durant ce stage, mon activite principale est detablir une
communication / synchronisation entre les trois modules principaux de notre architecture, cest-`a-dire un composant generique `a medier, un agent anime LEA, et un mediateur
contenant une representation symbolique du composant generique.
Remerciements :
`a J.-P. Sansonnet et J.-C. Martin, responsables de stage,
`a S. Abrilian, S. Buisine, pour leur aide sur LEA,
`a E. Augustin, A. Dy, O. Dy, M.-H. Papadopoulos, el`eves de lEPITA, pour leurs
Applets JAVA,
aux personnes qui ont participe `a la premi`ere experimentation de DaftLea.
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
et DAFT
. . . . . .
. . . . . .
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
6
6
7
8
8
10
10
10
11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
13
14
15
15
16
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
20
20
20
21
23
23
27
27
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Exp
erimentation
28
4.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Apport de lexperimentation pour GRASP . . . . . . . . . . . . . . . . . . . 29
4.3 Apport de lexperimentation pour DAFT . . . . . . . . . . . . . . . . . . . 29
5 Conclusion et Perspectives
30
6 Bibliographie
6.1 Th`eme : View Design Language / Mediateur / Observateurs
6.2 Architectures / Model View Controller (MVC) . . . . . . .
6.3 Th`eme : LEA (Limsi Embodied Agent) . . . . . . . . . . .
6.4 Th`eme : Les agents assistants . . . . . . . . . . . . . . . . .
6.5 Th`eme : Les agents conversationnels . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
31
31
31
32
7 ANNEXES
33
7.1 ANNEXE I : Source du composant JAVA : Coco le compteur . . . . . . . 33
7.2 ANNEXE II : Source du mod`ele de Coco le compteur . . . . . . . . . . . 37
1
1.1
Probl
ematique
Contexte de Recherche
Ce stage se place dans le cadre dune collaboration qui demarre entre dune part le
th`eme de recherche de Jean-Claude Martin sur les agents conversationnels animes (projets NICE et HUMAINE) et le th`eme agents dialogiques de Jean-Paul Sansonnet (projet
InterViews et DAFT).
La generalisation des services via lInternet am`ene une nouvelle classe dusagers qui ont des
particularites nouvelles : populations massives, fortement heterog`enes, non specialistes de
linformatique, utilisant les services sporadiquement ; ceci engendre de nouveau besoins sur
trois plans principaux : laccueil de lusager (lui donner confiance, sadapter `a son profil),
lassistance lorsquil est perdu dans le service, voire lapprentissage lorsquil sagit dinteraction plus durable. Ceci a conduit `a proposer des outils dassistance, allant des simples
help on line actuels, dont les resultats sont notoirement decevants, aux tous nouveaux
Agents Conversationnels Animes (ACA) qui se donnent pour objectif de combler le fosse
semantique/cognitif entre lusager et lapplication. Pour ce faire, deux types detudes ont
ete menees : dune part sur la notion dagent dialogique, cest-`a-dire des composants logiciels capables de raisonner sur leur propre structure et fonctionnement pour repondre
`a des requetes (formelles ou, idealement, en langue naturelle) ; et dautre part sur la notion dagent anime, cest-`a-dire generalement des personnages utilisant les modalites
verbales et non-verbales de communication humaine qui accompagnent les applications.
Cette separation est methodologique car la problematique, dans sa generalite, est tr`es
complexe et les questions `a resoudre ne sont pas de meme nature tant au plan des outils
que des communautes scientifiques concernees (IA et TAL pour la premi`ere, IHM et ECI
pour la seconde). Nous pensons quil est necessaire de proposer une architecture logicielle
generique qui permettrait dintegrer les divers outils autour dune meme representation
mediateur, en vue de proposer une chane compl`ete dagent conversationnel anime. Le
point central reside dans la definition de la representation mediateur et surtout dans les
relations quelle etablit avec les outils. Pour donner un exemple de relation, on se pose la
question de lextraction, `a partir de lapplication, de representations (forcement imparfaites) sur lesquelles les outils dialogiques pourront raisonner : que faudrait t-il idealement
extraire ? que peut-on effectivement extraire ? que peut-on attendre de la representation
extraite ? etc.
1.2
Objectifs du stage
un ACA, dans le cadre du projet : LEA (LIMSI Embodied Agent), fourni par J.C.
Martin
Le travail porte plus particuli`erement sur :
Letat de lart et etude des environnements logiciels des agents animes : architectures,
langages de specification, langages de contr
ole dagent.
La proposition dune architecture entre les trois entites de base (le composant effectif,
lagent conversationnel anime et le mediateur) incluant la definition des fonctions
des formats et des protocoles dinterface entre les entites
Des applications tests utilisant lagent LEA du LIMSI-CNRS .
Les applications choisies sont :
Coco le compteur : un simple compteur dont la vitesse de decompte est contr
olable.
Le classique jeu des Tours de Hano.
La representation visuelle des objectifs du stage ci-dessous permettront davoir une
vision plus claire du projet :
1.3
1.3.1
Le th`
eme de recherche ACA : Etat de lart
Introduction
Les agents assistants personnels font partie du grand ensemble des agents intelligents. Dans notre etude, nous commencerons par decrire ce quest un agent intelligent.
Ensuite, nous parlerons des agents conversationnels qui sont des agents intelligents dotes de
la possibilite de dialoguer avec leur utilisateur via le Traitement Automatique du Langage
Naturel. Enfin, nous decrirons les agents assistants personnels. Ces derniers disposent des
competence de dialogue de lagent conversationnel, mais peuvent aussi executer plusieurs
6
D
efinition
Un agent intelligent a plusieurs definitions possibles : il y a ceux qui les assimilent `a
des etre humains, et ceux qui les consid`erent comme de simple programmes. Selon certains chercheurs, un agent est une entite autorisee `a agir au nom de quelquun dautre.
concr`etement, un agent est : une entite logicielle possedant des caracteristiques propres
et agissant dans le but daccomplir une t
ache au nom dune autre entite.
Principe de fonctionnement
Les principaux composants de lagent intelligent sont les suivants :
1.3.3
D
efinition
Lidee des agents conversationnels est nee avec le programme ELIZA (programme simulant
un psychologue) `a la fin des annees 60. Lagent conversationnel (on dit aussi Chatterbot)
est un agent intelligent disposant dun syst`eme de dialogue lui permettant detablir une
communication verbale avec son utilisateur ce qui offre une interaction plus conviviale,
naturelle. On entend par dialogue, lutilisation des differents actes de langages tels que :
une serie de questions/reponses,
emettre une opinion/ un commentaire,
enoncer des faits,
etre declaratif, assertif, expressif...
Les agents incarn
es (i.e. disposant dune representation virtuelle) permettent en plus
de la communication verbale, une communication non-verbale (posture, expression du visage) augmentant ainsi la qualite de la conversation.
Les applications
Il existe plusieurs domaines dapplications pour les Agents conversationnels. Pour le grand
public, les agents conversationnels trouvent leur place dans les outils pedagogiques, les jeux
et lassistance personnalisee (ex : aide `a la navigation personnalisee). En ce qui concerne
les entreprises, les agents conversationnels touchent differents secteurs comme le marketing electronique, la communication entreprise/client. Un agent conversationnel peut, par
exemple, accueillir les visiteurs (internautes) 24h/24 ce qui reduit la gestion co
uteuse des
appels telephoniques et des mails. Lagent contribut aussi `a limage de marque de lentreprise en creant une relation plus humaine et en faisant passer un message aux internautes.
(remarque : le chatterbot de CocaCola est considere comme une vraie personne pour 40 `a
50% des internautes).
Etat actuel des recherches, et vision davenir
La technologie utilisee pour les agents conversationnels est aujourdhui assez simple, elle
est basee sur la reconnaissance des formes. Cependant, la recherche actuelle nous fournit
des programmes danalyse de texte (phrase) tr`es poussees. Les objectifs actuels de la
recherche sont dune part dameliorer la comprehension de texte en offrant la possibilite
de traiter nimporte quel texte (domaines varies, types varies) et, dautre part, de fournir
dautres moyens de communiquer avec lagent conversationnel (ex : telephone portable).
1.3.4
D
efinition
Lagent assistant personnel (IPA : Intelligent Personnal Assistant) est un agent destine
`a nous aider dans notre travail quotidien, un peu comme une secretaire virtuelle. Il nous
aide a executer des taches, il peut aussi en executer `a notre place. Grace `a cet assistant,
lordinateur devient un collaborateur intelligent, actif et surtout personnalise.
Les principaux attributs de cet agent sont :
Autonomie Il doit etre capable dintervenir sans demande de lutilisateur. Pour cela, il
doit observer les actions de lusager, et reconnatre les taches repetitives pour les
automatiser. (Apprentissage, plan daction)
Personnalisation Lagent doit sadapter `a lutilisateur. Au fur et `a mesure de son utilisation, il doit apprendre les habitudes de lutilisateur (exemple : reperer les th`emes
favoris recherches sur Internet pour laider dans la navigation web et lui proposer
des sites en rapport avec ce th`eme), et ainsi adapter son comportement.
Communication Comme un agent conversationnel, lassistant doit etre capable de tenir
un discours avec son utilisateur. La qualite de ce discours est importante : plus le
langage de lagent sera naturel, plus lutilisateur assimilera lagent `a un etre humain.
On doit pouvoir communiquer avec lui de plusieurs mani`eres (mails, web, interface,
telnet, telephone...)
Comp
etence Il doit etre competent dans son domaine dapplication. Cet attribut joue
un role important dans la confiance de lutilisateur vis `a vis du logiciel : Plus lagent
est competent, plus lutilisateur aura confiance et plus il lui donnera de taches `a
executer.
Coop
eration En cas de necessite ; lagent doit pouvoir cooperer avec dautres agents pour
executer une tache plus complexe. Actuellement, cette cooperation avec dautres
agents reste limitee.
Il existe differents types dagents assistants :
les agents semi-autonomes Cest un agent fiable, mais non-competent, lusager doit
programmer lagent (script) pour quil execute des taches.
les agents `
a bases de connaissances On doit fournir `a lassistant une base de connaissance compl`ete sur ses objectifs et sur son (ou ses) utilisateur(s). Il est cependant capable de reconnatre les plans daction de lutilisateur et de lassister durant
lexecution de ces plans. Malheureusement, la conception de ce type dagent demande
beaucoup de travail, notamment pour la creation de la base de connaissance.
les agents apprenants Ces agents poss`edent une base de connaissance initiale, mais
sont capable de lenrichir au cours de leur execution. En effet, ces agents observent
et imitent les actions de lutilisateur. ils peuvent demander conseil `a dautres agents
pour lexecution dune tache complexe. Enfin, lutilisateur peut intervenir si il ne
souhaite pas que lagent execute certaines tache. Ces agents sont consideres comme
fiable car ils sadaptent graduellement au comportement de lutilisateur et peuvent,
si on leur demande, justifier leurs actions.
Lentranement de lagent se fait par apprentissage (Machine Learning). Au debut
de cet apprentissage, lagent est peu competent, mais au fil de ses interactions avec lutilisateur, lagent se personnalise et sadapte `a lusager. Pour cela, il se programme lui
meme en recuperant des connaissances necessaires aupr`es de lusager. La recuperation de
ces connaissances peut se faire de differentes mani`eres :
9
observer/imiter lusager,
sadapter selon les feedbacks de lusager,
`a partir dexemples fournis par lusager,
en se formant aupr`es dautres agents
1.4
1.4.1
Le th`
eme de recherche Agent Dialogique : InterViews et DAFT
Le projet InterViews
InterViews est un projet developpe depuis 2000 dans le groupe AMI du LIMSI-CNRS.
Il introduit la notion dagents dialogiques. Un agent dialogique est un composant ayant
connaissance de son propre fonctionnement, et etant capable de raisonner dessus. Il doit
aussi etre capable de repondre `a des questions (i.e. requetes ecrite en langue naturelle)
sur son fonctionnement. Un domaine dapplication de ce projet est lassistance des usagers
dans lutilisation des services on-line du Web.
voir page Web : http ://www.limsi.fr/Individu/jps/interviews/index.html
1.4.2
Le projet DAFT
DAFT est un projet lance en janvier 2004 dans le groupe AMI du LIMSI-CNRS.
Suite du projet InterViews, il a pour objet linterpretation et la resolution des requetes
utilisateurs dans des situations de mediation dialogique. Pour cela il sappuie sur VDL
10
1.5
DAFTLEA : sp
ecification du projet
Le syst`eme DafLea est une implementation des agents dialogiques. Dans le cadre de ce
stage, certaines contraintes ont ete fixees. Dune part, notre syst`eme doit etre g
en
erique
vis `
a vis du composant, cest `a dire quil doit pouvoir sadapter `a un composant sans
avoir ete programme specifiquement pour ce composant. Enfin, Daftlea doit pouvoir etre
g
en
erique vis `
a vis de lutilisateur, cest `a dire que lutilisateur ne doit pas avoir
`a apprendre un langage precis pour pouvoir contr
oler le composant, mais doit pouvoir
communiquer avec lui en langue naturelle. Enfin, idealement, le syst`eme doit sadapter
aux differents styles linguistiques des usagers.
Fig. 2 Genericite du mediateur vis `a vis de lutilisateur (`a gauche) et vis `a vis du
composant (`a droite)
Pour implementer ce syst`eme nous devrons faire appel `a plusieurs technologies, la
plupart etant developpee par le LIMSI-CNRS :
Afin doffrir la possibilite au composant de raisonner sur son fonctionnement interne,
sur sa structure, nous nous sommes inspires du projet DAFT [J.-P. Sansonnet], et du
projet InterViews [J.-P. Sansonnet] . Ces deux projets nous apportent les notions
de mediateurs, observateurs, langage de representation VDL, langage de requete
VQL.
Afin de rendre plus (( vivante )) notre application, et de faciliter ainsi laspect dialogique avec lutilisateur, nous ferons appel `a la technologie des Agents Conversationnels Animes (ACA), notamment lagent LEA (LIMSI Embodied Agent) developpe
par le LIMSI-CNRS.
11
2
2.1
Le mod`
ele darchitecture DaftLea
Architecture g
en
erale DaftLea
Dans le cadre de notre projet, le mediateur joue un role clef. En effet, il est charge de
traiter les requetes de lutilisateur et dinteragir avec le composant. Pour cela, il comporte
un module de traitement du langage naturel pour analyser les questions ecrites en langue
naturelle (module GRASP), ainsi quune representation symbolique interne du composant
et de son fonctionnement (mod`ele DAFT) pour pouvoir satisfaire aux requetes. Ci-dessous,
une vision simplifiee de la place du mediateur :
2.2
Dans le projet DaftLea, LEA permet davoir une representation visuelle du mediateur.
Elle dispose aussi de quelques fonctionnalites independantes du composant, destinees `a la
rendre plus vivante. Parmis ces fonctionnalites nous avons un syst`eme de production
12
Pr
esentation de lagent LEA
Description du projet
Developpee au LIMSI-CNRS, LEA est un agent conversationnel 2D cartoon-like. Un
des objectifs finaux de ce projet est que LEA puisse adopter un comportement (expression
faciale, gestuel...) base sur une approche experimentale. En effet, si nous souhaitons une
application pedagogique pour LEA, son comportement sera base sur des caracteristiques
issues dannotation de videos (i.e. professeurs filmes pendant un cours).
13
14
Alors que la classe Lea g`ere le comportement de LEA ainsi que les interactions entre
lutilisateur, le composant et le mediateur, la classe Display est destinee `a la gestion des
animations et de la synth`ese vocale. Elle dialogue avec la classe Lea par lintermediaire
de messages. D`es quun ev`enement se produit (saisie de requetes par lutilisateur, fin de
lanimation en cours...), Display transmet un message contenant un code `a la classe Lea qui
devra gerer la reaction de LEA. Cette transmission seffectue grace `a un appel de fonction,
avec pour arguments : le code du message et une chane de caract`ere (representant une
requete saisie, par exemple).
Lea.reaction(String requ^
ete, int code)
2.3
2.3.1
Description de DAFT
description g
en
erale
15
2.3.2
le mod`
ele DAFT
Nous illustrerons le mod`ele DAFT grace `a un exemple de composant : Coco le compteur. Ce composant, ecrit en JAVA, est une simple application simulant un decompte.
Lutilisateur peut acc`elerer/ralentir la vitesse de decompte en agissant directement sur la
GUI du composant.
16
Comme vous pouvez le remarquer, cette representation est tr`es proche de la GUI reelle
de Coco.
Afin detablir une communication entre le mod`ele DAFT et le mod`ele reel (JAVA),
nous devons etablir des relations entre les objets decrits en DAFT et les objets JAVA
du composant. Cet ensemble de liaisons peut etre represente grace `a la DaftOntologie
ci-dessous :
17
2.3.3
le ScriptLanguage
Cet extrait est la description dun objet de type cocorange. Il sagit dun entier
appartenant `a un interval donne. En observant cette description, nous pouvons noter deux
parties :
la premi`ere consiste en la definition de lobjet avec, par exemple, sa valeur initiale
([INIT] ), son label ([LABEL] )...
la deuxi`eme partie contient la description des methodes associees `a lobjet. Une
methode contient un script DAFT agissant sur lobjet, ainsi que la declaration des
liens vers le composant JAVA ([*,JCALL] ), et vers lACA ( [*,LEACALL] ).
La description compl`ete du mod`ele de Coco est disponible en Annexe avec le code source
JAVA de lapplet.
Ce mod`ele permet au mediateur de traiter les requetes qui lui sont envoyees. Une
requete DAFT pourra faire reference aux objets declares de deux mani`eres :
F [x] o`
u F est un acte de langage, et x est le nom de lobjet
F [REF [expr]] o`
u F correspond `a un acte de langage, et REF [expr] est une expression referentielle. Cette methode permet de designer un objet en fonction de ses
caracteristiques (couleur, position dans la GUI, contenu, type, role...).
18
Actuellement, DAFT ne sait traiter quun acte de langage (EXEC) sur les 23 actes prevus :
SPEECH ACT
WANT, NEED, CAN
EXEC, UNDO
ASK, EXIST, CHECK, WHYEXIST, WHYNOTEXIST
WHY, WHYIF, WHYINSTD, HOW
REPLY, ACK, NACK, AGREE, DESAGREE
TELL, LIKE, DISLIKE
HELLO
Cat
egorie
les desirs
les commandes
les questions
largumentation
les opinions
ouverture de session
oOo
19
3.1
Int
egration des diff
erents modules
3.2
3.2.1
Contr
oler LEA
Animer LEA
Le comportement de LEA est gere par un automate deterministe. Nous avons choisi
dutiliser un automate pour des raisons de simplicite. En effet, lutilisation de cette technologie permet une gestion simple et rapide des evenements. Pour contr
oler Lea, lanimer, il
suffit denvoyer des messages `a lautomate qui lancera lanimation appropriee au contenu
du message. Un message contient deux param`etres : le code et la commande. Le code
est un entier permettant didentifier le type de message envoye (lancement dune nouvelle
animation, fin de lanimation en cours...), et la commande est une chane de caract`eres.
Dans le cadre de DaftLea, lautomate recoit deux categories de messages :
Les messages provenant de mediateur : Ils sont destines `a lancer une nouvelle animation o`
u demander `a LEA de designer un objet. Le code dun message contient
le numero de lanimation `a executer, et la commande contient la phrase qui devra etre
synthetisee (JavaSpeech) durant lanimation. Par exemple, le message {HELLO,bonjour,
je suis LEA} demande `a LEA deffectuer lanimation HELLO en disant la phrase
bonjour, je suis LEA.
Les messages internes : Ces messages permettent de gerer lanimation en cours. Ils
peuvent avertir lautomate que lanimation est terminee (code : FIN ANIMATION),
ou que la synth`ese vocale en cours est achevee (code : FIN PARLE). Si lutilisateur saisie une question dans la GUI de LEA, un message sera envoye `a lautomate
qui transmettra la requete au mediateur.
20
D
esigner un objet du composant
Dans certaines situations (faire reference `a un objet, interagir avec un element graphique du composant), notre ACA, Lea, doit pouvoir designer un objet (i.e. un element
graphique du composant, comme un bouton, une zone de saisie...). Pour cela, nous pensions pouvoir le faire en superposant LEA au composant, et en lui faisant pointer, avec
le doigt, lobjet voulu. Mais, suite aux difficultes rencontrees pour superposer LEA au
composant, nous avons decide dutiliser une autre methode : LEA dirige sa main en direction de lelement graphique `a pointer, et lelement graphique est mis en surbrillance. (cf
screenshot ci-dessous)
21
22
3.3
Lune des difficultes majeures, auquelles nous avons ete confronte dans la conception de
DaftLea, fut la synchronisation des deux mod`eles : DAFT et reel (JAVA). En effet, lorsque
lutilisateur interagit directement avec la GUI du composant, notre mediateur doit etre
averti du changement detat du mod`ele JAVA. De meme, lorsque lutilisateur envoit une
requete au mediateur, par lintermediaire de LEA, letat du mod`ele DAFT change, il faut
donc modifier letat du mod`ele JAVA pour les synchroniser. Ce probl`eme est resolu grace
`a larchitecture ci-dessous :
Communication Composant M
ediateur
Un message est envoye au mediateur si une action est effectuee sur lun de ses objets.
Les actions capturees sont le click sur lelement et le survol de la souris au-dessus.
23
24
Apr`es avoir recupere le code source de la classe public, notre syst`eme rep`ere les appels de methode afin de les (( marquer )). Encore une fois, nous utilisons un automate
permettant de les extraire(nom, arguments, objet). Apr`es chaque appel extrait, un
morceau de code est ajoute. Il est destine `a transmettre un message au mediateur
une fois lappel de methode effectue. Le format du message est le suivant :
{METHODE, nomMethode, nomObjet, arg1, arg2...}
25
26
3.3.2
Communication M
ediateur Composant
Lorsque lutilisateur envoit une requete DAFT au mediateur, letat du mod`ele peut
changer. Il faut donc mettre `a jour letat reel du composant. Cette synchronisation seffectue en faisant appel aux methodes du composant associees aux commandes DAFT
executees.
3.4
Le module de traitement des requete DAFT nest quune partie du syst`eme DAFT.
En effet, DAFT consiste en une chane de traitement renvoyant une reponse en langue
naturelle `a partir dune question en langue naturelle.
oOo
27
Exp
erimentation
4.1
Description
Une version test de DaftLea fut creee au debut de la conception du module de traitement du langage naturel. Ne disposant pas `a ce moment l`a de mediateur actif (DAFT
desactive), tout dialogue entre lutilisateur et LEA etait donc impossible. Cependant, lutilisateur pouvait interagir avec le composant (ici, Coco le compteur).
28
4.2
Apport de lexp
erimentation pour GRASP
4.3
Apport de lexp
erimentation pour DAFT
Ce corpus nous a permis de connatre les types de requete les plus frequement posees
au syst`eme. Nous avons pu lister les 23 Speech Acts les plus frequents [cf figure 10]. Enfin,
dans le cadre du traitement de la reference extensionnelle, le corpus a permis de mettre en
evidence les moyens utilises par les utilisateurs pour designer les entites (aussi bien objet
physique que concept logique) de lapplication .
oOo
29
Conclusion et Perspectives
Durant ce stage, nous avons developpe une implementation du projet DAFT : DaftLea, permettant ainsi `a J.-P. Sansonnet dappliquer ses etudes sur la chane GRASP et
le traitement de la reference. De plus, nous avons pu integrer un ACA (LEA) et assurer
une interaction (communication/synchronisation) entre les trois elements principaux du
projet : le composant, le mediateur et un ACA.
Lors de limplementation de DaftLea, nous avons d
u faire face `a plusieurs difficultes :
Probl`emes de communication entre des modules ecrits dans des langages differents
(Mathematica/Java),
Probl`emes de synchronisation semantique entre un mod`ele et le composant : etablir
un maximum de liens entre le mod`ele DAFT et les objets du composant,
Probl`emes de synchronisation physique entre un mod`ele et le composant : mise `a
jour synchrone entre le mod`ele DAFT et letat du composant.
Une deuxi`eme experimentation est prevue pour octobre 2004. Contrairement `a la
premi`ere experience, le module DAFT sera active ce qui permettra `a lutilisateur de
veritablement interagir avec DaftLea. Enfin, une nouvelle version de DaftLea est prevue
pour octobre-novembre 2004, il sagit de DaftWeb, une version On-line de DaftLea. Lenvironnement de LEA etant trop complexe pour etre integre dans une page web, cette
nouvelle version utilisera la technologie Microsoft Agent.
r
esum
e du travail effectu
e:
Dans le cadre de ce stage, mes travaux ont ete principalement orientes vers la communication et la synchronisation entre les modules : LEA, le composant, le mediateur. Lenchanement des etapes pour realiser ceci fut le suivant :
1. Etat de lart sur les agents assisants,
2. Communication entre deux programmes : Java et Mathematica,
3. Prise en main de la technologie LEA,
4. Int`egration dun composant generique dans une interface contenant un agent LEA,
5. Implementation de la premi`ere version de DaftLea contenant : un composant, un
Mediateur et LEA,
6. Mise en place de la communication entre le Mediateur (Mathematica) et le composant,
7. Implementation des premiers mod`eles des composants : Coco le compteur,
8. Resolution des probl`emes de synchronisation entre le composant et le mediateur.
30
Bibliographie
6.1
Th`
eme : View Design Language / M
ediateur / Observateurs
6.2
1. Documentation JAVA SUN, Model View Controller, Java BluePrints - J2EE Patterns, Sun Microsystems.
2. W. Greg Phillips, Architectures for Synchronous Groupware , Technical report 1999425, Department of Computing and Information Science, Queens University.
6.3
Th`
eme : LEA (Limsi Embodied Agent)
1. Sarkis Abrilian, Specification et developpement dinteractions multimodales bidirectionnelles avec un agent conversationnel, rapport de stage de DEA
2. Sarkis Abrilian, Jean-claude Martin, Stephanie Buisine, Algorithms for controlling
cooperation between output modalities in 2D ECA, AAMAS 2002
6.4
Th`
eme : Les agents assistants
1. Emerson PARAISO, Developpement dinterfaces conversationnelles utilisant la parole : application aux agents assistants personnels, journee Heudiasyc, UTC/2003
2. Pattie MAES, lagent reduit le travail et la surcharge des informations, [en ligne],
http ://www.ift.ulaval.ca/ kone/Cours/AM/AM-Present02.ppt
3. Claire GAUZENTE, Veronique GUILLOUX, Marketing relationnel sur Internet :
quelle place pour les agents dinterface ?
31
6.5
Th`
eme : Les agents conversationnels
32
7
7.1
ANNEXES
ANNEXE I : Source du composant JAVA : Coco le compteur
//========================================================================
//--------------------------------COCO le compteur-----------------------//========================================================================
// - applet avec un Thread
// - m
Ime structure que ds mod
Elisation DAFT
//========================================================================
//====================================================================
// initialisation
// -> public void initVariable(): initialisation des variables
// -> public void RAZ(): reinit du compteur
// -> public void init(): premi
Ere init du compteur
//====================================================================
//====================================================================
// GESTION DE LAPPLET
// -> public void fermer(): fermeture de lapplet
// -> public void incr(): compteur+=speed
// -> public void incrSpeed(): speed++
// -> public void decrSpeed(): speed-// -> public void setSpeed(int s): definition direct de la speed
// -> public void stop(): arr
It du d`
Ecompte
// -> public void start(): premier lancement du d`
Ecompte
// -> public void resume(): reprise du decompte
//====================================================================
//========================================================================
// chargement des librairies
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
// cr`
Eation de lapplet
public class Coco extends Applet {
//====================================================================
// les attributs GRAPHIQUE
//====================================================================
public Button _bFermer;
public Button _bStart;
public Button _bStop;
public Button _bRaz;
public Titre _titre;
public Label _lCompteur;
public CLabel _lSpeed;
public CLabel _lEtat;
public Scrollbar _sSpeed;
public Clock _thread;
//====================================================================
// les attributs Moteur
//====================================================================
public int _speed;
public String _etat;
public int _compteur;
//====================================================================
// initialisation
// Aux -> public void initVariable()
// Aux -> public void RAZ()
// Prin -> public void init()
//====================================================================
public void initVariable(){
//--- init des valeurs
_compteur=0;
_speed=1;
_etat="compte";
}
public void RAZ(){
//--- Remise z`
Ero des valeurs
33
initVariable();
_lSpeed.setValue(String.valueOf(_speed));
repaint();
}
public void init(){
initVariable();
//--- init de la fenetre
setLayout(new GridLayout(3,1));
setSize(400,400);
//--- affichage du titre
_titre=new Titre();
add(_titre);
//--- affichage du compteur
add(_lCompteur=new Label(String.valueOf(_compteur)));
_lCompteur.setFont(new Font("Helvetica",Font.PLAIN,40));
_lCompteur.setAlignment(Label.CENTER);
//--- le panneau de contr`
Ule
JPanel pc=new JPanel();
pc.setBackground(Color.LIGHT_GRAY);
pc.setLayout(new GridLayout(1,2));
// le contr`
Ule de vitesse
JPanel ps=new JPanel();
ps.setLayout(new GridLayout(5,1));
ps.add(new JLabel());
ps.add(_lSpeed=new CLabel("speed", String.valueOf(_speed)));
ps.add(_sSpeed=new Scrollbar(Scrollbar.HORIZONTAL,
1,10,0,100));
ps.add(new JLabel());
ps.add(_bFermer=new Button("Fermer"));
pc.add(ps);
// le contr`
Ule de lapplet
JPanel pb=new JPanel();
pb.setLayout(new GridLayout(5,1));
pb.add(new Label());
pb.add(_lEtat=new CLabel("etat",_etat));
pb.add(_bStart=new Button("start"));
pb.add(_bStop=new Button("stop"));
pb.add(_bRaz=new Button("RAZ"));
pc.add(pb);
add(pc);
// finalise la fen
Itre
setSize(640,480);
repaint();
//--------- on associe les m`
Ethodes aux boutons
_bFermer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
fermer();
}
});
_bStart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
resume();
}
});
_bStop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
stop();
}
});
_bRaz.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
RAZ();
}
});
_sSpeed.addAdjustmentListener(new AdjustmentListener(){
public void adjustmentValueChanged(AdjustmentEvent e){
System.out.println("Value: "+e.getValue()+" / "+e.getAdjustmentType());
int sp=e.getValue();
setSpeed(sp);
}
});
//------------------ Le THREAD
34
_thread=new Clock(this);
}
//====================================================================
// GESTION DE LAPPLET
// -> public void fermer()
// -> public void incr()
// -> public void incrSpeed()
// -> public void decrSpeed()
// -> public void decrSpeed()
// -> public void setSpeed(int s)
// -> public void stop()
// -> public void start()
// -> public void resume()
//====================================================================
public void fermer(){
System.exit(0);
}
public void incr(){
_compteur+=_speed;
_lCompteur.setText(""+_compteur);
_lCompteur.repaint();
}
public void incrSpeed(){
_speed+=1;
_lSpeed.setValue(String.valueOf(_speed));
_lSpeed.repaint();
}
public void decrSpeed(){
_speed-=1;
_lSpeed.setValue(String.valueOf(_speed));
_lSpeed.repaint();
}
public void setSpeed(int s){
_speed=s;//.intValue();
_lSpeed.setValue(String.valueOf(_speed));
_lSpeed.repaint();
}
public void stop(){
if (_thread!=null){
_thread.suspend();
_etat="pause";
_lEtat.setValue(_etat);
}
}
public void start(){
if (_thread!=null){
_thread.start();
_etat="compte";
_lEtat.setValue(_etat);
}
}
public void resume(){
if (_thread!=null){
_thread.resume();
_etat="compte";
_lEtat.setValue(_etat);
}
}
}
//====================================================================
// ELEMENTS GRAPHIQUES
//====================================================================
class Titre extends Canvas{
ImageIcon _titre;
public Titre(){
_titre=new ImageIcon("applet/titre.gif");
}
public void paint(Graphics g){
_titre.paintIcon(this,g,0,0);
}
}
class CLabel extends Canvas{
ImageIcon _statut;
String _label;
String _value;
35
36
7.2
D
efinition des classes de coco
Initialisation: INITCLASS
On nutilise pas le ground
INITCLASS["NOGROUND",
$top,
$cocorange,$cocobool,$cocobutton,(* base *)
$cursor,$switch,$counter,$coco (* compos
ees *)
]
Classe $top
NEW[$top,x_]:=(
With[{u=x},Clear[u]];
viewQ[x]=True;
THEVIEWS=Union[Append[THEVIEWS,x]];
x[IKO]=$top;
x[_]=UNKNOWN;
x
);
Classes de base
NEW[$cocorange,$_,jref_,label_,val_,min_,max_]:=(
(* definition de la classe *)
INHERIT[$top,$cocorange,$];
$[JREF]=jref;
$[STRUCT]=VAR;
$[TYPE]=INT;
$[VAL]=val;
$[INIT]=val;
$[MIN]=min;
$[MAX]=max;
$[LABEL]=label;
$[BKGCOLOR]=GRAY;
$[LAYOUT]=FEATURE[LABEL,VAL];
$[USAGE]=JAVACALL["LEA","SPEAK","en r`
eglant la vitesse,
je compterai plus ou moins vite"];
(* Methode INCR: augmentation de la vitesse du compteur *)
$[INCR,LEACALL]=JAVACALL["LEA","SPEAK","la vitesse a
et
e augment
ee"];
$[INCR,JCALL]=JAVACALL["Coco","incrSpeed"];
$[INCR,PRE]=($[VAL]<$[MAX])&;
$[INCR,SCRIPT]=($[VAL]++)&;
$[INCR,MANUAL]=JAVACALL["LEA","POINTE","_sSpeed|pour augmenter la vitesse,
il suffit de cliquer ici"];
(* M
ethode DECR: diminution de la vitesse du compteur *)
$[DECR,LEACALL]=JAVACALL["LEA","SPEAK","la vitesse a
et
e diminu
ee"];
$[DECR,JCALL]=JAVACALL["Coco","decrSpeed"];
$[DECR,PRE]=($[VAL]>$[MIN])&;
$[DECR,SCRIPT]=($[VAL]--)&;
$[INCR,MANUAL]=JAVACALL["LEA","POINTE","_sSpeed|en cliquant ici, vous
pouvez diminuer la vitesse"];
(* M
ethode MODIFY: changement direct de la valeur de la vitesse *)
$[MODIFY,LEACALL] := JAVACALL["LEA","SPEAK","la vitesse a
et
e modifi
ee"];
$[MODIFY,JCALL] := JAVACALL["Coco","setSpeed","INT["<>ToString[$[VAL]]<>"]"];
$[MODIFY,PRE]=($[MIN]$[VAL]$[MAX])&;
$[MODIFY,SCRIPT]=($[VAL]=#)&;
$[INCR,MANUAL]=JAVACALL["LEA","POINTE","_sSpeed|cette scrollbar vous permettra
de r
egler la vitesse"];
(* M
ethode MONTRE: LACA pointe lobjet *)
$[MONTRE, LEACALL]:=JAVACALL["LEA","POINTE",$[JREF]<>"| cest ici."];
(* M
ethode RESET: re-init de la vitesse *)
$[RESET,LEACALL]=JAVACALL["LEA","SPEAK","la vitesse a
et
e r
einitialis
ee"];
$[RESET,JCALL]=JAVACALL["Coco","setSpeed","INT[1]"];
$[RESET,SCRIPT]=($[VAL]=$[INIT])&;
$)
NEW[$cocobool,$_,jref_,label_,val_]:=(
(* D
efinition de la classe *)
INHERIT[$top,$cocobool,$];
$[JREF]=jref;
$[STRUCT]=VAR;
$[TYPE]=INT;
$[VAL]=val;
$[INIT]=val;
$[LABEL]=label;
$[BKGCOLOR]:=If[$[VAL],GREEN,RED];
$[LAYOUT]=FEATURE[LABEL,VAL];
$[LEX]={"etat"};
$[USAGE]:=JAVACALL["LEA","POINTE",$[JREF]<>"|ce panneau vous permet
37
de contr^
oler letat du compteur"];
(* M
ethode ON: activation du d
ecompte *)
$[ON,LEACALL]=JAVACALL["LEA","OK","le compteur est lanc
e"];
$[ON,JCALL]=JAVACALL["Coco","resume"];
$[ON,SCRIPT]=($[VAL]=True)&;
$[ON,MANUAL]=JAVACALL["LEA","POINTE","_bStart|Vous pouvez activer le
compteur en cliquant sur ce bouton"];
(* M
ethode OFF: mise en pause du compteur *)
$[OFF,LEACALL]=JAVACALL["LEA","OK","le compteur a
et
e stopp
e !"];
$[OFF,JCALL]=JAVACALL["Coco","stop"];
$[OFF,SCRIPT]=($[VAL]=False)&;
$[ON,MANUAL]=JAVACALL["LEA","POINTE","_bStop|Pour mettre le compteur
en pause, il vous suffit de cliquer sur ce bouton"];
(* M
ethode SWITCH *)
$[SWITCH,JCALL]:=If[$[VAL],
JAVACALL["Coco","stop"],
JAVACALL["Coco","resume"]
];
$[SWITCH,SCRIPT]=($[VAL]=$[V AL])&;
(* M
ethode RESET: remise `
a z
ero du compteur *)
$[RESET,JCALL]=JAVACALL["Coco","RAZ"];
$[RESET,SCRIPT]=($[VAL]=$[INIT])&;
$[RESET,MANUAL]=JAVACALL["LEA","POINTE","_bRaz|ce bouton vous
permet de r
einitialiser le compteur"];
$)
NEW[$cocobutton,$_,jref_,label_,jcall_,script_]:=(
(* d
efinition de la classe *)
INHERIT[$top,$cocobutton,$];
$[JREF]=jref;
$[ISA]=BUTTON;
$[STRUCT]=CST;
$[LABEL]=label;
$[BKGCOLOR]=darkgray;
$[LAYOUT]=FEATURE[LABEL];
$[LEX]={"bouton"};
(* M
ethode MONTRE: permet de pointer le bouton *)
$[MONTRE, LEACALL]=JAVACALL["LEA","POINTE",$[JREF]<>"| cest ici."];
(* M
ethode CLICK: simule un click sur le bouton *)
$[CLICK,JCALL]=jcall;
$[CLICK,SCRIPT]=script;
$)
Classes compos
ees
$Cursor g`
ere la vitesse du compteur
NEW[$cursor,$_,jref_,val_]:=Module[{speed,bup,bdown},
(* D
efinition de la classe *)
INHERIT[$top,$cursor,$];
$[JREF]=jref;
$[ISA]=CURSOR;
$[LEX]={"cursor","speed","vitesse","scrollbar"};
(* init des
el
ements composant le cursor *)
NEW[$cocorange,speed,"_lSpeed","speed",1,val,100];
NEW[$cocobutton,bup,"_sSpeed","faster",JAVACALL[],DO[speed,INCR]&];
NEW[$cocobutton,bdown,"_sSpeed","slower",JAVACALL[],DO[speed,DECR]&];
(* mise en place des
el
ements *)
$[STRUCT]=SCOPE;
$[PARTS]={speed,bup,bdown};
R
$[ALIAS]={SPEEDspeed};
$[BKGCOLOR]=pink;
$[LAYOUT]=FRAME[DOWN[speed,RIGHT[bup,bdown]]];
(* m
eta op
erateurs **)
$[INCR,SCRIPT]=DO[speed,INCR]&;
$[DECR,SCRIPT]=DO[speed,DECR]&;
$[MODIFY,SCRIPT]=DO[speed,MODIFY,#]&;
$[RESET,SCRIPT]=DO[speed,RESET]&;
(* M
ethode MONTRE: permet de pointer l
el
ement *)
$[MONTRE, LEACALL]=JAVACALL["LEA","POINTE",$[JREF]<>"| cest ici."];
$]
$Switch permet de stop/lancer le compteur
NEW[$switch,$_,jref_,val_]:=Module[{run,bon,boff,braz},
INHERIT[$top,$switch,$];
$[JREF]=jref;
NEW[$cocobool,run,"_etat","running",val];
38
NEW[$cocobutton,bon,"_bStart","start",JAVACALL[],DO[run,ON]&];
NEW[$cocobutton,boff,"_bStop","stop",JAVACALL[],DO[run,OFF]&];
NEW[$cocobutton,braz,"_bRaz","RAZ",JAVACALL[],(DO[run,RESET];
DO[THEMAIN.SPEED.SPEED,RESET])&];
(* lexique associ
e aux elements *)
GLUE[bon,LEX,"start"];
GLUE[boff,LEX,"stop"];
GLUE[boff,LEX,"pause"];
GLUE[boff,LEX,"arr^
et"];
GLUE[braz,LEX,"RAZ"];
$[LEX]={"switch"};
$[STRUCT]=SCOPE;
$[PARTS]={run,bon,boff,braz};
R
$[ALIAS]={STATUSrun};
$[BKGCOLOR]=pink;
$[LAYOUT]=FRAME[DOWN[run,bon,braz,boff]];
(* m
eta op
erateurs **)
$[START,SCRIPT]=DO[run,ON]&;
$[STOP,SCRIPT]=DO[run,OFF]&;
$[SWITCH,SCRIPT]=DO[run,SWITCH]&;
$[RESET,SCRIPT]=DO[run,RESET]&;
$]
$counter repr
esente le compteur (sa valeur)
NEW[$counter,$_,jref_,val_]:=With[{
b=THEMAIN.SWITCH.STATUS,
s=THEMAIN.SPEED.SPEED},
INHERIT[$top,$counter,$];
$[JREF]=jref;
$[LEX]={"counter","compteur"};
$[STRUCT]=VAR;
$[TYPE]=INT;
$[VAL]=val;
$[INIT]=val;
$[BKGCOLOR]=GRAY;
$[LAYOUT]=FEATURE[TYPE,VAL];
$[CLOCK,JCALL]=JAVACALL["_thread","topClock"];
$[CLOCK,PRE]=(GET[b,VAL])&;
$[CLOCK,CODE]=($[VAL]=$[VAL]+GET[s,VAL])&;
(* mapping de m
ethodes *)
$[MAP,"setText"]= ($[VAL]=#)&;
$]
$titre repr
esente le titre du compteur (une simple image dans le composant)
NEW[$titre,$_,jref_]:=Module[{},
INHERIT[$top,$titre,$];
$[JREF]=jref;
$[STRUCT]=VAR;
$[TYPE]=TITRE;
$[VAL]="Coco, le compteur";
$[INIT]="Coco, le compteur";
$[LABEL]="titre";
$[BKGCOLOR]:=BLUE;
$[LAYOUT]=FEATURE[LABEL,VAL];
$[LEX]="titre";
$[MONTRE, LEACALL]=JAVACALL["LEA","POINTE",$[JREF]<>"| la barre
de titre est ici."];
]
Classe Principale: coco
NEW[$coco,$_]:=Module[{t,i,s,b,f},
(* coco est un objet qui d
erive de $top *)
INHERIT[$top,$coco,$];
$[JREF]="Coco";
(* cr
eation des
el
ements composant coco *)
(* le titre *)
NEW[$titre,t,"_titre"];
(* le compteur *)
NEW[$counter,i,"_lCompteur",0];
(* la vitesse *)
NEW[$cursor,s,"_sSpeed",1];
(* le panneau de contr^
ole *)
NEW[$switch,b,"**jref**",True];
(* le bouton de fermeture *)
NEW[$cocobutton,f,"_bFermer","Fermer",
JAVACALL["Coco","fermer"],DAFTCLOSESESSION];
39
(* le lexique associ
e `
a lobjet coco *)
$[LEX]={"coco","compteur"};
$[ABOUT]="Je suis Lea, jai
et
e con
cue par Karl Le Guern, au LIMSI-CNRS";
$[USAGE]="Ma fonction est de vous assister dans lutilisation de
Coco le compteur";
(* mise en place des
el
ements *)
$[STRUCT]=SCOPE;
$[PARTS]={i,s,b};
$[ROLES]={SPEED[s,i],CONTROLSWITCH[b,i]};
R
R
$[ALIAS]={SPEEDs,SWITCH
b};
$[LAYOUT]=FRAME[DOWN[t,i,RIGHT[DOWN[s,f],b]]];
(* m
eta op
erateurs *)
$[CLOCK,SCRIPT]=DO[i,CLOCK]&;
(* mapping de m
ethodes *)
$[MAP,"setSpeed"]= DO[s,MODIFY, #]&;
$]
LAUNCH["coco"]:=INITRUN[$coco]
Launch de coco
Ouverture de la session "Coco"
DAFTOPENSESSION["coco"];
40