HFST: Generalized Rule Compiler

see also:

OMorFi: Yleistettyjen kaksitasosäännöstöjen kääntäjä

Ensisijainen tavoite on luoda kääntäjä, joka osaa kääntää kaksitasosääntöjä, joissa keskuskieli on joukko merkkiparien jonoja. Säännöissä tulee olemaan ainoastaan yksi keskus. Tätä kääntäjää voidaan myöhemmin laajentaa sillä tavalla, että se selviä säännöistä, joissa keskuksena on jokin yleisempi säännöllinen kieli ja joissa keskuksia saattaa olla useampia.

Laajentamiseen liittyy kysymyksiä, joita ei vielä ole ratkaistu. Mitä tarkoitetaan, sillä että keskus on merkkiparijonojen joukkoa yleisempi merkkiparien säännöllinen kieli? Mitä esimerkiksi tarkoitetaan säännöllä
A* # a* # A*   =>   A*b # A* #  A*
Onko tarkoitus, että se osuu yhteenkään merkkijonoon?

(Anssi: Kun sääntöformalismia on yleistetty, se sisältää myös mahdollisuuksia joille ei ole sovellusta. Vielä yksinkertaisemmin on sääntö, joka ei koskaan sovellu onnistuneesti (0=tyhjä mj):
0 # 0 # A*   =>   A*b # #  A*
Nämä säännöt toimivat niin kuin pitää, mutta ne ovat järjettömiä käyttää joten ne pitää tunnistaa ja raportoida käyttäjälle. Lauri Karttunen piti ACL:ssä esitelmän entailmentista liittyen predikaattilogiikkaan QA-sovelluksissa. Ehkä sama metodi kävisi tähänkin, voidaanhan säännöt (ja sen osat!) nähdä myös predikaattilogiikan väittäminä!)

Tehty tähän mennessä

  • Tutustumista Flexiin, Bisoniin ja OpenFst-kirjastoon.

Kääntäjän kirjoittamisen vaiheet

Bisonia, Flexiä ja OpenFST:tä käyttäen rakennetaan kääntäjä vaiheittain:

  1. Ensin pitäisi saada käännettyä automaatteja, jotka tunnistavat merkkipareja, näiden jonoja ja merkkiparijonojen joukkoja.
    • Pitäisi ruveta miettimään ongelmia, jotka liittyvät säännöstön aakkostoon. Miten se rakentuu ja millä lailla sitä merkitään.
    • Tässä pitäisi varmaan jo miettiä Unicode- ja muita merkistöasioita. Tämä ei ehkä ole suurikaan ongelma. (Anssi: Unicode-aakkoston isot ongelmat alkavat sitten jos siirtymiä tulee paljon ja on käytettävä aakkoston pakkausta. Myös merkkien ominaisuuksiin perustuvien erikoisluokkien käyttö on iso ongelma. GTWOL:in kannalta on ongelma kun aakkosto ei ole täysin tiedossa.)
  2. Sitten ovat vuorossa säännölliset lausekkeet, joissa aiotaan matkia Xeroxin säännöllisten lausekkeiden tyyliä. (Anssi: minun SFST-versiostani voisi irrota joitakin algoritmeja jotta ei tarvitse uudelleen implementoida. Esim. shuffle.)
  3. Kontekstit
  4. Säännöt
    • Pitää miettiä, mikä on järkevin tapa kääntää sääntöjä, joissa on useampimerkkisiä keskuksia. Jonkilainen sääntöjen hajotus pienempiin osiin kuulostaa järkevältä. (Anssi: miksi?)
    • Onko yleistetty kaksitsosääntö mahdollista hajoittaa tavallisiksi kaksitasosäännöiksi ja miten tämä pitäisi tehdä. (Anssi: ehkä, mutta vain erityistapauksissa. Yleistetty sääntö on niin yleinen ett YJK06 ei edes kerro kaikkea, mitä voi tehdä, esim. moniosaisia kaksitasosääntöjä vaikka epäjatkuviin ilmiöihin kuten iterdigitaatio. Hyvä harjoitus toki on selvittää missä menee ilmaisuvoiman todellinen raja, mutta sehän on jo tiedossa: säännölliset relaatiot.)
  5. Säännöstöt
    • Miten sääntöjä hajotetaan ja kootaan taas mielekkäällä tavalla? (Anssi: se mitä pitäisikin tehdä on tutkia miten TWOLC toteutetaan GTWOL:n päällä. GTWOL:istahan puuttuu disjunktiivinen järjestys ja siihen liittyvä automaattinen konfliktiresoluutio. Järjestys saadaan käyttämällä eriarvoisia diamond/piste-merkkejä, jotka voittaa toisensa.)
    • Millaisia vaikutuksia säännöillä on toisiinsa, mikäli niiden keskukset ovat useamman kuin yhden merkin pituisia? (Ne voivat toisinkirjoittaa aa->bb kaksikertaa merkkijonoparissa aaa:bbb, eli siis päällekkäin. Päällekkäisyydestä tarvitset lisälukemista YJ07, Potsdam)
    • Saadaanko käännettäessä välituloksina kohtuuttoman isoja automaatteja? Voiko tätä välttää jollain tavalla? (Anssi: kyllä BIGMACHINE eli TWOL-kielioppi yhtenä automaattina on edelleen yhtä iso kuin ennen -- tässä YJK06 on harhaanjohtava -- mutta kokeilepa kääntää leksikko GTWOL-säännöiksi, jolloin leksikko rajoittaa kielioppia ennen kuin kielioppi ehditään kääntää.)
  6. Painojen lisääminen

-- MiikkaSilfverberg - 16 Jan 2008


-- KristerLinden - 27 May 2008
Topic revision: r2 - 2008-05-29 - KristerLinden
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2018 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback