[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
user:zeman:malt-parser [2012/06/28 09:06]
zeman Velikosti dat.
user:zeman:malt-parser [2013/07/11 18:33]
zeman Nové výsledky s Malt Parserem 1.7.
Line 1: Line 1:
-====== Malt parser ======+====== Malt parser: pokusy s PDT 2.0 ======
  
 http://maltparser.org/ http://maltparser.org/
Line 6: Line 6:
  
 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''. 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''.
- 
-===== Pokusy s PDT 2.0 ===== 
  
 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. 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í 68563 vět. Testování je vždy na celém dtestu, tedy 9270 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í? ===== 
 + 
 +  * 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é. 
 +  * 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. 
 +  * 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? ===== 
 + 
 +  * 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). 
 +    * **Puštěno 12.6.2013 ve 14:21:** <code>zeman@lrc2:/net/work/people/zeman/parsing/projects/maltpdt/uppsala-features/stacklazy/split-postag/jlibsvm$ qsub.pl mf=30g parse-e-test.sh</code> Zatím je to ve frontě kvůli HamleDTovi. Občas zkontrolovat! 
 +  * Vymyslet nějakou lepší strukturu složek, tohle je hodně hluboké a nepřehledné. 
 +  * Upravit švédskou definici rysů, aby fungovala i s&nbsp;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''
 +  * Jestli nakonec nějak prorazím, bude potřeba opět učesat obalovací skripty. Mj. jsem přišel na to, že ve většině svých skriptů používám jako dočasný adresář ''/tmp'' místo Milanem důrazně doporučeného ''/mnt/h/tmp''. Např. na tauri10 jsem tak počmáral 4 GB a proces skončil, protože příslušný svazek byl plný. Tohle by se mj. mělo opravit i u skriptů pro Joshuu a dalších. Jinak jsem taky mohutně čachroval s žádostí o příděl paměti na clusteru (týká se i skriptu ''qsub.csh''), s konfigurací Maltu atd. 
 +  * 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ů. 
 + 
 +===== Nové výsledky s Malt Parserem 1.7 ===== 
 + 
 +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 =====
  
 Vyžaduje více času a paměti než céčková implementace, ale nepadá. Podle dokumentace může dojít i k&nbsp;drobným odchylkám v&nbsp;úspěšnosti způsobeným odlišným zpracováním racionálních čísel. Vyžaduje více času a paměti než céčková implementace, ale nepadá. Podle dokumentace může dojít i k&nbsp;drobným odchylkám v&nbsp;úspěšnosti způsobeným odlišným zpracováním racionálních čísel.
Line 36: Line 72:
 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. 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 ====+===== 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. 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.
Line 49: Line 85:
 | stackeager | 39 dní 11 hodin 38 minut (3375472 s) | 227927 s (63:19 hodin) | 1 věta / 24,6 s | 82,93 % | | 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ů =====
  
 26.3.2010 po měsíci další pokus pustit to na datech upravených stejným způsobem a se stejnými rysy jako Joakim a Marco. 26.3.2010 po měsíci další pokus pustit to na datech upravených stejným způsobem a se stejnými rysy jako Joakim a Marco.
Line 75: Line 111:
 <code>$PARSINGROOT/tools/conll-eval07.pl -g dtest.conll2009tags.conll -s dtest.malt-pokus1000-30g-clibsvm.conll > dtest.malt-pokus1000-30g-clibsvm.eval.txt</code> <code>$PARSINGROOT/tools/conll-eval07.pl -g dtest.conll2009tags.conll -s dtest.malt-pokus1000-30g-clibsvm.conll > dtest.malt-pokus1000-30g-clibsvm.eval.txt</code>
  
-==== Trénování větších modelů s céčkovou implementací libsvm padá ====+===== Trénování větších modelů s céčkovou implementací libsvm padá =====
  
 Chybu hlásí ''sdm0.004.libsvm.mod'', což je dílčí model pro hodnotu ''CPOSTAG'' číslo 4. Značky jsou číslovány podle pořadí, v&nbsp;jakém se v&nbsp;trénovacích datech objevily. Pokud tedy všechny podmnožiny trénovacích dat, které zkouším, začínají na začátku trénovacích dat, mají číslování značek stejné. Číslování je také možné ověřit tak, že rozbalíme model, vznikne stejnojmenná složka, v&nbsp;ní se pak podíváme do souboru ''symboltables.sym'' na část ''CPOSTAG'': Chybu hlásí ''sdm0.004.libsvm.mod'', což je dílčí model pro hodnotu ''CPOSTAG'' číslo 4. Značky jsou číslovány podle pořadí, v&nbsp;jakém se v&nbsp;trénovacích datech objevily. Pokud tedy všechny podmnožiny trénovacích dat, které zkouším, začínají na začátku trénovacích dat, mají číslování značek stejné. Číslování je také možné ověřit tak, že rozbalíme model, vznikne stejnojmenná složka, v&nbsp;ní se pak podíváme do souboru ''symboltables.sym'' na část ''CPOSTAG'':
Line 87: Line 123:
 Joakim navrhuje, abychom zkusili dělení zjemnit, např. místo CPOSTAGu dělit modely podle slovního poddruhu (druhá pozice české značky). Pak by dílčí modely byly menší a libsvm by třeba nespadlo. Ve skutečnosti budu asi muset zjemňovat jiným způsobem, protože právě u podstatných jmen žádné zvláštní dělení na poddruhy neexistuje. Mohly by ale pomoct pády. Joakim navrhuje, abychom zkusili dělení zjemnit, např. místo CPOSTAGu dělit modely podle slovního poddruhu (druhá pozice české značky). Pak by dílčí modely byly menší a libsvm by třeba nespadlo. Ve skutečnosti budu asi muset zjemňovat jiným způsobem, protože právě u podstatných jmen žádné zvláštní dělení na poddruhy neexistuje. Mohly by ale pomoct pády.
  
-==== Trénovací data rozsekaná na pětitisícové úseky ====+===== Trénovací data rozsekaná na pětitisícové úseky =====
  
 | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Poznámka | | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Poznámka |
Line 105: Line 141:
 | 65000-68562 | 1032115 | 12:43 min | | | 79,69 % | | | 65000-68562 | 1032115 | 12:43 min | | | 79,69 % | |
  
-==== Splitting trick podle slovního poddruhu, jlibsvm ====+===== Splitting trick podle slovního poddruhu, jlibsvm =====
  
 Snižuje časovou náročnost, zanedbatelně snižuje i úspěšnost. Snižuje časovou náročnost, zanedbatelně snižuje i úspěšnost.
Line 126: Line 162:
 | full | 1177879 | 8 dní 7 h | 38957 s = 10:49 h | 1 věta / 4,20 s | 86,02 % | 27.4.-6.5.2010 | | full | 1177879 | 8 dní 7 h | 38957 s = 10:49 h | 1 věta / 4,20 s | 86,02 % | 27.4.-6.5.2010 |
  
-==== Stackeager, java libsvm, švédské rysy ====+===== Stackeager, java libsvm, švédské rysy =====
  
 <code>job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID <code>job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID
Line 165: Line 201:
 | full | 1474032 | 8 dní 6 h | 40110 s = 11:09 h | 1 věta / 4,33 s | 85,94 % | 2.-11.6.2010 | | | full | 1474032 | 8 dní 6 h | 40110 s = 11:09 h | 1 věta / 4,33 s | 85,94 % | 2.-11.6.2010 | |
  
-==== Stackproj, java libsvm, švédské rysy ====+===== Stackproj, java libsvm, švédské rysy =====
  
 <code>Log *.o1474105 má 74 malt01000.9528.csh.o1474105 řádků, takže snad úloha doběhla úspěšně. <code>Log *.o1474105 má 74 malt01000.9528.csh.o1474105 řádků, takže snad úloha doběhla úspěšně.
Line 204: Line 240:
 | full | 1474119 | 7 dní 11 h | 36260 s = 10:04 h | 1 věta / 3,91 s | 81,88 % | 7.-15.6.2010 | | | full | 1474119 | 7 dní 11 h | 36260 s = 10:04 h | 1 věta / 3,91 s | 81,88 % | 7.-15.6.2010 | |
  
-==== Covproj / covnonproj / nivrestandard / nivreeager, java libsvm, švédské rysy ====+===== Covproj / covnonproj / nivrestandard / nivreeager, java libsvm, švédské rysy =====
  
 Všechny trénovací procesy hlásí "The function cannot be initialized." Mohlo by to být tím, že Marcova definice rysů, kterou se pokouším použít, byla původně určena pro algoritmus ''stacklazy''. Takže se třeba snaží dívat na zásobník, se kterým Covingtonův algoritmus vůbec nepracuje? Žádnou změnou na clusteru ta chyba totiž není, trénink ''stacklazy'' se rozeběhne bez problémů stejně jako dřív. Všechny trénovací procesy hlásí "The function cannot be initialized." Mohlo by to být tím, že Marcova definice rysů, kterou se pokouším použít, byla původně určena pro algoritmus ''stacklazy''. Takže se třeba snaží dívat na zásobník, se kterým Covingtonův algoritmus vůbec nepracuje? Žádnou změnou na clusteru ta chyba totiž není, trénink ''stacklazy'' se rozeběhne bez problémů stejně jako dřív.
- 
-==== Co dál? ==== 
- 
-  * Upravit švédskou definici rysů, aby fungovala i s&nbsp;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''. 
-  * Jestli nakonec nějak prorazím, bude potřeba opět učesat obalovací skripty. Mj. jsem přišel na to, že ve většině svých skriptů používám jako dočasný adresář ''/tmp'' místo Milanem důrazně doporučeného ''/mnt/h/tmp''. Např. na tauri10 jsem tak počmáral 4 GB a proces skončil, protože příslušný svazek byl plný. Tohle by se mj. mělo opravit i u skriptů pro Joshuu a dalších. Jinak jsem taky mohutně čachroval s žádostí o příděl paměti na clusteru (týká se i skriptu ''qsub.csh''), s konfigurací Maltu atd. 
-  * 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ů. 
  

[ Back to the navigation ] [ Back to the content ]