Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
user:zeman:malt-parser [2013/06/12 13:57] zeman Velikosti dat. |
user:zeman:malt-parser [2013/07/11 18:49] zeman Odstraněny staré záznamy o pokusech bez splitting tricku. |
http://maltparser.org/ | http://maltparser.org/ |
| |
Rychlý úvod do práce s Malt parserem, který tu dřív byl, už neplatí, protože se týkal starého Malt parseru 0.4 (céčková implementace). Nyní už máme 1.3 (javová implementace). Až se to usadí, budou k ní spouštěcí skripty v repozitáři Parsing v SVN. | Od května 2012 používám Malt Parser 1.7.1 z ''/home/zeman/nastroje/parsery/maltparser-1.7.1''. |
| |
Aktualizace květen 2012: Malt Parser 1.7.1 jsem právě rozbalil do ''/home/zeman/nastroje/parsery/maltparser-1.7.1''. Moje staré pokusy s Malt Parserem a PDT 2.0 jsou v ''/net/work/people/zeman/parsing/projects/maltpdt/uppsala-features''. | Podle Joakima trénování na celém PDT trvá 3 až 5 dní, a to ještě jen při použití splitting tricku (bez něj několik týdnů). Trénování SVM má kvadratickou složitost vzhledem k počtu trénovacích příkladů; těch z PDT vypadnou asi 3 milióny. (S Joakimem jsem se o tom bavil na jaře 2010 a šlo o Malt Parser 1.3. Tehdy jsem také zkoušel trénovat bez splitting tricku. Jeden experiment běžel i 60 dní, řada experimentů ale vůbec nedoběhla, protože jejich stroj cestou chcípnul.) |
| |
Malt 1.3. Podle Joakima trénování na celém PDT trvá 3 až 5 dní, a to ještě jen při použití splitting triku (bez něj několik týdnů). Trénování SVM má kvadratickou složitost vzhledem k počtu trénovacích příkladů; těch z PDT vypadnou asi 3 milióny. | Celá trénovací data mají 68562 vět (někde mám chybně uvedeno 68563 kvůli nejasnostem s počítáním od nuly a od jedničky, ale teď jsem to kontroloval a dvojím způsobem přepočítával prázdné řádky v souboru ''dtrain.conll'' a je to opravdu 68562). Testování je vždy, když není řečeno jinak, na celém dtestu, tedy 9270 vět. Tam, kde je explicitně uvedeno testování na etestu, jde o 10148 vět; v tom případě pak trénuju na sjednocení trénovacích a d-test dat, celkem 77832 vět. |
| |
Celá trénovací data mají 68562 vět (někde mám chybně uvedeno 68563 kvůli nejasnostem s počítáním od nuly a od jedničky, ale teď jsem to kontroloval a dvojím způsobem přepočítával prázdné řádky v souboru ''dtrain.conll'' a je to opravdu 68562). Testování je vždy, když není řečeno jinak, na celém dtestu, tedy 9270 vět. Tam, kde je explicitně uvedeno testování na etestu, jde o 10148 vět. | |
| |
===== Jak se to pouští? ===== | ===== Jak se to pouští? ===== |
* Přejít do adresáře ''/net/work/people/zeman/parsing/projects/maltpdt'', popř. si nejdřív někam vybalit SVN parsing a pak přejít do složky ''projects/maltpdt''. | * Přejít do adresáře ''/net/work/people/zeman/parsing/projects/maltpdt'', popř. si nejdřív někam vybalit SVN parsing a pak přejít do složky ''projects/maltpdt''. |
* Skript ''getdata.csh'', případně ''getdata.gold.csh'' (pokud chceme použít ručně zjednoznačněnou morfologii), nám vyrobí místní kopii trénovacích a testovacích dat, převedenou do formátu CoNLL. Jsou to data z PDT 2.0 (train, dtest a etest na analytické rovině) a já už je mám na toto místo zkopírované. | * Skript ''getdata.csh'', případně ''getdata.gold.csh'' (pokud chceme použít ručně zjednoznačněnou morfologii), nám vyrobí místní kopii trénovacích a testovacích dat, převedenou do formátu CoNLL. Jsou to data z PDT 2.0 (train, dtest a etest na analytické rovině) a já už je mám na toto místo zkopírované. |
* Složka ''/net/work/people/zeman/parsing/projects/maltpdt/uppsala-features'' obsahuje pokusy, ve kterých jsem se snažil co nejvíce přiblížit nastavení, které se nejvíce osvědčilo Joakimovi a jeho týmu v roce 2009. Příslušné soubory s definicemi rysů jsou ve složce ''/net/work/people/zeman/parsing/malt-parser/marco-kuhlmann-czech-settings''. Je tam také skript ''conll-pdttags2conll.pl'', kterým se patnáctimístné poziční značky PDT převedou na takové seznamy rysů a hodnot, jaké se používaly v soutěži CoNLL 2009. | * Složka ''/net/work/people/zeman/parsing/projects/maltpdt/experiments'' obsahuje pokusy, ve kterých jsem se snažil co nejvíce přiblížit nastavení, které se nejvíce osvědčilo Joakimovi a jeho týmu v roce 2009. Příslušné soubory s definicemi rysů jsou ve složce ''/net/work/people/zeman/parsing/malt-parser/marco-kuhlmann-czech-settings''. Je tam také skript ''conll-pdttags2conll.pl'', kterým se patnáctimístné poziční značky PDT převedou na takové seznamy rysů a hodnot, jaké se používaly v soutěži CoNLL 2009. |
* Dosud neexistuje žádný Makefile. Pouštělo se to pomocí skriptu ''all.pl'', který rovnou odesílal úlohy na cluster. Každá složka s odlišným pokusem má svou mutaci tohoto skriptu. Každá odeslaná úloha se skládá ze tří částí: učení, rozbor testovacích dat a vyhodnocení. | * Dosud neexistuje žádný Makefile. Pouštělo se to pomocí skriptu ''all.pl'', který rovnou odesílal úlohy na cluster. Každá složka s odlišným pokusem má svou mutaci tohoto skriptu. Každá odeslaná úloha se skládá ze tří částí: učení, rozbor testovacích dat a vyhodnocení. |
| |
===== Co dál? ===== | ===== Co dál? ===== |
| |
* Zjistit úspěšnost na e-testu a publikovat ji na stránce o českém parsingu. A možná tam publikovat i LAS, nejenom UAS. Teď rychle rozebrat e-test modelem natrénovaným na dtrainu. Výhledově ho ale srovnat s modelem natrénovaným na etrainu (tj. dtrain+dtest). | |
* Upravit švédskou definici rysů, aby fungovala i s algoritmy ''nivrestandard'', ''nivreeager'', ''covproj'' a ''covnonproj''. Vše vyzkoušet opět na různě velkých trénovacích datech. Nikde není dáno, že právě ''stacklazy'' musí být nejúspěšnější algoritmus na PDT. | * Upravit švédskou definici rysů, aby fungovala i s algoritmy ''nivrestandard'', ''nivreeager'', ''covproj'' a ''covnonproj''. Vše vyzkoušet opět na různě velkých trénovacích datech. Nikde není dáno, že právě ''stacklazy'' musí být nejúspěšnější algoritmus na PDT. |
* Odladit ''train.pl'', aby se výsledný soubor ''.mco'' dal rozbalovat. Možná mu vadí pouze ".mco" u volby ''-c''. | * Odladit ''train.pl'', aby se výsledný soubor ''.mco'' dal rozbalovat. Možná mu vadí pouze ".mco" u volby ''-c''. |
* Vyhodnotit to ještě i na e-testu a připsat to na stránku o českém parsingu. | * Vyhodnotit to ještě i na e-testu a připsat to na stránku o českém parsingu. |
* Zkusit hlasování pětitisícových kusů. | * Zkusit hlasování pětitisícových kusů. |
| |
| ===== Nové výsledky s Malt Parserem 1.7 ===== |
| |
| Experimenty probíhaly v červnu 2013. Měl jsem dva cíle: 1. Natrénovat nové modely, protože ty staré nejsou kompatibilní s novou verzí parseru, a 2. získat výsledky na e-testu, protože dosud jsem pracoval jen s d-testem. I když jsem novou verzi parseru pouštěl se stejnými parametry jako před třemi lety tu starou, dostal jsem jiné výsledky (nepatrně horší). |
| |
| D-test (9270 vět): |
| LAS = 80,04 % |
| UAS = 85,96 % |
| LAB = 86,43 % |
| Běželo na stroji lucifer5 (Intel Xeon 2394 GHz) s vyhrazenými 30 GB paměti: |
| learning time (na trénovacích datech) = 139 hodin, tj. necelých 6 dní |
| parsing time = 7 hodin (25559301 ms), tj. 1 věta průměrně za 2,76 s |
| |
| E-test (10148 vět): |
| LAS = 79,80 % |
| UAS = 85,76 % |
| LAB = 86,24 % |
| Běželo na stroji hydra1 (AMD Opteron 2518 GHz) s vyhrazenými 30 GB paměti: |
| learning time (na trénovacích a d-test datech) = 221 hodin, tj. něco přes 9 dní |
| parsing time = 9 hodin (34135285 ms), tj. 1 věta průměrně za 3,36 s |
| |
===== BEST: Javová implementace libsvm, splitting trick ===== | ===== BEST: Javová implementace libsvm, splitting trick ===== |
| 65000 | 1035255 | 5 dní 21:01 h | 31378 s = 8:43 h | 1 věta / 3,38 s | 85,96 % | 9.-15.4.2010 | | | 65000 | 1035255 | 5 dní 21:01 h | 31378 s = 8:43 h | 1 věta / 3,38 s | 85,96 % | 9.-15.4.2010 | |
| 68563 | 1177906, 1305554 | 10 dní 4:40 h | 46999 s = 13:03 h | 1 věta / 5,07 s | **86,08 %** | 27.4.-14.5.2010 | | | 68563 | 1177906, 1305554 | 10 dní 4:40 h | 46999 s = 13:03 h | 1 věta / 5,07 s | **86,08 %** | 27.4.-14.5.2010 | |
| |
Tohle je nejlepší výsledek, jaký jsem zatím s Malt parserem dosáhl, ale se splitting trickem (viz níže) je to téměř stejné a ušetří se dva dny času. | |
| |
===== Bez splitting tricku ===== | |
| |
Trénování bez "splitting tricku" na celých trénovacích datech. Testování je vždy na celém dtestu, tedy 9270 vět. | |
| |
| Algoritmus | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | | |
| nivreeager | 24 dní 17 hodin 13 minut (2135575 s) | 180062 s (50:01 hodin) | 1 věta / 19,4 s | 80,73 % | | |
| nivrestandard | 32 dní 16 hodin 47 minut (2825227 s) | 225021 s (62:30 hodin) | 1 věta / 24,3 s | 79,98 % | | |
| covproj | 60 dní 15 hodin 28 minut (5239706 s) | 348001 s (96:40 hodin) | 1 věta / 37,5 s | 79,69 % | | |
| covnonproj | Skončilo restartem fireball6 někdy v lednu nebo únoru 2010. V ''/tmp'' bohužel nezůstala po výpočtu žádná stopa. | | | | | |
| stackproj | 42 dní 12 hodin 55 minut (3675303 s) | 183676 s (51:01 hodin) | 1 věta / 19,8 s | 78,49 % | | |
| stacklazy | Skončilo chybou Java VM (''memcpy'') po 36 dnech 14 hodinách 21 minutách | | | | | |
| stackeager | 39 dní 11 hodin 38 minut (3375472 s) | 227927 s (63:19 hodin) | 1 věta / 24,6 s | 82,93 % | | |
| |
===== Nastavení od Švédů ===== | ===== Nastavení od Švédů ===== |