Tekoäly viestin luotettavuuden arvioitsijana

Janne Kauttonen
Tässä ensimmäisessä blogimerkinnässäni käyn läpi miten projekti “Tekoäly viestin luotettavuuden arvioitsijana” toteutetaan. Kuvailen projektin keskeiset työvaiheet yleisellä tasolla ja jätän tarkemmat yksityiskohdat tuleviin merkintöihin.
Projektin tavoitteena on laskea tekoälyn avulla “luotettavuusarviot” joukolle suomenkielisiä tekstinäytteitä (n. 300-800 sanaa/teksti). Pyrimme rakentamaan ohjelman, joka lukee annetun tekstin, käsittelee sen automaattisesti ja tuottaa sille numeerisen luotettavuusarvion. Ohjelman käyttämä malli perustuu koehenkilöiden tuottamaan opetusdataan. Tämän datan kerääminen on keskeinen osa projektia. Sana “tekoäly” tarkoittaa käytännössä laajaa kirjoa erilaisia (ohjattuja) koneoppimis- ja data-analyysimenetelmiä.
Projektissa on seuraavat työvaiheet:
- Tekstiaineiston kerääminen ja muokkaaminen (n. 300 tekstinäytettä)
- Online kyselytutkimus, jossa koehenkilöt arvioivat valittujen tekstien luotettavuutta
- Tekstien luotettavuusarvion määrittäminen kyselyn perusteella
- Koneellinen tekstin luotettavuusarviointi (“tekoäly”)
Työvaiheet ovat hyvin erilaisia. Vaiheet (1) ja (2) pitävät sisällään esim. tieteenfilosofisia, käyttäytymistieteellisiä ja journalistiikkaan liittyviä asioita. Näiden työvaiheiden ainut teknisempi osuus liittyy itse kyselyn toteuttamiseen verkossa. Vaiheissa (3) ja (4) työ on puolestaan pääosin teknistä ja koostuu data-analyysistä, laskennallisten menetelmien testauksesta ja itse ohjelman koodauksesta.
Vaihe (1) sisältää raakaa manuaalista työtä jossa keräämme tekstejä, muokkaamme niitä ja arvioimme niiden soveltuvuutta. Pyrimme valitsemaan tekstit joiden luotettavuusarviot vaihtelevat tekstien välillä, mutta ovat kuitenkin yhdenmukaisia yksittäisten tekstien kohdalla. Vaiheessa (2) kysely avataan yleisölle ja (toivottavasti suuri) joukko koehenkilöitä arvioi tekstien luotettavuutta asteikolla 1-8. Yksittäinen koehenkilö arvioi satunnaisotannalla poimitut tekstit (pieni osa kaikista teksteistä). Vaiheessa (3) kyselyn vastausten perusteella jokaisen tekstin luotettavuudelle lasketaan optimaalinen keskiarvo, joka edustaa populaation näkemystä kyseiselle tekstille. Sivutuotteena saamme kyselystä myös käyttäytymistieteellistä dataa, jota voidaan analysoida tilastollisesti.
Vaiheessa (4) meillä on tekstit (datamatriisi X) ja niiden luotettavuusarviot (datavektori Y), ja haluamme ratkaista ongelman F(X) = Y, missä F on näiden kahden muuttujan välinen funktio. Tämä on tyypillinen regressio-ongelma (Y:n arvot liukulukuja) tai vaihtoehtoisesti luokitteluongelma, mikäli Y muunnetaan kategoriseksi (esim. asteikolle “luotettava” ja “epäluotettava”). Näiden ratkaisemiseen käytämme sekä perinteisiä koneoppimismenetelmiä (esim. logistinen regressio, tukivektorikoneet, päätöspuut), että neuroverkkoja (esim. rekursiiviset verkot). Ennen kuin varsinaiseen laskentaan päästään, pitää tekstit kuitenkin muuttaa numeeriseen muotoon. Tämä ei ole aivan yksinkertainen operaatio ja Suomen kieli tuo asiaan omat lisähaasteensa. Ohjelmointikielenä käytetään pääasiassa Pythonia ja sen lukuisia open-source kirjastoja (mm. scikit-learn, omorfi, Gensim ja Keras).
Vaiheessa (4) ongelma on teknisesti vastaava kuin esim. roskapostin suodattaminen (spammi vai normaali), elokuvien ja tuotekuvausten arviointi (hyvä vai huono) ja sentimentaalianalyysi (negatiivinen vai positiivinen sävy). Aiheen akateeminen tutkimus on kiivasta. Yhtä parasta ratkaisumenetelmää ei ole vaan se riippuu vahvasti kontekstista (datasta). Projektistamme tekee erityisen haastavan se, että toisin kuin esim. roskapostin suodatuksessa, tekstin luotettavuus on epämääräisempi ja subjektiivisempi käsite. Miten yhdenmukaisia ihmisten luotettavuusarviot ovat ja löytyykö sellaista funktiota F joka yleistyy riittävästi erilaisten tekstien välillä? Lisäksi käytössämme on vain n. 300 tekstinäytettä, mikä on hyvin pieni määrä vaikealle koneoppimisongelmalle. Tarvitsemme siis runsaasti kekseliäisyyttä, teknisiä kikkoja ja eri menetelmien kokeilemista.