Blogi 12.2.2020

Tekoälyn hyödyntäminen ESCO-osaamisten haussa

Kiva kun löysit tämän artikkelin! Se sisältää varmasti hyvää tietoa, mutta pidäthän mielessä, että se on kirjoitettu 4 vuotta sitten.

ESCO on ”eurooppalainen monikielinen taito-, osaamis-, tutkinto- ja ammattiluokitusjärjestelmä”, jonka tarkoituksena on muun muassa kuvata, mitä ammatteja on olemassa ja millaisia taitoja ja osaamista eri ammateissa tarvitaan. Kun sekä työnantajan tarve että työntekijän osaaminen on määritelty kieliriippumattomasti, saadaan työpaikat ja työntekijät kohtaamaan tarvittaessa yli rajojenkin. Gofore on mukana rakentamassa Työmarkkinatoria, joka hyödyntää ESCO-luokittelua esimerkiksi työpaikkahaussa.

Vaikka ESCO-luokittelu on ajatuksena erinomainen, sen soveltaminen tavallisen tallaajan elämään on toisinaan haasteellista. Työnhakijalla voi esimerkiksi olla hyvinkin paljon monipuolista osaamista, mutta juuri tiettyä osaamista ESCO-luokitus ei ehkä tunne tai osaaminen on nimetty siten, että sen löytäminen on hankalaa. Koska erilaiset luonnollisen kielen käsittelyyn (natural language processing, NLP) perustuvat tekoälymenetelmät ovat viime aikoina yleistyneet, lähdimme tutkimaan, voisiko niiden avulla löytää helpommin ESCO-luokituksen mukaisia osaamisia. Käytännössä voisimme siis hyödyntää käyttäjän kirjoittamaa tekstiä työhistoriastaan ja osaamisestaan ja ehdottaa sen perusteella ESCO-luokituksen mukaisia osaamisia.

Yksinkertaisesti liikkeelle

Yleensä tekoälysovellusten kanssa kannattaa lähteä liikkeelle jostain mahdollisimman yksinkertaisesta ja kehitellä mutkikkaampia malleja ymmärryksen kasvaessa.

Niinpä tässäkin lähdimme liikkeelle osaamisten nimistä, muutimme ne numeerisiksi vektoreiksi ja etsimme käyttäjän antamaa syötettä lähimpänä olevia osaamisia. Tarkemmin sanottuna sanat jaettiin muutaman kirjaimen pituisiin osasiin, n-grammeihin, ja näin muodostuvan sanaston pohjalta tehtiin osaamisten nimille TFIDF-muunnos. En mene tässä sen teknisempiin yksityiskohtiin, mutta on hyvä huomata, että sanoja ei siis käsitellä sellaisinaan vaan lyhyemmissä palasissa. Asialla on sikäli merkitystä, etteivät suomen kielen taivutusmuodot vaikuta kovinkaan paljon. Myöskään satunnaisilla kirjoitusvirheillä ei ole merkitystä haun onnistumiselle.

Kokeillaanpa antaa algoritmille jokin osaamista kuvaava syöte ja katsotaan, millaisia ESCO-luokituksen mukaisia osaamisia se löytää (kolme kärkiehdotusta):

”Jakaa postia”
kirjata postia
käsitellä postia
hakea posti

Hyvältä näyttää tähän saakka. ”Posti” toki on sanana sellainen, joka ohjaa helposti oikeaan suuntaan. Kokeillaanpa jotain muuta:

”Osaan auttaa pyörätuolin käytössä”
neuvoa asiakkaita silmälasien käytössä
avustaa koneiden ja välineiden käytössä
neuvoa asiakkaita uusien laitteiden käytössä

Nyt käykin niin, että sana ”käytössä” alkaa dominoida hakua, sillä ”pyörätuoli” ei esiinny missään ESCO-osaamisessa sellaisenaan.

Lisää dataa konekäännöksellä

Haun parantaminen olisi helppoa, jos osaamiset olisi kuvattu vähän laveammin. Itse asiassa ESCO-osaamisilla on kyllä parin lauseen kuvaus, joka kertoo mitä osaaminen tarkoittaa. Tätä tietoa ESCOssa ei kuitenkaan ole suomeksi, ainoastaan englanniksi. Yli 13000 kuvaustekstin kääntäminen suomeksi olisi kuitenkin hidasta ja kallista. Ehkäpä tekoälytekniikat voisivat auttaa tässäkin? Teimme muutamia kokeiluja ja totesimme, että monien tuntema Googlen käännöspalvelu tekee nykyään suorastaan hyviä suomennoksia:

Alkuperäinen käännös Konekäännös
Negotiate with the customers the precise terms at which the service will be sold. Neuvottele asiakkaiden kanssa tarkat ehdot, joilla palvelu myydään.
Various processing methods on precious metals such as gold, silver and platinum. Eri jalometallien, kuten kullan, hopean ja platinan, käsittelymenetelmät.

No, aivan kaikki käännökset eivät ole vielä täydellisiä:

Alkuperäinen käännös Konekäännös
Put adhesive on plies by operating the cement stick on drum edge. Pane liima kerroksiin käyttämällä sementtikeppää rummun reunalla.
The joining of two pieces of metal together by deforming one or both so they fit into each other. Kahden metallikappaleen liittäminen toisiinsa muuttamalla muotoaan yksi tai molemmat siten, että ne sopivat toisiinsa.

Meidän käytössämme pienet epätarkkuudet eivät kuitenkaan haittaa, koska konekäännettyä tekstiä ei näytetä lainkaan käyttäjälle, sitä käytetään vain apuna oikeaa osaamista etsittäessä. Kokeillaanpa nyt uudelleen aiempaa tapausta, kun konekäännetyt kuvaukset ovat mukana opetusaineistossa:

”Osaan auttaa pyörätuolin käytössä”
neuvoa erikoisvälineiden käytössä päivittäisissä toimissa
antaa esteettömyysratkaisuihin liittyviä neuvoja
erikoisvälineiden käyttö päivittäisissä toimissa

Huomattavasti parempi! Nyt sana ”pyörätuoli” osataan yhdistää apuvälineisiin ja esteettömyyteen, koska se esiintyy osaamisten kuvaustekstissä.

Olisiko ammatista apua?

Edellä oleva algoritmi toimii jo aika mukavasti tapauksessa, jossa etsitään jotain nimenomaista osaamista. Jos sen sijaan syötteeksi annetaan jotain epämääräisempää, esimerkiksi viittauksia aiempaan työkokemukseen, saadaan selvästi huonompia tuloksia:

”Olen ollut kirjakaupassa harjoittelijana”
järjestää harjoitukset
ottaa osaa harjoituksiin
osallistua urheiluharjoituksiin

Koska osaamisten kuvauksissa ei puhuta kirjakaupasta, algoritmi tarraa ”harjoittelija”-sanaan ja antaa ehdotuksia sen pohjalta. Pohdimme, voisiko ongelman ratkaista unohtamalla osaamiset hetkeksi ja etsimällä sen sijaan ammatin, joka vastaisi syötettä. ESCOssa on kuhunkin ammattiin liitetty joukko osaamisia, joten ammattiin liittyvät osaamiset saamme kyllä listattua kätevästi.

Ammattipulmaa ratkoimme kahdella tavalla. Ensinnäkin ESCOssa on listattu kolmisentuhatta ammattia ja näille on olemassa parin lauseen mittainen (englanninkielinen) kuvausteksti kuten osaamisillekin. Vedimme nämäkin Googlen käännöskoneen läpi ja saimme näin aineistoa ammatin hakuun. Toiseksi, Työmarkkinatorilla on yksityiskohtaiset kuvaukset noin kuudestasadasta ammatista. Näitä datoja ei ole mielekästä yhdistää, joten teemme ammattihaun molemmille datajoukoille ja yhdistämme tulokset. Kokeillaanpa nyt hakea ammattia syötetekstin perusteella:

”Työskentelin ennen päiväkodissa, niin ja koulun keittiöllä”
keittiöapulainen
keittiöpäällikkö
lastenhoitaja

Ei hassumpaa! Ja kun huomioimme useampaan ammattiin kuuluvia osaamisia, ei haittaa niin paljon, vaikka jokin yksittäinen ammattiehdotus olisikin huono. Ammatit kuitenkin osoittavat suunnilleen, miltä kantilta osaamisia kannattaa etsiä. Kokeillaanpa nyt aiempaa esimerkkiä:

”Olen ollut kirjakaupassa harjoittelijana”
pysyä ajan tasalla viimeisimmistä kirjajulkaisuista
myydä kirjoja
suositella asiakkaille kirjoja

Paljon parempi! Puhtaasti ammatin perusteella tehtynä haku tuottaa toki joukon relevantteja osaamisia, mutta yksittäiset ammattiin liittyvät osaamiset tulevat satunnaisessa järjestyksessä. Käytännössä parhaaseen lopputulokseen päästäänkin yhdistämällä eri algoritmien tuottamia tuloksia sopivasti painottaen. Tällainen yhdistelmäalgoritmi toimii myös silloin, kun ammattia ei pystytä määrittämään; silloin haku kohdistuu suoraan osaamisten nimiin ja kuvausteksteihin.

Miten verrata suosittelualgoritmien hyvyyttä?

Ei ole itsestään selvää, miten eri algoritmien toimivuutta pitäisi vertailla. Edellä olevissa esimerkeissä ero on aika selkeä, mutta vaikkapa pienten parametrimuutosten vaikutusten arviointi on useimmiten aika vaikeaa. Jos toinen algoritmi antaa yhden erittäin hyvän osaamisehdotuksen ja toinen useamman keskinkertaisen, kumpi toimii paremmin? Entä jos erittäin hyvä ehdotus tulee vasta viidentenä? Tai viidentenätoista?

Ratkoimme vertailupulmaa tekemällä joukon testitapauksia, joissa syötetekstiin liitettiin käsityönä 10-20 relevanttia osaamista. Sen jälkeen haettiin testattavalla algoritmilla 100 osaamista ja vertailtiin, miten hyvin tavoiteosaamiset löytyivät. Ihannetilanteessa kaikki haetut osaamiset ovat heti kärkijoukossa, huonommassa tapauksessa ne tulevat listalle paljon myöhemmin tai jäävät kokonaan löytymättä.

Yksikään algoritmi ei tietenkään ole tässä mielessä täydellinen, useimmiten osa tavoitelluista osaamisista jää löytymättä. Toisaalta algoritmit tekevät usein varsin hyviäkin ehdotuksia osaamisista, joita vain ei ole tullut otettua mukaan testitapaukseen. Nämä seikat eivät kuitenkaan sinänsä haittaa, koska tavoite ei ole mitata algoritmien absoluuttista hyvyyttä vaan verrata niitä toisiinsa. Se algoritmi, joka nopeammin ja luotettavammin löytää tavoitellut osaamiset, voidaan katsoa paremmaksi.

Johtopäätökset

Edellä kuvatuilla periaatteilla toimiva ”osaamissuosittelija” on jo käytössä Työmarkkinatorilla profiilin täytössä, ja uusia sovelluskohteita löytyy koko ajan. Syöteteksti kun voi olla periaatteessa mitä vain yksittäisestä hakusanasta henkilön itsensä kirjoittamaan esittelytekstiin ja CV:stä työpaikkailmoitukseen. Kehitystyö jatkuu.

Yleisesti ottaen ratkaisussa on mielenkiintoista se, että käytetyt työkalut ja kirjastot ovat kenen tahansa ilmaiseksi ladattavissa, eikä tekniikka sinänsä ole kovin mutkikasta käyttää. Käyttökelpoisen datan löytäminen ja käyttöön saaminen on usein työläämpää kuin sopivien algoritmien kehittäminen. Ottaen huomioon, kuinka paljon tekstiä yrityksillä ja julkishallinnon toimijoilla on varastoissaan, luonnollisen kielen käsittelyn menetelmiä kannattaa varmasti hyödyntää entistä enemmän tulevaisuudessa.

Heikki Niittylä
Data Scientist

Data ja AI

Jyväskylä

Heikki Niittylä

Heikki is a data scientist who has over twenty years experience in software business. He was interested in data science and artificial intelligence when working as a machine vision researcher at the University of Jyväskylä. He has also worked as a software developer, team leader and development manager.

Takaisin ylös