sobota 22. novembra 2008

Trdlo News #01

Už štvrtý krát mi padol Firefox pri písaní tohoto zápisku a začína ma to štvať (aj napriek priebežnému ukladaniu mi tam zase nič neostalo). Posledný týždeň som pracoval na frameworku Trdlo a podarilo sa mi nájsť pár drobných, ale podstatných chýb. V novej verzii budú dve zásadné novinky, ktoré by mohli byť užitočné.
Odkaz
Prvou je využitie existujúceho slovníku, aby sa ku známym slovám už nehľadali ekvivalenty. Ak by sme mali nediferenčný slovník, tak by sme ho pripojili presne sem :) Samozrejme, že takýto slovník nemáme.

Ale máme druhú novinku, ktorá nám ho vytvorí. Niečo podobné česko-slovenskému slovníku sa dá získať z názvov článkov z wikipédie. Vezmeme celú wikipédiu v zdrojovom jazyku (sk) a nájdeme odkazy vedúce na cieľový jazyk (cs). Pre istotu však vezmeme len jednoslovné výrazy a slová, ktoré sa neprekladajú rovnako, pretože tie nám neprinesú žiadnu novú informáciu (takéto slová nájdeme vždy). Následne získame ~3000 párov slov, ktoré sa pri použitom slovenskom wordliste prejavia v pokrytí 1550 slov (~2%). Keďže očakávame, že takýto slovník má veľmi vysokú presnosť, tak ho zaradíme na prvé miesto. Po vypočítaní nových slovníkov sa dostávame do situácie, že reálne zlepšenie predstavuje asi 200 slov. Všetky ostatné slová by sme našli pomocou existujúcich metód.

Treťou novinkou, ktorá sa ukázala ako nepoužiteľná je spraviť prienik medzi slovami, ktoré získame prácou nad celými slovami a prácou nad spoluhláskami (v danom slove). Tu sa ukázalo, že výsledok je menej kvalitný :( Ak rátame aj pokus s wikipédiu, tak to sú dve slepé cesty na tento týždeň.

nedeľa 8. júna 2008

Článok: Automatic Lexical Acquisition from Raw Corpora

Nakoniec sa mi úspešne podarilo zložiť SDZ a tak sa možem viac venovať užitočnejšej práci. Nedávno sa mi dostal článok Automatic Lexical Acquisition from Raw Corpora: An Application to Russian. Cieľ je veľmi podobný ako u mňa. Z neoznačkovaného korpusu vytiahnuť čo sa dá.

Morfologické pravidlá sú zapisané ako regulárne výrazy s tým, že sa kladú podmienky na tvar v korpuse; transformácia na základný tvar s využitím toho, čo sa získalo v reg. výraze tj. je možné vkladať znak (názve - názov) a nepotrebujeme tvoriť nové vzory ako v ajke. V podstate celý systém je popísaný len týmito pravidlami a vzory v tradičnom chápaní nie sú. Konflikty riešia veľmi jednoducho, odstránia takéto pravidlá. V podstate veľmi podobne som to riešil aj ja s prídavnými menami. Pri podstatných menách sa mi zdá, že to nepojde len tak využiť, pretože ten prekryv je výrazne väčší. Celý pokus u nich prebiehal na korpuse, ktorý obsahoval len korektné tvary (aby to šlo overovať) a jednalo sa vlastne len o zoznam slovných tvarov.

Pekný sa mi zdal akurát ten nápad s regulárnymi výrazmi a zrušenie vzorov. Na druhej strane sa mi zdá, že moj nápad s extrakciou je omnoho sofistikovanejší :) Či už použitím komplikovanejšieho formalizmu na vzory, ale aj pripravovanej extrakcie v prípade konfliktov.

nedeľa 4. mája 2008

Zhrnutie: Prídavné mená z korpusu

Písanie článku som nakoniec vzdal, pretože sa mi nechcelo :( Ale, aby som nezabudol na dôležité fakty, tak ich uvediem sem.

Hľadal som prídavné mená, ktoré sa nachádzajú za predložkami v aktuálnej verzii SNK. Celkovo som spracoval 21,5 milióna konkordancií, z ktorých som získal 38632 kandidátov na prídavné mená (tj. vzor cudzí, páví, pekný). Prechádzal som postupne predložku za predložkou a vytváral morfologickú databázu (lema : vzor, kde lema je najbližší základ napr. najkľudnejší), žiadne vzťahy medzi slovami som zatiaľ nehľadal. Označoval som slová ako preklepy, alebo české slová. Niekedy to určite nebolo objektívne a preto sú v databázi aj nesprávne slová (akurát označené). V úvode sa chybovosť pohybovala okolo 5%, ale so zväčšujúcou morfologickou databázou sa toto číslo (zhruba od 20.000 kandidátov) zväčšovalo. Pri poslednej predložke 'v' (5.3 mil) to narástlo až na takmer 50%, zisk už len asi tisíc nových prídavných mien. Tj. táto metóda nám toho bez zlepšenia už o veľa viac nedá. Zlepšovať sa určite dá metóda, ktorá vyberá z možných lemát to správne. K tomu, či by to ešte malo zmysel sa dostanem.

Korektných prídavných mien v databázi: 34662 (89.7%)
Nekorektných prídavných mien v databázi: 3970 (10.3%)

Hlavné zdroje problémov sú: preklepy, slová bez diakritiky, české slová a nevyriešené konflikty s podstatnými menami mužského rodu s poslednou slabikou dlhou (napr. areály, generály). Reálne sa dajú riešiť len tie konflikty a preklepy sa dajú nachádzať poloautomaticky [bohužiaľ tam obvykle padne aj veľa správnych slov].

Porovnanie výsledkov s existujúcimi databázami. Porovnávať sa dá s PSP, KSSJ a slovenským ispellom. Keďže zdrojové dáta mám len z ispellu (a len ten má podobné chápanie lemy), tak porovnanie s ním. Ispell pozná 14.694 prídavných mien, Langusta ich má 34.662. Pri správnych slovách sa prekrývame v 10.120 prípadoch (69%). 84 slov z langusty (0.5%) má ispell medzi korektnými, niektoré z nich sú nesprávne v ispelli, väčšina z nich v languste [opravím, keď bude fungovať elektronický KSSJ; a pošlem bugreport do ispellu].

Keďže z neoznačkovaného korpusu sa nedá príliš povedať, že ktoré slová sú prídavné mená, tak som si vytiahol najfrekventovanejšie slová, ktoré končia na -ný (tj. budú to prídavné mená v základnom tvare). Pri TOP100 nepoznám len jedno slovo, zlý, pretože sa kontroluje dĺžka poslednej slabiky kmeňa a tú tam nenájde. Pri TOP1000 sa nenájde 22 slov (z toho je 9 preklepov). Pri TOP10.000 sa nenájde 734 slov (z toho je preklepov ~118). Pokrytie (bez preklepov) sa pohybuje na úrovniach 99%, 98.7%, 93.7%. Pri takto vysokých číslach je otázne, či vymýšlať nejaké komplikovanejšie metódy :) Očakávam, že pri podstatných menách, to bude nutné, ale radšej sa nimi začnem zaoberať až vtedy, keď to bude treba.

štvrtok 24. apríla 2008

Nedočkavosť

Síce som si chcel dať pár dní pauzu, ale nepodarilo sa :) Takže rovno včera som sa pustil do druhej fázy. Upravil som program, tak aby akceptoval časť značky zadanú nie ako reťazec, ale ako regulárny výraz. To znamená, že sa to už dá používať aj na hádanie značiek. Samozrejme, že by to chcelo viac vzorov, ale zatiaľ to potrebujem len na dva pády pri predložkách. Existujú síce predložky s tromi pádmi, ale výskyty sú celkom o ničom.

Prepočítal som predložky o, na, pred, vo (pôvodne som myslel, že tam mám aj v; takže to až zajtra). Predložky pred a vo (500K a 700K výskytov) priniesli rapídny nárast preklepov v nespracovanej časti (15-20%) a zhruba 800 nových prídavných mien. Predložka o ich dala 2 tisíc a pri predložke na (~4M) ich na mňa čaká ďalších takmer 6 tisíc. Posledná veľká predložka, ktorá ostáva je v (~5M).

Začal som písať článok na konferenciu, ale príliš sa mi do toho nechce. Takže očakávam, že keď sa vyspím, tak sa pokúsim využiť vzory na tvorbu vzťahov medzi slovami (stupňovanie, negácia). Toto by teoreticky nemal byť žiaden väčší problém, ale človek nikdy nevie. Omnoho väčší problém mi robí prefixácia, pretože mi je jasné, že minimálne číselné prefixy by sa mali dať nejako skladať. Na strane druhej to znamená povedať, že popisovať morfológiu čisto cez systém vzorov je chobotina. Ledaže by som to popísal vzorom :)

utorok 22. apríla 2008

Koniec prvej etapy práce s prídavnými menami

Dnes sa mi podarilo prejsť aj posledné prídavné mená (predložka s, vzor pekný) z prvej etapy. V nej som sa zameral na prídavné mená (bez vzoru otcov/matkin, ktorý sa v podstate tvorí automaticky), ktoré sa spájajú s niektorou z jednopádových predložiek. Takže krátke zhrnutie: 27940 kandidátov na dvojicu lemma:vzor, z nich bolo správnych 26104 (podľa mňa, ale skutočné čísla budú asi dosť podobné) = ~93.5%. Chybovosť sa od počiatku pohybovala na úrovni päť percent a stúpať začala až v poslednej tretine. Predpokladám, že pri dopĺňaní ďalších slov to bude ešte rásť. Prekrývanie s ispellom v slovách, ktoré sú správne podľa oboch je 8970 slov tj. pozná 33% mojich slov. Ja nepoznám okolo šesťtisíc jeho slov, to znamená že priestor na zlepšovanie je aj u mňa :)

Prvú etapu som zavŕšil tým, že som presťahoval projekt z ~/tmp/predlozky na /nlp/projekty/langusta. V druhej etape sa chcem zamerať hneď na niekoľko vecí:
  • predložky, ktoré sa viažu s dvoma pádmi (~10 miliónov výskytov)
  • vzťahy medzi predložkami (negácia a stupňovanie)
  • rozmýšlam nad prefixami, ale to by som skôr nechal na neskôr
Na konci tejto fázy by som mal mať pokrytých dostatok prídavných mien. Aby som zlepšil svoju efektivitu, tak sa pokúsim zapojiť do opravovania ispell (s mojími korektnými slovami). Najbližších pár dní si, ale od predložiek oddýchnem a budem sa snažiť robiť niečo iné.

sobota 19. apríla 2008

Prídavné mená v korpuse - koniec teoretizovania

Dnes som prišiel na to, že všetko je úplne inak ako som si myslel. Podarilo sa mi objaviť chybu v metóde single, ktorá sa prejavovala v prípade, že slovo malo síce len jednu možnosť lemma:vzor, ale opakovala sa (rozdiel bol v gramatickej značke). Okamžite sa prejavilo, že nemám ošetrené prípady pre vzor dub s poslednou dlhou slabikou (tie sa pletú s prídavnými menami). Vďaka Michalovi sa podarilo nahodiť nové Ubuntu na tri asterie (Xeon 2Ghz, 4GB). Na nich dokážem reálne dosahovať rýchlosť okolo 80 tisíc konkordancií za minútu, tj. do pol hodiny mám aj tú najfrekventovanejšiu predložku :)

Potom som sa pustil do pridávania slov do centrálnej databázy. Aktuálne je v nej 14 tisíc kandidátov na prídavné mená a za správne je označených okolo 95%. Nesprávne sa nevymazávajú, ale sa len označia, takže ich nemusím prechádzať pri každej predložke. Zatiaľ som sa sústredil len na 'skutočné' prídavné mená, tj. vzory pekný, cudzí a vtáčí. Vzor otcov si nechávam do rezervy, pretože to všetko by malo byť odvodené od podstatných mien. Najbližším cieľom je skontrolovať aj zvyšných ~7 tisíc kandidátov na prídavné mená. Na porovnanie, slovenský ispell má necelých 15 'skutočných' prídavných mien, SSJČ obsahuje 30 tisíc značiek príd. zo 120 tisíc slov. Normálne slovníky, vrátane SSJČ, majú v skutočnosti tých prídavných mien viac, pretože ispell (a zatiaľ ani ja) nespája stupňovanie pod jednu lemmu.

piatok 18. apríla 2008

Hľadanie v korpuse IV

Moja pracovná nálada stále nepoľavuje a pretože už za sebou začínam vidieť reálne výsledky, tak to snáď ešte chvíľku vydrží. Ale pekne po poriadku. Po včerajšom neúspechu s inštaláciou Ubuntu (fakt divný problém s DHCP) a úspešnom návrate môjho počítača z reklamácie som sa vrátil k predložkám.

Podarilo sa mi vytvoriť nové vzory alchýmia a aféra, ktoré odfiltrovali najčastejšie včerajśie chyby. Pôvodne som myslel, že budem potrebovať aj vzor dub (resp. nejaký jeho podvzor), ale takéto slová padli pod vzor aféra. Čo síce nie je správne, ale vzory pre podstatné mená slúžia momentálne len na hľadanie konfliktov a neočakávam, že dávajú stopercentne korektné výsledky. So vzorom alchýmia bol ešte ten problém, źe som testoval len prvý rozklad slova na hlásky a keďže tam vzniklo ia, tak to nepasovalo s poslednou hláskou, ktorá mala byť a.

Po týchto úpravach som zase všetko pregeneroval, vypadlo toho o kúsok menej ako naposledy, ale podľa mňa sa výrazne zvýšila kvalita. Pri metóde single ubudlo ~tisíc kandidátov a pri metóde intersect (tá
kompilikovanejšia, čo dáva viac výsledkov) to kleslo o ~2500 výsledných priradení lemma:vzor. Pre vzory prídavných mien nám toho ubudlo viac ako pribudlo, kvôli novým vzorom, takže aktuálne čísla pre single sú 12 tisíc a pre intersect 41 tisíc (tu už máme zlúčené aj malé a veľké písmená)

Aby som si overil kvalitu výsledných dát, tak som výsledky pre predložku cez (single) prešiel ručne. Do vzoru vtáčí nám nepatrilo nič, do vzoru cudzí nám patrilo 41 slov a všetky boli správne. Najväčšia skupina patrila do vzoru pekný. Z nich som vybral tie, ktoré začínajú aj malým písmenom, to preto aby som sa vyhol vlastným menám. Týchto slov som mal 2281 a z nich som za pofidérne označil 75 (3.2%), takéto slová sú buď preklepy, alebo som si nebol istý či sú správne (napr. zhluknutý, elektornický). V každom prípade, takúto chybovosť považujem za prijateľnú a môžem sa pustiť do overovania aj zvyšných desiatich tisíc prídavných mien :)

Zo včerajšieho todo listu ubudli: oprava vzorov a prejdenie pár tisíc slov, čo bolo viacmenej nahradené za prejdenie všetkých slov :) takže som si príliš nepomohol.