(toiminnot)

hwechtla-tl: Maailmankuvausprotokolla

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Mikä on maailmankuvausprotokolla?

Sitä mitä nimi sanoo: (tekstuaalinen) muoto maailman kuvaamiseen. Luonnolliset kielet ovat tietenkin tällaisia, mutta niiden hyödyntäminen tietokoneissa on hankalaa. Ihmisetkään eivät ajattele täysin kielellisesti, vaan heillä on sisäisiä esitysmuotoja (representaatioita).

Idea oli muodostaa jonkinlainen käytännöllistetty ja laajennettu muoto predikaattilogiikasta. Predikaattilogiikassa suurin käytännöllisyyttä rajoittava tekijä on predikaattien vakiopaikkaisuus: predikaatteihin ei voi lisätä kontekstuaalisia määreitä, vaan esimerkiksi "mennä(kuka,mistä,mihin)" ja "mennä(kuka,mistä,mihin,millä välineellä)" ovat väistämättä eri predikaatteja.

Toinen lähestymistapa on kaikkien predikaatin liittämien olioiden merkitseminen roolitageilla, esimerkiksi "mennä(tekijä=kuka, lähtöpaikka=mistä, tulospaikka=mihin, väline=millä välineellä)". Luonnolliset kielet noudattavat näiden välimuotoa: yleisimmät roolit liittyvät suoraan predikaatin rektioon, harvinaisemmat / useampia predikaatteja koskevat roolit ovat erillisinä määreinä. Varsinaiset predikaatit, niiden rektiot ja roolitagit vaihtelevat huomattavasti kielten välillä.

Historiaa: wdp

Halusin esitysmuodon, joka säilyttää luonnollisten kielten käytännöllisyyden ja on kuitenkin verrattain helposti käsiteltävissä koneellisesti. Ensimmäinen yritys oli laajentaa IRC-protokollaa modaliteeteilla ja oliopohjaisuudella. Esimerkiksi:

:player can q open              tark.: Pelaaja: "oletko auki, kannu?"
 ^      ^   ^ ^- predikaatti
 `lähde |   `- moodi, q=kysymys
        `- subjekti/objekti 
:can :player can n open         tark.: Kannu pelaajalle: "en ole"

Tai:

:player :hammer can r open      tark.: Pelaaja vasaralle: "avaa kannu"
:player :robot can r at room-1  tark.: Pelaaja robotille: "siirrä kannu
                                        huoneeseen 1"
player q at                     tark.: "Missä pelaaja on?"
:player-1 player-2 r hear :Moi  tark.: "Pelaaja 1 sanoo pelaaja 2:lle 'Moi'"

Tässä on suunnilleen jokainen predikaattilogiikan ongelma, mukaan lukien se, että yksilöolioille (tietty pelaaja, tietty kannu, ...) pitää kehittää yksityiset nimet. Ratkaisuksi kehitetty roolitagattu protokolla (joka tuki myös relatiivilauseita) oli niin monimutkainen, etten jaksa selittää sitä.

Sitä paitsi, tämä alkuperäinen esitysmuoto oli paljon elegantimpi kuin monimutkaistettu versionsa: sillä pystyy tekemään yllättävän paljon täydellisen lineaarisuuden huomioon ottaen. Esimerkiksi pyynnöistä voi tehdä mielivaltaisen pitkiä ketjuja lisäämällä "kaksoispisteytettyjä" tekijöitä alkuun. Ensimmäinen on aina lähettäjä ja toinen seuraava edelleenlähettäjä eli viestin seuraava kohde. Välittävien järjestelmien ei tarvitse edes tulkita viestiä.

Mietin näitä asioita joskus lukiossakin: maailman rakenne kielellisenä

Nykyinen muoto: s-lausekkeet

Kielellinen tieto on luonnostaan esitysmuodoltaan ainakin osittain hierarkkista (vaikka lineaarisuus onkin sen vielä hallitsevampi piirre). Koska pidän käytännöllisyydestä ja vihaan XML:a, S-lausekkeet (LISP-kielen sisäisten tietorakenteiden superyksinkertainen tekstiesitysmuoto) ovat hyvä valinta. Kuvausviestien rakenteellista tulkkaamista on helpotettu ennestään: kaikilla predikaateilla on sama rektio:

(predikaatti moodi subjekti/objekti määreitä...)

Määreet ovat yleensä roolitagattuja eli muotoa (rooli olio). Olio voi olla symboli kuten yllä tai esim. relatiivilause. Moodi edellyttää hiukan erityishuomiota, jottei moodivaihtoehtojen kanssa aja itseään umpikujaan: monia asioita voi ajatella modaliteetteina. Jos moodi edellyttää jonkin argumentin (kuten esim. ajan), se on ehdottomasti määre. Mutta joka tapauksessa moodiksi on syytä varmaankin hyväksyä lista erilaisia määreitä.

Ylläolevat menemisesimerkit olisivat ehkä (a=affirmative eli myönteinen, med=medium):

(trans a kuka (orig mistä) (dest mihin))
(trans a kuka (orig mistä) (dest mihin) (med millä\ välineellä))

Toinen esimerkki: luonnollisen kielen lause "Pieni koira ei ole kirkossa", joka demonstroi myös relatiivilauseita:

(at n (?x (isa a ?x dog) (prop a ?x small))
      (pl (?x (isa a ?x church))))

Edelleen tätä pohdintaa on jatkettu esim. sivulla kv:n tekstipeli (katso kohta "sisäiset kielet").

Yleisiä primitiivejä

Tässä järjestelmässä valittu primitiivien (predikaatit, roolitagit, moodit) joukko on tietysti hyvin olennainen kuvauskielen kauneudelle, kuvausvoimalle, käytännöllisyydelle ja toimivuudelle. Epäröin antaa näistä hirveän tarkkoja ohjeita, mutta uskon ainakin, että moodeiksi / määreiksi tulee eriyttää niin paljon kuin mahdollista, jottei predikaatti ylikuormitu.

Konkreettisia predikaatteja:

isa     olion olemus / luokka
at      olion sijainti (Yale: ptrans, grasp)
prop    olion piirre / tila (Yale: move)
part    mitä olio on osa (Yale: ingest, expel)
focus   tarkkaavaisuuden kohde (Yale: attend)
Sosiaalisia predikaatteja:
own     olion haltija (Yale: atrans)
deem    tieto/mielipide (Yale: mtrans, speak, mbuild)
peruspredikaattien käytöstä

Roolitageja:

ess     jotain, mitä pääolio on (yksi instanssi)
pl      paikka
ag      aiheuttaja (vastaa joskus luonn. kielen subjektia)
med     väline

Moodeja:

a       myönteinen (toteamus ellei muuta mainita)
n       kielteinen (toteamus ellei muuta mainita)
r       toivottu asiaintila
x       tapahtumassa oleva muutos (vallitseva asiaintila muuten)
esim. menemisen voi ilmaista myös (at x kuka (orig mistä) (pl mihin))

Moodien on muuten hyvä olla hierarkkisesti tulkittuja. Tarkastellaan seuraavia lauseita ja niiden käännöksiä:

(prop (n r x) rose red)         "En halua, että ruusu tulee punaiseksi"
(prop (r n x) rose red)         "Haluan, ettei ruusu tule punaiseksi"
(prop (r x n) rose red)         "Haluan, että ruusu tulee ei-punaiseksi"
(prop (x r n) rose red)         "Alan haluta, ettei ruusu ole punainen"
...

Viittausongelma

Viittausongelmaan (yksiselitteisiin kuvauksiin) ainoa ratkaisu, jonka tiedän, on ylläoleva relatiivilauseiden käyttö yhdistettynä LISP-mäiseen (gensym)iin. Esimerkiksi pienen koiran voi lisätä tietokantaan toteamalla:

(let ((dog (gensym)))
        (record-fact `(isa a ,dog dog))
        (record-fact `(prop a ,dog small)))

Relatiivirakenteella annetun osoituksen yksiselitteistäminen edellyttää relevanssiheuristiikkoja ja tietoa kontekstista. Veikkaisin, että tietomuodolla itse asiassa pärjää aika pitkälle tässä suunnassa. Järjestelmä voi esimerkiksi etsiä puhujaa (eri suhteissa) lähellä olevia objekteja ensisijaisesti. Esimerkiksi ilmaus:

Paul -> (?x (prop a ?x name (val "Paul"))) -> paul-1, paul-2, paul-3
yksiselitteistettynä:
(?x (prop a ?x name (val "Paul")) (at a ?x (pl (?y (at a ^sender (pl ?y))))))

upotettu vastaan linearisoitu määre, viittausten evaluointi

Käänteisrelaatiot

Käänteisrelaatiot tuottavat ongelmia. Ei ole esimerkiksi mitään hyvää syytä väittää rakastamisen olevan sen paremmin rakastavan kuin rakastetun ominaisuus. (Japanin kieli osoittaa tämän hyvin: kateellisuus on kadehditun ominaisuus nimeltä "urayamashii".) Myös akkusatiivi- ja ergatiivikielten ero pureutuu tähän ongelmaan.

Otan tähän yleensä sen kannan, että predikaatin primäärinen kohde (subjekti/objekti) tulee olla se olio, jota ilman koko predikaatissa ei ole mieltä. Joskus on aidosti tasapainoisia relaatioita, joissa ei ole mitään mieltä ilman kumpiakin (tai kaikkia) osapuolia. Mutta esimerkiksi rakkauden ja kateellisuuden suhteen japani on oikeassa: on järkevää ajatella jonkun olevan rakastettava tai kadehdittava ilman rakastajaa tai kadehtijaakin, muttei ajatella jonkun olevan rakastava tai kadehtiva ilman kohdetta. Ellei tällä tarkoiteta taipumusta, jolloin kyse on eri ominaisuudesta / modaliteetista kokonaan.

"Tappaa/kuolla" ei ole tasapainoinen relaatio, mutta "hyökätä/puolustaa" on. (Itse asiassa hyökkääminen ja puolustaminen ovat ortogonaalisia, toisistaan riippumattomia, ja molemmat luonnostaan kohteensa ominaisuuksia.) Todellisen symmetriset relaatiot, kuten "taistella", ovat aina tasapainoisia ja tuottavat erikseen ongelmia.

kategoria: projektit kategoria: kieli


Pikalinkit:


kommentoi (viimeksi muutettu 24.08.2012 21:47)