Käsitys siitä, mitä tietokoneelta voi odottaa, on muuttunut ajan kuluessa. Enimmäkseen vaatimukset ovat kasvaneet: tietokoneilta odotetaan aina vain suurempaa laskentatehoa, tallennus- ja tiedonvälityskykyä. On kuitenkin asioita, joissa ihmisten odotukset tietokoneiden suhteen ovat laskeneet. Lähes kukaan ei enää odota tietokoneiden ymmärtävän ihmisten kieltä, tunnistavan, näkyykö kuvassa vettä, tai arvioivan eri lähteiden luotettavuutta. Nykyajan tietokoneilla lasketaan kymmeniä kolmiulotteisen maailman projektioita sekunnissa, mutta 70--90-luvulla vaativimmat ohjelmat olivat ne, jotka yrittivät ymmärtää monimutkaista maailmaa. Tässä artikkelissa tarkastellaan yleisellä tasolla näiden ohjelmien toimintaa.
Asioiden ymmärtäminen on monimutkainen, mutta ei sentään mahdoton ongelma. Ymmärtävät ohjelmat ovat olleet niin pitkään unohduksissa, että moni arvioi tällaisen ohjelman kehittämisen vaikeammaksi kuin se onkaan. On totta, että tekoälyn kultavuosina oltiin puolestaan aiheettoman optimistisia. Tuohon aikaan aliarvioitiin reippaasti, miten vaikeaa on tehdä ohjelmia, jotka oppivat, osaavat yhdistää kokemuksen käsitteisiin, ja selviävät luonnollisen kielen epätarkkuuksien ja monitulkintaisuuden kanssa. Silti jo 80-luvulla pystyttiin tekemään luonnollisella kielellä ohjattuja ohjelmia, jotka:
Miten nämä ohjelmat oikein toimivat? Mitä tarkoittaa, että ne "ymmärsivät" jotain? Nämä luonnollista kieltä käsittelevät ohjelmat toimivat tyypillisesti siten, että ne jäsensivät luonnollisen kielen ilmauksia joksikin sisäiseksi tietorakenteeksi, joka edustaa ilmausten tietosisältöä. Tällaista tietorakennetta kutsutaan tietämyksen esitysmuodoksi (knowledge representation). Näille tietämyksen esitysmuodoille tehtiin sitten erilaisia operaatioita, kuten etsittiin tietokannoista niihin liittyviä lisätietoja tai päätelmiä, muunnettiin niitä takaisin (jollekin toiselle) luonnolliselle kielelle, lisättiin niiden tiedot tietämystietokantaan tai suunniteltiin tulevaa toimintaa tavoitteiden perusteella.
Tietämyksen esitysmuodot eivät ole mielenkiintoisia ainoastaan ohjelmoinnin kannalta. Tähän päivään asti nämä tekoälyohjelmien käyttämät sisäiset esitysmuodot ovat huolellisimpia ja käytännönläheisimpiä teorioita siitä, mitä merkitys oikeastaan on. Ne ovat myös ainoita teorioita ihmisen toiminnasta, joita on onnistuttu soveltamaan ihmisen kaltaisen toiminnan tuottamiseksi. Nykyajan psykologia ja kognitiotiede ovat hyötyneet myös tekoälytutkimuksen epäonnistumisesta, sillä tietämyksen esitysmuotojen puutteet ja ongelmat ovat tuoneet esiin, miten ihmisen mieli ei toimi. Seuraavaksi tarkastelemme muutamia keskeisimpiä perinteisiä tietämyksen esitysmuotoja.
Jo kauan ennen tietokoneita logiikkaa tutkittiin "ajattelun kielenä". 60-luvulla John Robinson ja muut kehittivät muutamia olennaisia työvälineitä, joiden avulla rakennettiin ensimmäiset päättelyalgoritmit: logiikkalauseiden konjunktiivinen normaalimuoto (CNF) ja sille sovellettava yleispätevä päättelysääntö, resoluutio. Tämä merkitsi, että koneet pystyivät nyt tuottamaan automaattisesti väitejoukon kaikki seuraukset. Tarvitsisi vain kirjoittaa yleisluontoiset säännöt sekä havainnot logiikkalausekkeiksi.
Olettakaamme esimerkiksi, että ohjelma tuntee säännöt:
Predikaattilogiikan lausekkeina nämä voitaisiin ilmaista muodossa:
(seuraa (asiakas ?x ?y) jos (ihminen ?x) (ravintola ?y) (sijaitsee ?x ?y) (ei (töissä ?x ?y))) (seuraa (maksaa ?x ?y) jos (asiakas ?x ?z) (ravintola ?z) (töissä ?y ?z))
Nyt, jos ohjelmalle syötetään tieto "Tepa on ihminen, sijaitsee Krouvi-ravintolassa eikä ole siellä töissä", kone osaa päätellä "Tepa maksaa kaikille, jotka ovat töissä Krouvi-ravintolassa" eli
(seuraa (maksaa Tepa ?y) jos (töissä ?y Krouvi))
Koska logiikka tarjoaa tällaisen tarkan tavan ilmaista sääntöjä ja soveltaa niitä, tämä oli yksi ilmeinen lähestymistapa luonnollisen kielen käsittelyyn: muunnetaan luonnollisen kielen ilmauksia logiikkalausekkeiksi, tehdään niistä päätelmät, ja muunnetaan uudet logiikkalausekkeet takaisin luonnollisen kielen ilmauksiksi. Osoittautui kuitenkin, että logiikka oli hankala väline sääntöjen (ja joskus havaintojenkin) ilmaisemiseen.
Ensinnäkin, ihmisten käyttämät päättelysäännöt eivät usein ole täydellisen varmoja, vaan perustuvat erilaisiin pohjaoletuksiin. Yllä olevissa säännöissä on oletettu, että kaikki ravintolat toimivat samaan tapaan, asiakkaita on vain yhdenlaisia, eikä kukaan oleskele ravintolassa muista syistä. Mitkä näistä oletuksista ovat todella varmoja, riippuu käsitteiden "ravintola", "asiakas" ja muiden määritelmistä. Nämä epävarmuudet voidaan ilmaista logiikassa, jolloin yllä olevaan johtopäätökseen lisättäisiin varaukset "... tai Tepa on epänormaali asiakas tai Krouvi on epänormaali ravintola", mahdollisesti vieläkin useampia varauksia. Muita ratkaisuja epävarmuuteen ovat muun muassa oletuslogiikat ja todennäköisyyslogiikat.
Toisekseen, sanoja on usein vaikea muuntaa logiikan käsitteiksi. Tämä johtuu siitä, että sanat ovat viittaavat usein epämääräisesti monenlaisiin asioihin eikä ole helppoa päätellä, mikä niiden tarkka merkitys on. Logiikkalausekkeiden on kuitenkin oltava ehdottoman paikkansapitäviä, tai niistä seuraa helposti virhepäätelmiä. Luonnollisen kielen lauseita on sitä vaikeampi muuttaa predikaattilogiikaksi, mitä tarkemmin määriteltyjä predikaattilogiikassa käytetyt suhteet ovat. Mutta mitä huonommin nämä suhteet on määritelty, sitä vaikeampaa on kirjoittaa virheettömiä päättelysääntöjä.
Kolmanneksi, predikaattilogiikka soveltuu melko hyvin ikuisten, muuttumattomien asioiden kuvaamiseen, mutta teot, tapahtumat ja aikakehitykset saavat logiikassa hyvin monimutkaisen muodon. Esimerkiksi yllä olevat säännöt tarvitsisivat tarkenteita siihen, että Tepa on asiakas nimenomaan siihen aikaan jolloin sijaitsee ravintolassa. Koska suuri osa luonnollisesta kielestä on erilaisten tilanteiden ja niiden muutosten kuvaamista, monet tekoälytutkijat kehittivät mieluummin omia, käytännönläheisempiä tietämyksen esitysmuotoja.
Logiikka kuitenkin teki mahdolliseksi joitakin pysyviä saavutuksia tekoälyn saralla. Yksi näistä oli se, että erilaiset logiikkaa käyttävät tekoälysovellukset voitiin jakaa kolmeksi osa-alueeksi: tietämyskannaksi, päättelymoottoriksi ja näitä hyödyntäväksi käyttöliittymäksi. Näin pystyttiin tuottamaan uudelleenkäytettävämpiä komponentteja, jotka auttoivat muun muassa monien asiantuntijajärjestelmien kehittämisessä.
Conceptual dependency -esitysmuodon kehitti Roger Schank yhdessä muiden kanssa 60--70-luvun vaihteessa kuvaamaan erilaisten kertomusten asiasisältöä ja auttamaan päätelmien tekemisessä asiasisällöstä. Sen lähtökohtana oli luoda kohtalaisen yleispätevä esitysmuoto, jossa muutamista yksinkertaisista palikoista voisi yhdistelemällä tuottaa kaikki erilaiset merkitykset.
Alkuperäisessä CD-esitysmuodossa primitiivilauseessa oli aina teko, tekijä, teon kohde, lähtöpaikka ja kohdepaikka. Erilaisia tekoja oli vain 11 erilaista, sellaisia kuin siirtyminen (PTRANS), fyysisen voiman kohdistaminen (PROPEL), ajatuksen keksiminen (MBUILD) ja yhdistyminen johonkin (INGEST). Monimutkaisemmat ilmaukset muodostettiin tällaisista primitiivilauseista yhdistelemällä niitä lauseiden välisillä suhteilla: yksi teko saattoi olla toisen kohde, syy tai väline.
Esimerkiksi alla on CD-esitykset ilmauksista "Terhi liikuttaa silmiä", "Terhi oppii artikkelista" ja "Terhi lukee artikkelia":
(MOVE Terhi silmät nil nil) (MTRANS Terhi nil artikkeli Terhi) (INSTR (MOVE Terhi silmät nil nil) (MTRANS Terhi nil artikkeli Terhi))
Alun perin CD-esitysmuotoa käytettiin välimuotona käännettäessä tekstiä kielten välillä. Myöhemmin siihen lisättiin päättelymekanismeja, jotka tuottivat erilaisista tilanteista arvauksia ja parafraaseja esimerkiksi sen perusteella, millaisia tyypillisiä seurauksia niillä on tai minkälaisessa asiainkulussa (eli skriptissä) ne olisivat tyypillisiä tilanteita.
CD-esitysmuodolla saatiin testatuksi monia luonnollisen kielen käsittelyyn liittyviä teorioita ja ideoita. CD-pohjaiset järjestelmät eivät kuitenkaan tuottaneet olennaisia kaupallisia sovelluksia. Yksi syy lienee se, että alkuperäinen oletus 11 perustekotyypistä ei ollut kestävä. Varsinkin ihmisten sosiaalisissa suhteissa on monia tekoja, kuten vaikkapa ehdottaminen, painostaminen ja isyyden tunnustaminen, joiden esittäminen CD-lausekkeina on hyvin monimutkaista. CD-esitysmuotoa laajennettiin jonkin aikaa uusilla käsitteillä, mutta laajempi primitiivijoukko teki CD-rakenteiden käsittelystä hankalampaa.
CD-esitysmuotoa ei ollut koskaan suunniteltu esittämään maailmassa vallitsevia tiloja, ainoastaan tapahtumia. Kun maailman tilan kuvaamiseen tarkoitetut esitysmuodot alkoivat monimutkaistua, monet alkoivat käyttää niitä myös tapahtumien esittämiseen.
Rakkaalla lapsella on monta nimeä. Samaa tai lähes samaa asiaa on aikojen saatossa kutsuttu ainakin semanttisiksi verkoiksi, kehysverkoiksi, konseptuaalisiksi graafeiksi ja suhdekaavioiksi. Semanttiset verkot ovat tietämyksen esitysmuoto, jossa luetellaan erilaisia käsitteitä, niiden välisiä suhteita ja ominaisuuksia. Semanttinen verkko voi olla vain yksi esitystapa predikaattilogiikan lausekkeille (jossa kaikki suhteet ovat binäärisiä eli kahdenvälisiä), mutta monet tekoälyissä käytetyt semanttiset verkot sisältävät muitakin mahdollisuuksia, kuten ominaisuuksien oletusarvoja, dynaamisesti (tarvittaessa) laskettuja ominaisuuksia tai muuta vastaavaa.
Tässä on esimerkki semanttisesta verkosta. Verkko edustaa väitteitä "Panu ja Henna ovat ihmisiä", "Panu ja Henna rakastavat toisiaan" ja "Henna on 22 vuotta vanha".
+---------+ ,---> | ihminen | <-----, | +---------+ | on eräs on eräs | | +------+ <--rakastaa--- +-------+ | Panu | | Henna | ---ikä--> 22 +------+ ---rakastaa--> +-------+
Semanttisten verkkojen ja kehysverkkojen teoria palautuu 1900-luvun alkupuolelle ja siis selkeästi aikaan ennen tietokoneita. 70-luvun puolivälissä Marvin Minsky ja John Sowa kehittivät näihin vanhoihin ajatuksiin perustuvia esitysmuotoja tekoälyohjelmia varten. Tavoitteena oli myös jäljitellä sitä, miten ihminen järjestelee mielessään tietoja suuriksi, yhteen kuuluviksi kokonaisuuksiksi. Yhtä käsitettä suhteineen ja ominaisuuksineen kutsuttiin "kehykseksi", mistä nimi "kehysverkko" tulee. Kehysteoria oli sittemmin yhtenä esikuvana oliopohjaiselle ohjelmointiparadigmalle samoin kuin relaatiotietokantojen tietomalleille. Nykymaailmassa UML-diagrammit tarjoavat vakiintuneen esitystavan semanttisille verkoille.
Semanttisissa verkoissa käsitteet olivat usein prototyyppisia. Se tarkoittaa, että esimerkiksi käsite "ihminen" sisälsi tietoja tyypillisestä ihmisestä sen sijaan, että edustaisi vain kaikkien ihmisten luokkaa. Päättely semanttisessa verkossa on usein vastauksen etsimistä johonkin kysymykseen linkkejä seuraamalla, jolloin ensimmäinen vastaan tullut vastaus yliajaa muut mahdolliset vastaukset. Esimerkkejä tällaisista päätelmistä voisivat olla:
Semanttiset verkot eivät sovellu erityisen hyvin päättelysääntöjen kuvaamiseen, vaan niihin on yleensä lisätty erityisominaisuuksia erilaisten päättelysääntöjen toteuttamisen tueksi, kuten dynaamiset ominaisuudet sen määrittämiseksi, miten yksi ominaisuus (kuten ikä) riippuu toisesta (kuten syntymäajasta). On kuitenkin monenlaista yleistietoa (common knowledge), joka täytyy esittää muin keinoin. Semanttiset verkot ovat silti erittäin monipuolinen tietämyksen esitysmuoto. Yksi moderni semanttisten verkkojen järjestelmä on Hermann Helbigin MultiNet.
Semanttiset verkot soveltuvat myös tapahtumien kuvaamiseen. "Terhi lukee artikkelia" esitetään esimerkiksi näin:
+---------+ +-----------+ ,-----> +------+ | ihminen | | artikkeli | on eräänlainen | teko | +---------+ +-----------+ | +------+ ^ ^ +-----------+ | | | lukeminen | on eräs on eräs +-----------+ | | ^ +-------+ +---+ on eräs | Terhi | | X | | +-------+ +---+ +---+ ^ ^---kohde---- | Y | '------------------------tekijä---- +---+
RDF on melko uusi, World Wide Web Consortiumin (W3C) kehittämä konekäsiteltävän tiedon esitysmuoto, joka on erityisesti suunniteltu auttamaan tiedon tuottaminen hajautetusti yhteistyössä. Pohjimmiltaan se on ominaisuuksiltaan hyvin yksinkertainen semanttinen verkko: RDF-verkot koostuvat kokonaan kolmikoista (kaksi käsitettä ja niiden välinen suhde) eivätkä sisällä mitään perinteisiä helpotuksia päätelmien tai sääntöjen esittämiseen. RDF-verkoissa pystyy tosin viittaamaan verkon kaariin käsitteinä, mutta tätä ominaisuutta (reifiointia) ei hyödynnä juuri kukaan. Käytännössä se tekee mahdolliseksi väitteet, jotka kommentoivat toisia väitteitä, kuten "on hyvä, että Terhi lukee artikkelia".
RDF:ssä olennaisin uudistus vanhoihin tietämyksen esitystapoihin verrattuna on se, että sekä käsitteillä että niiden välisillä suhteilla on maailmanlaajuisesti yksiselitteiset URI-tunnisteet. Näiden tunnisteiden perusteella pystyy helposti viittaamaan muiden määrittämiin käsitteisiin ja suhteisiin ja siten laajentamaan yhtenäistä, maailmanlaajuista tietämysverkkoa. Lisäksi näitä tunnisteita voi käyttää myös linkkeinä, joista voi hakea lisätietoa käsitteestä kone- tai ihmisluettavassa muodossa.
RDF-esitysmuodon käyttötapaukseksi ei niinkään ole ajateltu tilannetta, jossa luonnollisesta kielestä tuotettaisiin automaattisesti RDF-verkkoja. Pikemminkin on ajateltu tapauksia, joissa jo olemassa olevaa koneluettavaa tietoa julkastaisiin RDF-muotoisena, jolloin sitä pystyisi yhdistelemään muihin RDF-muotoisiin tietoihin. Aika näyttää, kuinka paljon tällaista tietoa saadaan tarjolle.
Todellisen maailman ymmärtäminen on paljon tutkittu ongelma, jossa on saatu paljon hyödyllisiä tuloksiakin. Varsinkin deklaratiivisen eli kuvailevan tietämyksen esitysmuodoiksi on tarjolla jo varsin hyviä ratkaisuja. Proseduraalinen eli toiminnallinen tietämys on vähemmän tutkittu alue.
Toivon, että tämä lyhyt esittely tietämyksen esitysmuodoista on tuonut esiin, ettei arkijärkeä soveltavien, arvauksia tekevien tai luonnollista kieltä ymmärtävien ohjelmien kirjoittaminen ole mustaa magiaa. Itselläni on ollut oikein hauskaa ne muutamat kerrat, kun olen päässyt leikkimään merkitysteorioilla esimerkiksi ohjelmoidessani seikkailupelejä.
Pikalinkit: