[voikko] Voikon käyttäminen morfologiseen segmentointiin

Sami Liedes sami.liedes at iki.fi
Sun Feb 20 15:44:24 EET 2022


Moi,

Olen käyttänyt Voikkoa sanojen jakamiseen morfeemeihin (morfologiseen
segmentointiin) ja perusmuotojen löytämiseen koneoppimistarkoituksiin.
Ratkaisuni tähän ei toimi ehkä ihan ideaalisella tavalla, mutta ajattelinpa
silti jakaa kahdella ajatuksella: 1) ehkä jollain on ideoita siihen, miten
tehdä tämä paremmin; 2) ehkä tästä on jotain hyötyä jollekulle.

Tämän hetken ratkaisuni on siis mielestäni jo aika hyvä, ja voin sen kanssa
elää. :) Olen hyvin tietoinen siitä, että Voikon vahvin fokus lienee
oikoluvussa, joten on vain bonusta, jos sillä voi tehdä jotain tällaista.

Käytännössä tavoitteeni on jäsentää sanoja suunnilleen kaavaan

   [runko%]morfeemi + [runko%]morfeemi + ...

Esimerkkisana: "hallitsemaan"
Tulos: hallita%hallitse + ma + an

Esimerkkisana: "opiksenne"
Tulos: oppi%opi + kse + nne

-----

Tiedän, että ongelma on hiukan huonosti määritelty, eikä se haittaa minua;
haluan vain jotain järkevää outputtia suurimman osan ajasta.

Tällä hetkellä käytän tämän tekemiseen Voikon palauttamaa FSTOUTPUT-kenttää
(esim. voikkospell -m tai Pythonissa Voikko.analyze()). Esimerkkisanoille:

A(hallitsemaan):1:FSTOUTPUT=[Lt][Xp]hallita[X]hallitse[Tn3][Ny][Sill]maan
A(hallitsemaan):1:WORDBASES=+hallita(hallita)

A(hallitsemaan):2:WORDBASES=+hallitse(hallita)+m+a(+a)
A(hallitsemaan):2:FSTOUTPUT=[Lt][Xp]hallita[X]hallitse[Ln][Rm]m[Xj]a[X][Sill][Ny]aan

A(opiksenne):1:FSTOUTPUT=[Ln][Xp]oppi[X]opi[Str][Ny]kse[O2m]nne
A(opiksenne):1:WORDBASES=+oppi(oppi)

Ymmärtämättä kovin paljoa tuosta FST-outputista olen päätynyt
seuraavanlaiseen yksinkertaiseen algoritmiin:

1. Korvaa kaikki [X]:t %-merkillä.
2. Korvaa kaikki muut [..]-tokenit +-merkillä
3. Poista peräkkäiset +-merkit.

Silloin kun voikko tarjoaa useampaa jäsennystä sanalle ja tämän tuloksena
saataisiin erilaisia morfeemisegmentointeja (joskus saadaan useampi
jäsennys, mutta segmentointi on sama), olen joko jättänyt kokonaan
segmentoimatta tai valinnut manuaalisesti näistä oikean. Tämä on minulle
ihan riittävän hyvä ratkaisu, ja oikeastaan näiden valinta käsin
tarjotuista vaihtoehdoista ei ole ole niin työlästä kuin voisi kuvitella;
koodasin ohjelman, joka tarjoaa tähän valikon, ja annotoin koulutustekstinä
käyttämästäni Raamatusta monitulkintaisista tapauksista noin neljäsosan
parissa tunnissa. (Tähän toki auttaa se, että koodasin mukaan kyvyn sanoa,
että älä tarjoa tätä perusmuotoa enää koskaan. Listaan kertyy paljon
sellaisia sanoja kuten ravi(ravin)+tosi(tosi), kylki+luinen, taivaan+kanne,
määrä+aiko(aikoa)+ja, kaiken+laki, kymmen+enne, elämän+voida, akka+dia,
omaisu(omainen)+us, jälkeläisten+säkki, jälkeläisten+säkä, ahdin+koni,
kuun+tele+massa, leikkuun+aika+nakki...).

Joka tapauksessa, tämä toimii ihan kohtalaisesti. Ilmeisesti jotain noista
FST-tokeneista pitäisi ilsäksi ignoroida, koska välillä saan ylimääräisiä
+-merkkejä, kuten

[Lep][Xp]Foinikia[X]foinikia[Ll][Dg]lai[Xj]nen[X][Sg][Nm]sten
-> Foinikia%foinikia + lai + nen% + sten

ahdistaa%ahdista + ja% + ja + mme
ampua%ampu + ja% + jat

missä nähdäkseni pitäisi olla "nen%sten" ja "ja%ja + mme". Samoin jotkut
tulokset ovat sillä tavalla jännittäviä, että niissä käytännössä hukataan
esim. -nen-pääte korvauksessa, ja sitten lisätään myöhemmin takaisin:

Getsemane%getsemane + - + nimi%nim + inen % i + seen
aamu%aamu + n + sarastaa%sarast + us%u + kseen
arvo%arvo + inen%i + nen

(Ensimmäisessä pitäisi varmaan olla nimi%nim + inen%iseen tai inen%is + een
.)

Jotkut segmentoinnit eivät ole kovin johdonmukaisia (mikä ei kyllä haittaa
minun sovellustani kovin paljoa):

Jeesus%jeesu + kseen
Jeesus%jeesu + ksen
Jeesus%jeesukse + lla
Jeesus%jeesukse + lle

aallokko%aallok + ko
aallokko%aalloko + ssa

aavikko%aavik + ko
aavikko%aavik + koa  (varmaan mieluiten näkisin aavik + ko + a)

aidata%aita + us%u + ksia
aidata%aita + us%u + s

esikoisuus%esikoisuu+te+ni
esikoisuus%esikoisuude+sta

Ja joidenkin kohdalla tämä korvausmekanismi ei selvästi oikein edes voi
toimia, ellei runkoakin pilko:

Punainenmeri%+punaisella+merellä
Punainenmeri%+punaisen+meren
isovarvas%+isoon+varpaasee+nsa

(Sinänsä minun kannaltani ideaalia olisi pilkkoa nimetkin mahdollisimman
pieniin semanttisesti järkeviin osiin, kuten puna+i+nen+meri.)

Välillä taas haluaisin lisätä morfeemirajoja:

aika%aika + inen%ise + mmassa
aika%aika + inen%ise + mmille
aika%aika + inen%ise + mmista
aikomus%aikomu + ksenaa + n
alustaa%alusta + mise + sta
alustaa%aluste + ttakoon
antaa%annet + taisiin
antaa%anta + kaamme
havahtua%havahtu + isivat
hurja%hurj + immillaa + n
juoda%juo + ja% + jillee + n
kahdes%kahde + nneksi + kymmenes% + kymmenenneksi + kahdes%kahde + nneksi

Pitäisi varmaan poistaa +-merkit myös sanan alusta ja lopusta ja tyhjät
korvaukset ([X]). Niitä tulee harvoin:

[Ln][Xp]heimo[X]heimo[Sn][Ny][Bh][Bc][Ln][Xp]kunta[X]kunn[Ls]ittain[Xj][X]
heimo%heimo+kunta%kunn+ittain+%

kaksi%ka+hdella+toista+%

Lopuksi muutama ehkä bugiksi luokiteltava asia:

- Sanan "takaisin" ainoat jäsennykset Voikossa ovat
    - taata yks. 1. kond.
    - takainen mon. keinonto
    - takainen yks. superlatiivi

- Sanan "kymmenentuhatta" ainoa Voikon tunnistama perusmuoto on
"kymmenentuhka". "kymmenentuhattakolme" ei jäsenny lainkaan. Myöskään
"kaksikymmentätuhattakaksi" ei jäsenny, eikä "kymmenentuhattakaksisataa".

- Minut yllätti, että sanan "lyhin" perusmuoto on "lyhä". Tämä näyttää
toisaalta tarkoitukselliselta.

- Sanan "kokonaiskuva" ainoa jäsennys on koko+nais(nainen)+kuva

- "muka" jäsentyy ainoastaan seikkasanaksi

Tässä vielä jotain sanoja tekstistäni, joita voikkospell ei hyväksy (en
osaa sanoa, pitäisikö oikoluvun kannalta):

aaltoaa, haipua, haipuvat, itkiäisiin, jälkeentulevaa, jälkeisiään,
keritsiäiset, keskitsenne, koetteelle, kylläkseen, kylläksenne, kyllälti,
kyllänsä, kymmenettuhannet, kypärin, lunnaaksi, luoduistani, luotujaan,
makeudu, matavia, määkinä, naitti, naittivat, parisataa, pirskuu,
pyhitytte,  röyhkimykset, satakymmenen, sadanpäällikkö,
seitsentoistavuotias, senvuotisen, sorti, sortivat, sotaanlähdön,
suitsevaa, suitsevan, suitsivat, tuhannenpäälliköt, tuhantesi, tuulispäänä,
valittuni, viisaasi.

-Sami
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puimula.org/pipermail/voikko/attachments/20220220/761a12a4/attachment.html>


More information about the voikko mailing list