This is an old revision of the document!
Table of Contents
Morpho Challenge 2008
Stránky soutěže jsou na http://www.cis.hut.fi/morphochallenge2008/. E-mailová adresa organizátorů je morphochallenge2007@james.hut.fi. Poznámky k mému loňskému řešení jsou na stránce Morpho Challenge 2007.
Data mám v ~/data/morphochallenge/2008
. Programy mám v ~/projekty/morphochallenge
(odkaz na data vede i odsud). Původně byly v ~/zapoctaky/konc
.
setenv MC /home/zeman/projekty/morphochallenge
Příprava dat
Organizátoři používají trochu zvláštní kódování, navíc pro každý jazyk jiné. Napsal jsem si skript, který převede data od organizátorů do UTF-8. Bude umět i převod opačným směrem, což bude potřeba, až budu organizátorům posílat výsledky.
cd ~/data/morphochallenge/2008 gunzip -c wordlist.ara.gz | $MC/mc_convert.pl -f ar > wordlist.ar.txt gunzip -c wordlist.eng.gz | $MC/mc_convert.pl -f en > wordlist.en.txt gunzip -c wordlist.fin.gz | $MC/mc_convert.pl -f fi > wordlist.fi.txt gunzip -c wordlist.ger.gz | $MC/mc_convert.pl -f de > wordlist.de.txt gunzip -c wordlist.tur.gz | $MC/mc_convert.pl -f tr > wordlist.tr.txt
Můj skript pro automatické rozsekání slov na kmeny a koncovky předpokládá, že vstup je textový korpus ve formátu CSTS. Nejprve tedy musíme trénovací seznamy slov a jejich četností převést do tohoto formátu.
cd $MC foreach l (ar de en fi tr) mc2csts.pl < data/2008/wordlist.$l.txt -l $l > data/2008/$l.csts end
Trénování morfologických vzorů
Pro některé jazyky (zejména pro finštinu) trvá zpracování déle, než by se chtělo čekat, a vyplatí se tedy úlohy odeslat na cluster:
# lrc cd $MC foreach l (ar de en fi tr) qsub.csh mc_jazyk.csh $l end
Během trénování pro každý jazyk l vzniknou následující soubory:
l.csts
… vstupní seznam slovních tvarů převedený do CSTSl.kmkon
… první rozdělení na kmeny a koncovky. Každý slovní tvar byl rozdělen na dvě části všemi možnými způsoby a výsledky byly seskupeny podle kmenů (stejná levá část).l.nefiltr
… převedeno do podoby vzorů, na každém řádku jeden vzor. Vzor je popsán seznamem koncovek, které byly nalezeny se stejnými kmeny. Dotyčný seznam kmenů následuje za seznamem koncovek. Seznam vzorů zatím neprošel žádným filtrováním.l.vzor
… přefiltrovaný a upravený seznam vzorů. Údaje o každém vzoru jsou rozložené na několik řádků a doplněné českými komentáři, aby byl seznam čitelný pro člověka.l.kmeny.txt
al.koncovky.txt
… seznam všech kmenů a koncovek, které přežily filtrování a figurují v závěrečném seznamu vzorů. Tyto strojově čitelné seznamy se dají využít při pozdější segmentaci nových slov.
Seznam vzorů se buduje takto (práce je rozdělena do několika kroků, protože zpracování velkých dat trvá dlouho a při opravě nějaké drobnosti u filtrování vzorů nechceme muset opakovat i první dva kroky):
csts2kmkon.pl < en.csts > en.kmkon kmkon2vzor.pl < en.kmkon > en.vzor vzorfiltr.pl < en.vzor > en1.vzor
Skript vzorfiltr.pl
jako vedlejší účinek vedle standardního výstupu tiše vyrobí soubory kmeny.txt
a koncovky.txt
.
Zbývá udělat
- Vzít testovací data a mnou natrénované kmeny a koncovky a provést morfematickou segmentaci testovacích dat. Jedno slovo může být rozebráno několika způsoby. Morfémy mohou být identifikovány libovolným řetězcem, takže je nemusíme převádět zpět do původního kódování, ale na výstupu je každopádně potřeba uvést původní nerozdělený slovní tvar v původním kódování.
- Vyzkoušet skórování.
- Pustit celý algoritmus na převrácená slova a získat předpony.
- Vymyslet způsob, jak využít četnosti slovních tvarů, které jsme dostali s trénovacími daty.
Morfematická segmentace
Mám natrénovaný seznam vzorů, resp. seznam kmenů a koncovek. Segmentace ve skutečnosti znamená najít takové dělení slova na dvě části, aby první část odpovídala známému kmenu a druhá část známé koncovce.
Slovo umím rozložit na právě dva morfémy (kmen a koncovka) nebo nechat nerozložené. Při přiřazování slov ke vzorům se přednostně zjišťuje, zda známe přímo danou dvojici kmen-koncovka. Pokud žádnou takovou dvojici nenajdeme, zjišťujeme, zda rozpoznáme alespoň koncovky (aniž bychom znali kmen).
Rozklad slov na základě již vybudovaného seznamu vzorů se provede takto:
mchallenge.pl kmeny.txt koncovky.txt < wordlist.eng > en.dz.txt