[voikko] libvoikko HFST-transduktoreilla

Flammie Pirinen flammie at iki.fi
Fri Oct 30 22:33:58 EET 2009


2009-10-30, Harri Pitkänen sanoi:

> 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.

Tämä tosiaan kannattaa selvittää tarkasti, sillä vaikka useimmiten on
ilmeinen tradeoff tilankulutuksen ja muistinkäytön välillä niin se ei
silti ole aina tarpeen tai kannattavaa. Esimerkiksi tuossa alphassa
valmiiksilaskettu edit-distance-ääretön morfologia ei ole muutaman
sadan megan kulutuksen arvoinen kun saman asian voinee laskea toisessa
järjestyksessä nopeammin (eli toteuttaa edit distancen pikemmin
kaikkiin väärinkirjoitettuihin merkkijonoihin lennosta).

> > 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.

Niin, yksi syy miksi sommittelin ehdotusten generointia transduktorilla
on että kun katsoin tuota kuvausta
<http://voikko.svn.sourceforge.net/viewvc/voikko/trunk/libvoikko/doc/oikoluku-korjausehdotukset.txt?revision=2876&view=markup>
niin se on enimmikseen juuri sitä mitä painollisilla automaateilla on
tapanakin tehdä. Mahdollisesti se on myös ratkaistavissa niin että
saadaan tehokas toteutus sekä muistinkäytön että nopeuden puolesta.

Toisekseen olen tietysti muutenkin tutkinut viime vuoden painollisia
automaatteja, esim. morfologista disambiguointia yksinkertaisesti
sanojen frekvenssejä käyttämällä, eli vähän vastaavasti ilmeisesti
voikkossa nyt nominatiivilla on sakkopainoa 2 ja abessiivilla 60, mutta
sanamuotojen yleisyyden osalta. Tämäkin voisi kai hyödyttää myös
oikoluvussa toisinaan.

> > 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)
> 
> [...]
> 
> 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.


Tämä onkin ainoa attribuutti joka ei nykyisestä muodosta helposti
selviä, mutta ainakin yhdyssanarajat ja isot kirjaimet saanee helposti
taiottua lopputulokseen koska ne ovat muistissa. 

> Yritän viikonlopun aikana tai ensi viikolla lisätä libvoikkoon
> kokeellisen käännösaikaisen valitsimen, jolla Malagan saisi korvattua
> HFST:llä.

Tämä olisi erittäin hienoa ja luulen että se herättäisi kiinnostusta
ainakin muutamissa morfologioiden kehittäjissä jos saisin esiteltyä
sitä edes hätäisesti toimivana.

-- 
Flammie, computer scientist bachelor, linguist master, free software
Finnish localiser, and more! <http://www.iki.fi/flammie/>



More information about the voikko mailing list