[voikko] libvoikko HFST-transduktoreilla
Harri Pitkänen
hatapitk at iki.fi
Fri Oct 30 20:57:22 EET 2009
On Friday 30 October 2009, Flammie Pirinen wrote:
> 2009-10-29, Harri Pitkänen sanoi:
> > Toinen vaihtoehto on muokata libvoikkoa siten, että toteuttaisi
> > HFST:n avulla tiedostossa src/morphology/Analyzer.hpp määritellyn
> > rajapinnan. Tuohonhan tarvitaan oikeastaan vain yhden metodin
> > toteutus (alustukset on vielä lisäksi hoidettava muualla), jonka
> > jälkeen kaikki oikolukuun, tavutukseen, morfologiseen analyysiin ja
> > kieliopin tarkistukseen liittyvät toiminnot toimisivat suoraan HFST:n
> > päällä.
>
> Tuo kuulostaa kanssa ihan mahdolliselta ja kätevältä. Käytin tuossa
> toisessa toteutuksessa neljää automaattia jotka vastaavat funktioita
> osin optimointisyistä, kysymys onko jokin sana hyvä ratkeaa
> yksinkertaisella yksinauhaisella automaatilla joka on väistämättä nopea
> ja tehokas, katso kaikki morfologiset analyysit taas nykyisellään
> vaatii isomman ja hitaan kaksinauhaisen automaatin (ei välttämättä,
> mutta niin on tähän mennessä aina tehty).
Tosiaan, Malagaa käytettäessä ei ole kovin oleellista suorituskykyeroa sillä,
katsotaanko kaikki analyysit läpi pyritäänkö vain hyväksymään/hylkäämään sana.
Täytyy harkita, että jos (kun?) siirrymme jossain vaiheessa käyttämään
automaatteja, olisiko tällainen optimointi järkevää. Tässä on huomioitava myös
muistin käyttö, eli erilliset automaatit voivat olla käytännön sovelluksissa
epäkäytännöllisiä, jos ne kasvattavat ohjelmiston kokoa kovin paljon.
> Ehdotusten aikaansaaminenkin
> onnistuu kuten sanottua vain yhdellä kaksinauhaisella painollisella
> automaatilla pelkästään hakemalla merkkijonolla. Tästä tietysti myös
> seuraa että kaikki toimintalogiikka on automaateissa joten osaan itse
> viritellä niitä tarpeen mukaan, mikä on aina hauskaa.
Ehdotusten puolella meillä on jo jonkinlainen abstraktio
(spellchecker/suggestion/SuggestionStrategy.hpp), jonka avulla olisi
mahdollista pultata libvoikkoon ehdotuksia generoiva komponentti, joka hakisi
ehdotukset suoraan automaatilta. Ihan tähän sitä ei kyllä alun perin
tarkoitettu, mutta ajatusta voisi kehitellä. Tällä hetkellä sen kaikki
toteutukset käyttävät Analyzer-oliota taustalla.
> Mutta niin, ilmeisesti tuon analyysifunktion osalta riittäisi jos
> osaisi huolella koodata esityksen morfologisesta analyysistä jonka
> voikko tai suomi-malaga tuottaa, niin saisi suoraan saman lopputuloksen
> oikoluvussa ja kielentarkistuksessa? Tätä esitystä ei kuitenkaan kai
> sanota suoraan Analyzer.hpp- tai Analysis.hpp-tiedostoissa.
Joo, tuota ei ole oikein dokumentoitu, täytyykin yrittää kirjoitella asiasta
jotain. Mutta mitään kovin kummallista tähän ei tarvita. Analyzer-toteutuksen
pitää siis palauttaa joukko Analysis-olioita. Näihin sen täytyy addAttribute-
metodilla lisätä attribuutteja. Kolme attribuuteista on tällä hetkellä
pakollisia, eli kaikkien analyysien tulee sisältää vähintään ne. Enemmänkin
attribuutteja saa lisätä, jos toteutuksella on tarjota muutakin kuin
pakolliset tiedot.
> talonmies
> [##]talonmies[POS=NOUN][KTN=42][NUM=SG][CASE=NOM][##] 2
> [##]talo[POS=NOUN][KTN=1][NUM=SG][CASE=GEN,ACC][#][?]mies[POS=NOUN][KTN=42]
> [NUM=SG][CASE=NOM][##] 11
Vastaavat MalagaAnalyzerin tuottamat attribuutit ovat seuraavat (nämä näkee
komennolla voikkospell -m):
A(talonmies):1:BASEFORM=talonmies
A(talonmies):1:CLASS=nimisana
A(talonmies):1:SIJAMUOTO=nimento
A(talonmies):1:STRUCTURE==ppppp=pppp
A(talonmies):1:WORDBASES=+talo(talo)+n+mies(mies)
A(talonmies):1:WORDIDS=+talo(w515227)+n+mies(w508727)
Pakollisia noista attribuuteista ovat CLASS, SIJAMUOTO ja STRUCTURE. CLASS ja
SIJAMUOTO sisältävät sanaluokan ja nominien sijamuodon. Molempien sallitut
arvot ovat Suomi-malagasta peräisin eivätkä ihan helposti arvattavissa koodia
lukematta. Onneksi lähes kaikki toimii oikein vaikka noihin laittaisi arvoksi
"none", koska kyseisiä tietoja ei libvoikon sisällä vielä kovin paljon
hyödynnetä. Attribuutteja BASEFORM, WORDBASES ja WORDIDS ei libvoikossa
käytetä lainkaan. Ne ovat vielä jossain määrin kokeellista toiminnallisuutta
ja hyvin todennäköisesti muuttuvat tulevissa versioissa.
Eli lopulta noihin analyyseihin jää ainoastaan yksi attribuutti, jonka arvolla
on aidosti väliä, eli STRUCTURE. Tämäkin on aika helppo. Jokaista sanan alkua
sekä yhdyssanan osan alkua merkitään yhtäsuuruusmerkillä. Jokaista sanan
kirjainta merkitään kirjainmerkillä p, q, i tai j, joiden merkitys selviää
seuraavasta taulukosta:
Kirjainkoko (pitääkö kyseinen kirjain
kirjoittaa isolla muuallakin kuin virkkeen
alussa)
pieni iso
Onko tavutus merkin kyllä p i
edeltä sallittu? ei q j
Käytännössä q ja j ovat meillä olleet käytössä vain lyhenteissä, joten aika
pitkälle pääsee käyttämällä pelkästään merkkejä p ja i.
Lopuksi on huomioitava, että Analyzer-oliot eivät saa välittää sanojen
kirjainkoosta analyysejä muodostaessaan. Eli sanalle "pekka" on muodostettava
sama analyysi kuin sanalle "Pekka", vaikka sana olisikin puhdas erisnimi.
Tässä hiukan hämäävästi voikkospell -m kuitenkin kieltäytyy näyttämästä
pienellä kirjoitetun sanan analyysit, jos sana on "väärin kirjoitettu":
W: pekka
Pekka
C: Pekka
A(Pekka):1:BASEFORM=Pekka
A(Pekka):1:CLASS=etunimi
A(Pekka):1:SIJAMUOTO=nimento
A(Pekka):1:STRUCTURE==ipppp
A(Pekka):1:WORDBASES=+Pekka(Pekka)
A(Pekka):1:WORDIDS=+Pekka(w520841)
Yritän viikonlopun aikana tai ensi viikolla lisätä libvoikkoon kokeellisen
käännösaikaisen valitsimen, jolla Malagan saisi korvattua HFST:llä.
Harri
More information about the voikko
mailing list