Kalle Kotipsykiatri hämmästytti 80-luvun puolivälissä C-64:n kotikäyttäjiä suomen kielen keskustelutaidoillaan. Löysin Mikrobitissä julkaistut Jyrki J. J. Kasvin alkuperäiset BASIC-kieliset lähdekoodit, ja päätin kokeilla miltä Kalle tuntuisi nykypäivän bottitekniikalla toteutettuna. Tavoitteena oli testata suomen kielen ymmärryksen ja tuottamisen haasteita keskustelubottien rakentamisessa. Voit testata harjoituksen tuloksena syntynyttä modernisoitua Kallea selaimellasi.

 

Luonnollisen kielen ymmärtäminen

Keskusteluboteissa käytetään yleisesti luonnollista kieltä ymmärtävää komponenttia käyttäjän syöttämien tekstien tulkitsemiseen. Komponentin vastuulla on purkaa käyttäjän lausahdukset (utterance) botin ymmärtämiksi tavoitteiksi (intent), ja mahdollisesti poimia lausahduksista muuttujia (entity) kuten aika, paikka, tuotteen nimi tms. Esimerkki tämän kaltaisesta palveluna tarjottavasta komponentista on kaikkia valtavirtakieliä koneoppimisen avulla älykkäästi tulkitseva Microsoftin LUIS.

Mallin opettaminen

Luonnollisen kielen tulkinnasta vastuussa oleva tekoälymalli opetetaan määrittelemällä joukko esimerkkilausahduksia, joille annetaan tavoitteen yksilöivä avainarvo. Esimerkiksi lausahduksen “I want to order a cab” käyttäjän tavoitteen ilmaiseva avain voisi olla arvo “ORDER_TAXI”. Samaa tavoitetta varten syötetään yleensä useampi kirjoitusmuodoltaan erilainen esimerkkilausahdus. Mallin koko vaihtelee joistain sadoista jopa tuhansiin opetuslausahduksiin.

Käyttö

Käyttäjän antamaa syötettä peilataan mallin esimerkkilauseisiin. Käytännössä toiminto palauttaa tiedon siitä, mitä esimerkkilausetta käyttäjän syöte eniten vastasi, sekä lausahduksesta mahdollisesti poimitut muuttujat. Vaihtoehtoisesti palautetaan tieto, ettei syöte vastannut mitään mallin sillä hetkellä sisältämää esimerkkilausahdusta.

Kallen kielenymmärrys

Jo alkuperäisen Kallen kielenymmärrys perustui nykyisin käytössä olevaan menetelmään: Ota vastaan syöte, peilaa sitä mallin sisältämiin esimerkkeihin, ja tämän jälkeen palauta avaintieto mitä käyttäjä luultavasti tarkoitti lausahduksellaan. Ratkaisu oli täysin ohjelmallinen – tekoälyä ei tarvitse näin yksinkertaiseen tehtävään.

Kallen lausahduksia tulkitseva osuus perustuu joko fraasin, sanan tai sanan taipumattoman alkuosan (morfeemi) etsimiseen käyttäjän syötteestä. Heti kun vastaavuus löytyy, palautetaan löydetty tavoite “intent” vastauksen tuottavalle modulille. Lisäksi Kalle osasi poimia rajallisesti syötteen mahdollisesti sisältämiä muuttujia esimerkiksi mitä käyttäjä kertoi pelkäävänsä.

Luonnollisen kielen tuottaminen

Kallen suomen kieltä tuottava koodi hakee tietokannasta tavoitetta vastaavat vastaustekstit, ja arpoo mikä vaihtoehtoisista teksteistä palautetaan käyttäjälle. Palautettavasta tekstistä muutetaan vielä hieman sanoja tai sanojen päätteitä (sinä -> minä, me ->te, “-si” –> “-ni” jne.) jotta suomenkielen sanojen taivutus osuu paremmin kohdalleen. Tämän jälkeen muotoiltu vastaus palautuu käyttäjälle.

Miten Kallen äly määritellään?

Modernisoidun Kallen kieltä ymmärtävä äly sekä kallen tuottamat vastaukset määritellään botille Excel-tiedoston avulla. Excelin “intent” rivit sisältävät avainnetut lausahdukset, yksittäiset sanat tai morfeemit joita syötteestä etsitään. “Phrase” – rivi on kallen vastausvaihtoehdot kullekin löydetylle avaimelle. Mikäli vastaavuutta ei löydy esimerkkilauseista, palautetaan avain NO_COMPUTE. Syöttämällä Kallelle hieman toisenlainen määritys-Excel, Kalle voidaan muuttaa käyttäytymään täysin toisella tavalla.

Kalle ja valtavirta

Maailmanlaajuisesti pieni kielialueemme aiheuttaa sen, että suurten toimijoiden helppokäyttöiset ja kohtuuhintaiset täysin suomen kieltä tukevat valmisratkaisut antavat odottaa itseään. Päästäksemme tasoihin valtakielien kanssa tarvitaan ensin perustyötä suomenkielisen kielenymmärrystoiminnon rakentamiseksi. Käytännön haasteita työlle aiheuttaa mm. suomen sanojen taivutusmuodot, jotka ovat nykyisille valtakielten yksinkertaisempaan rakenteeseen ja koneoppimiseen perustuville järjestelmille hieman haastava tehtävä.

Kallesta opittua ja jatkokehitys

Uutta Kallea tehdessäni yritin löytää olemassa olevaa valmista suomenkielen lausahduksia tavoitteiksi ja muuttujiksi kääntävää komponenttia. Voiko tosiaan olla, ettei tällaista ole vielä olemassa?

Modernisointiharjoituksen ja Kasvin kasarikoodin ansiosta minulla on nyt hyvä ymmärrysmodulin alku, jonka päälle työtä voi jatkaa. Komponentti ei vielä ole kovinkaan kummoinen (botti ei läpäisisi Turingin testiä), mutta sen avulla voi jo nopeasti tuottaa esim. suomenkielisen “Usein Kysytyt Kysymykset (UKK)” – keskustelubotin. Veikkaan, että jatkan työtä vapaa-ajallani tämän ensimmäisen harjoituksen jälkeenkin; Ehkä Villikoodi eräänä päivänä julkaisee ensimmäisen suomenkieltä tulkitsevan REST-rajapintapalvelun muiden bottirakentajien käyttöön?

Toinen selkeä kehityskohde on bottien kontekstin ymmärrys. Kalle muistaa käyttäjän viimeksi kirjoittaman tekstin, jotta ohjelma voi pyytää käyttäjää olemaan toistamatta itseään. Muutoin – jokainen käyttäjän kirjoittama lausahdus on Kallelle kuin ensitutustuminen käyttäjään. Asiayhteyden taju (tai pikemminkin sen puute) onkin keskustelubottien keskeisimpiä ongelmia. Sama ymmärtämättömyys vaivaa niin Siriä, Cortanaa, Alexaa, Xiaoicea kuin muitakin kehittyneitä keskustelubotteja. Yleispätevää menetelmää ongelman ratkaisemiseksi ei toistaiseksi ole olemassa.

Kokeile Kallea itse! Alkuperäinenkin Kalle oli jo varsin oivaltava esimerkki suomen kielen käytöstä keskusteluboteissa. On sitä osattu koodata ennenkin, ja tästä on mukava jatkaa!

Linkit ja lisätietoja