Knut Olav Homlong, CALLMOO-prosjekt

 

Rapport "Bot"-utvikling for Dreistadt

Denne rapporten er del av CALLMOO fase I - sluttrapport

 

Målet for denne delen av prosjektet har vore å lage ein kunstig agent (´botª) til bruk i eit tekstbasert virtuelt landskap (engelsk ’moo’) sett opp for å gjere språktileigninga lettare for tyskstudentar.

Der Bot er laga for at studentar skal ha høve til å snakke om språk medan dei bruker det. Ordlista til boten vil vere ei samling med leksikografiske opplysningar gjevne av studentane sjølve.

Boten kan føre eit vilkårleg tal samtalar samstundes, berre avgrensa av fysiske ressursar. Han kan òg ta opp att samtalar etter vilkårleg lang tid.

Den agenten som no er implementert, er laga for å spørje ut brukarar (heretter ´spelararª) om orda dei bruker når dei snakkar (skrifleg) i lag på moo-en. Agenten lyttar til alt som vert sagt i det rommet han er i. Når han støyter på eit nytt ord, spør han ut spelaren som brukte ordet, om dei grammatiske eigenskapane ved det, og samlar opplysningane i ei ordliste. Det er ei fullformsordliste, det vil seie at kvar bøying av eit ord får sitte eige oppslag. Alle ord og opplysningar om dei stammar frå spelarane på moo-en.

Utgangspunktet for implementeringa av agenten, som lyder namnet ´(Der) Botª, av Roboter, ´robotª, er den generiske boten som finst på dei fleste moo-ane rundt om. Han har tre mekanismar for å generere samtaleliknande Color diskurs av Eliza-typen. Éin ser på enkeltord, éin på mønster (regulære uttrykk) og éin tek seg av setningar med spørjeteikn. Alle tre har gode redigeringsreiskapar, slik at spelarar som kopierer boten, lett kan byggje han ut med nye mønster og svar. DB har overteke desse mekanismane og er rikt utstyrt med svaralternativ for tysk, men Eliza-delen har lavare prioritet enn det som har med ordlista å gjere.

Boten sitt tell-verb slår opp kvart ord som vert sagt i rommet. Dersom eit ord ikkje finst i ordlista, kallar tell eit anna verb, ny_samtale, som opprettar ein ny samtale. Dersom spelaren som snakkar, allereie har ein samtale i gang med boten, vert eit tredje verb, samtale, kalla. Dette verbet prøver å tolke det spelaren har sagt, som eit svar på eit tidlegare spørsmål. For at det skal vere mogleg å halde samtalar i gang i eit miljø med så mykje støy som det kan vere på ein moo, har DB eit minne som held styr på kven han snakkar med, kva han snakkar med dei om , og kor langt i samtalen han er komen.

Dette minnet, lagra i den globale variabelen .stabel, har form av ei liste med kvadruplar på forma <<spelar>, <teljar>, <oppslag>, <templatnummer>>. Kvar slik kvadruppel representerer ein konfigurasjon for ein samtale med ein spelar. <spelar> er det objektet som boten samtaler med, <teljar> er ein teljevariabel som gjev spelaren tre høve til å svare på eit spørsmål før samtalen vert avbroten. <oppslag> byrjar som det ordet samtalen dreier seg om, og vert utbygd til eit fullt ordlisteoppslag etterkvart som spelaren svarer på spørsmål om grammatiske eigenskapar ved ordet. <templatnummer> refererer til det utspørjingsmønsteret som boten skal følgje for den ordklassa det gjeld.

På eit gjeve tidspunkt kan variabelen .stabel sjå slik ut:

{{#470, 0, {"gibt", "v"}, 8}}

Her har lista med konfigurasjonar berre eitt element. Det tyder at boten har éin samtale gåande, med spelaren representert ved objekt nummer 470. Vidare tyder nullen at spelaren ikkje har sagt noko sidan han fekk det siste spørsmålet frå boten. Strukturen {"gibt", "v"} er sjølve ordlisteinnføringa, under arbeid. Spelaren har opplyst at ordforma ´gibtª høyrer til ordklassa verb. Men boten er ikkje nøgd. Det fjerde og siste elementet i konfigurasjonen, åttetalet, refererer til utspørjingsmønster nummer åtte. Utspørjingsmønstera finn vi i den globale variabelen .templat, også han ei liste. Kvart element i utgjer eit mønster som boten følgjer når han spør ut ein spelar om eit ord. Det er eitt mønster for kvar ordklasse. Utspørjingsmønsteret for verb ser slik ut:

{"verb", "v",

{"r Tempus", "tmp",
{{"inf", "i"}, {"praes", "pr"}, {"praet", "pt"}, {"perf", "pe"}}},

{"r Modus", "mod",
{{"imp", "i"}, {"ind", "ind"},
{"konjunktiv", "kon"}}},

{"r Numerus", "num",
{{"sing", "sg"}, {"plural", "pl"}}},

{"r Person", "per",
{{"erste", 1}, {"zweite", 2},
{"dritte", 3}}}}

Det fortel boten at når ein spelar seier at eit ord tilhøyrer ordklassa "verb", skal oppslaget i ordlista ha ordklassesymbolet "v". Vidare skal boten spørje om fire grammatikalske eigenskapar ved ordet: tid, måte, tal og person. Når det gjeld tid, t d, skal boten bruke strengen "r Tempus" for å lage ei korrekt spørjesetning. Trekket tid skal ha trekksymbolet "tmp", og verdien til trekket skal representerast ved trekkverdisymbola "inf", "praes", "praet" eller "perf", alt ettersom kva tid spelaren meiner verbet har. Det endelege ordlisteoppslaget kan sjå slik ut:

{"gibt", "v",
{"tmp", "pr"}, {"mod", "ind"},
{"num", "sg"}, {"per", 3}}

Ordlista er representert som ei liste med slike oppslag, i den globale variabelen .leksikon. Vi ser at oppslaget skal ha like mange element, her seks, som utspørjingsmønsteret har.

For kvar gong noko vert sagt i det rommet der boten er, sjekkar tell først i minnet om den som snakkar, har ein samtale gåande med boten. Dersom ikkje, slår tell opp i ordlista kvart av orda som vart sagde. Dersom alle står der frå før, går tell over i Eliza-modus (som for DB sin del er gjort meir oversiktleg ved å lage ein modul for kvar svarmekanisme).

Men dersom eit av orda ikkje står i ordlista, kallar tell verbet ny_samtale, som legg ein ny samtalekonfigurasjon i minne, t d

{#470, 0, {"gibt"}}

og spør spelaren etter ordklasse før det avsluttar.

Sidan vi ikkje veit ordklassa enno, veit vi ikkje kva slags utspørjingsmønster boten må bruke, så difor manglar templatnummeret i den første konfigurasjonen.

Neste gong spelaren seier noko, t d ´Es ist ein Verbª, kallar tell samtale. Samtale undersøkjer først kor langt ordlisteoppslaget har vorte, altså det tredje elementet i konfigurasjonen over. Dersom det, som i dette tilfellet, enno berre inneheld ordforma ("gibt"), søkjer samtale gjennom replikken til spelaren på jakt etter eit gyldig ordklassenamn, og finn ´Verbª. Samtale lagar då ein ny konfigurasjon,

{#470, 0, {"gibt", "v"}, 8}

lagra i den lokale variabelen n_konfig. Legg merke til at den nye konfigurasjonen har fått templatnummer (element 4) i tillegg til at ordlisteoppslaget (element 3) har fått ordklassesymbol.

Det neste som skjer, er at samtale sjekkar at oppslaget verkeleg har fått tilført informasjon. For dersom spelaren ikkje oppgjev ordklasse, kan ikkje utspørjinga gå vidare. For kvar opplysning boten spør etter, får spelaren tre sjansar til å svare noko som gjev meining. Men dersom spelaren t d snakkar med ein annan spelar i minst tre replikkar, utan å tilfeldigvis nemne ei ordklasse, gjev boten opp og slettar konfigurasjonen han har laga.

Dette skjer på kvart steg i utspørjinga. Dersom oppslaget ikkje vert lengre ved at det får fleire opplysningar, vert det sletta.

Dersom oppslaget har vorte lengre, som i konfigurasjonen over, sjekkar samtale utspørjingsmønsteret for den ordklassa det er snakk om, for å sjå om boten har att meir å spørje om. Dersom oppslaget har fått like mange element som det tilsvarande utspørjingsmønsteret, er boten ferdig med arbeidet. Då legg samtale det ferdige oppslaget inn i ordlista, avsluttar samtalen ved å slette den gamle konfigurasjonen frå .stabel, og avsluttar.

Oppslaget i verb-dømet har til no berre to element: ordet sjølv og ordklassesymbol. Men i utspørjingsmønsteret for verb er det meir enn to element. Det tredje ser t d slik ut:

{"r Tempus", "tmp",
{{"inf", "i"}, {"praes", "pr"}, {"praet", "pt"}, {"perf", "pe"}}}

Samtale bruker då strengen "r Tempus" til å spørje spelaren etter verbtid. Svaret må boten kanskje vente lenge på.

Det siste samtale gjer før det avsluttar, er å byte ut den gamle samtalekonfigurasjonen med den oppdaterte, som har ordklassesymbol og templatnummer.

Framtidige endringar i programmet kan t d gjere at studentar risikerer å verte konfronterte med eigne tvilsame kategoriseringar, når boten oppgjev namn på kjeldene sine.

Elles er det lett å tenkje seg sterkt utbygde utspørjingsmønster, slik at syntaktisk informasjon som t d subkategorisering kan gjerast til emne for utspørjingane.