[ 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
user:zeman:malt-parser [2013/06/12 13:57]
zeman Velikosti dat.
user:zeman:malt-parser [2013/07/11 22:15] (current)
zeman Odstraněn záznam o ladění před 3 lety.
Line 3: Line 3:
 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í? =====
Line 15: Line 13:
   * 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''.
Line 27: Line 24:
   * Zkusit hlasování pětitisícových kusů.   * Zkusit hlasování pětitisícových kusů.
  
-===== BEST: Javová implementace libsvm, splitting trick =====+===== Nové výsledky s Malt Parserem 1.7 =====
  
-Vyžaduje více času a paměti než céčková implementace, ale nepadá. Podle dokumentace může dojít i k drobným odchylkám v úspěšnosti způsobeným odlišným zpracováním racionálních čísel.+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: Malt parser 1.3, 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 drobným odchylkám v úspěšnosti způsobeným odlišným zpracováním racionálních čísel. Tato sada pokusů používala splitting trick, jinak by trénování v rozumném čase nedoběhlo. Dole mám ještě jednu, u které si nejsem jist, čím přesně se její nastavení liší. Zdůrazňuje právě splitting trick. Protože rozdíl nemůže tkvět v tom, zda vůbec byl splitting trick nasazen, bude pravděpodobně v tom, podle jaké hodnoty se dělilo. Předpokládám, že tady to byl slovní druh, zatímco tam (jak se tam i říká) poddruh.
  
 | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Datum | | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Datum |
Line 48: Line 65:
 | 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 Malt parserem dosáhl, ale se splitting trickem (viz níže) je to téměř stejné a ušetří se dva dny času.+===== Trénování větších modelů čkovou implementací libsvm padá =====
  
-===== Bez splitting tricku ===== +//Malt Parser 1.3 jsem nedokázal použít s céčkovou implementací libsvmkterá má být sice rychlejšíale mně náhodně padala. Postupně jsem od ní zcela upustil a používám pomalejšíale bezpečnější Javovou implementaciPřesto tady zatím nechávám tuhle kapitolu, protože odkrývá některé detaily o Malt Parseru (které by snad mohly platit v současné verzi).//
- +
-Trénování bez "splitting tricku" na celých trénovacích datechTestování je vždy na celém dtestutedy 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ů ===== +
- +
-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. +
- +
-<code>foreach i (1000 2000 5000 10000 20000 50000) +
-  $PARSINGROOT/malt-parser/marco-kuhlmann-czech-settings/conll-pdttags2conll.pl < dtrain-$i.conll > dtrain-$i.conll2009tags.conll +
-end +
-foreach i (dtrain dtest) +
-  $PARSINGROOT/malt-parser/marco-kuhlmann-czech-settings/conll-pdttags2conll.pl < $i.conll > $i.conll2009tags.conll +
-end +
-foreach i (25000 30000 35000 40000 45000 55000 60000 65000) +
-  split_conll.pl < dtrain.conll2009tags.conll -head $i dtrain-$i.conll2009tags.conll /dev/null +
-end</code> +
- +
-Učení: +
- +
-<code>qsub.csh mf=31g $PARSINGROOT/malt-parser/scripts/train.pl '<' dtrain-1000.conll2009tags.conll1 '>' d.pokus1000-30g-clibsvm.mco</code> +
- +
-Rozbor: +
- +
-<code>qsub.csh mf=31g $PARSINGROOT/malt-parser/scripts/parse.pl -g d.pokus1000-30g-clibsvm.mco '<' dtest.conll2009tags.conll '>' dtest.malt-pokus1000-30g-clibsvm.conll</code> +
- +
-Vyhodnocení: +
- +
-<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á =====+
  
 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 100: Line 78:
  
 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 ===== 
- 
-| N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Poznámka | 
-| 00000-04999 | 1032102 | | | | | Nevysvětlitelná náhlá smrt během trénování. | 
-| 05000-09999 | 1032103 | 24:24 min | | | 80,59 % | | 
-| 10000-14999 | 1032104 | 31:56 min | | | 80,23 % | | 
-| 15000-19999 | 1032116 | 30:27 min | | | 80,52 % | | 
-| 20000-24999 | 1032106 | 21:35 min | | | 80,45 % | | 
-| 25000-29999 | 1032107 | | | | | Nevysvětlitelná náhlá smrt během trénování. | 
-| 30000-34999 | 1032108 | 28:30 min | | | 80,48 % | | 
-| 35000-39999 | 1032109 | | | | | Nevysvětlitelná náhlá smrt během trénování. | 
-| 40000-44999 | 1032110 | 19:17 min | | | 80,51 % | | 
-| 45000-49999 | 1032111 | 22:54 min | | | 80,62 % | | 
-| 50000-54999 | 1032112 | 22:31 min | | | 80,58 % | | 
-| 55000-59999 | 1032113 | | | | | Nevysvětlitelná náhlá smrt během trénování. | 
-| 60000-64999 | 1032114 | | | | | Nevysvětlitelná náhlá smrt během trénování. | 
-| 65000-68562 | 1032115 | 12:43 min | | | 79,69 % | | 
  
 ===== Splitting trick podle slovního poddruhu, jlibsvm ===== ===== Splitting trick podle slovního poddruhu, jlibsvm =====
Line 141: Line 101:
  
 ===== 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 
------------------------------------------------------------------------------------------------------------------ 
-1473932 0.55500 malt02000. zeman        r     06/02/2010 10:15:02 all.q@tauri5.ufal.hide.ms.mff.     1 
-1473933 0.55500 malt05000. zeman        r     06/02/2010 10:16:17 all.q@tauri9.ufal.hide.ms.mff.     1 
-1473934 0.55500 malt10000. zeman        r     06/02/2010 10:18:17 all.q@tauri2.ufal.hide.ms.mff.     1 
-1473935 0.55500 mert.31733 zeman        r     06/02/2010 10:19:32 all.q@sol3.ufal.hide.ms.mff.cu     1 
-1473956 0.55500 malt20000. zeman        r     06/02/2010 10:20:17 all.q@fireball4.ufal.hide.ms.m     1 
-1473957 0.55500 malt25000. zeman        r     06/02/2010 10:22:17 all.q@tauri10.ufal.hide.ms.mff     1 
-1473958 0.55500 malt30000. zeman        r     06/02/2010 10:24:17 all.q@orion9.ufal.hide.ms.mff.     1 
-1473982 0.55500 malt35000. zeman        r     06/02/2010 10:26:17 all.q@tauri3.ufal.hide.ms.mff.     1 
-1473983 0.55500 malt40000. zeman        r     06/02/2010 10:28:17 all.q@orion8.ufal.hide.ms.mff.     1 
-1473984 0.55500 malt45000. zeman        r     06/02/2010 10:30:17 all.q@orion3.ufal.hide.ms.mff.     1 
-1474005 0.55500 malt50000. zeman        r     06/02/2010 10:32:17 all.q@fireball8.ufal.hide.ms.m     1 
-1474009 0.55500 malt55000. zeman        r     06/02/2010 10:34:17 all.q@orion1.ufal.hide.ms.mff.     1 
-1474010 0.55500 malt60000. zeman        r     06/02/2010 10:36:17 all.q@orion4.ufal.hide.ms.mff.     1 
-1474011 0.55500 malt65000. zeman        r     06/02/2010 10:38:17 all.q@fireball3.ufal.hide.ms.m     1 
-1474032 0.55500 malt-full. zeman        r     06/02/2010 10:40:17 all.q@fireball2.ufal.hide.ms.m     1 
-1474041 0.45734 pardec.03. zeman        r     06/02/2010 10:41:47 all.q@tauri1.ufal.hide.ms.mff.     1 
-10:42 lrc-two:/ha/work/people/zeman/parsing/projects/maltpdt/uppsala-features/stackeager> 
-</code> 
  
 | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Datum | Poznámka | | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Datum | Poznámka |
Line 180: Line 119:
  
 ===== 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ě. 
-Všechny úlohy se úspěšně rozeběhly. 
-job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 
------------------------------------------------------------------------------------------------------------------ 
-1474106 0.55500 malt02000. zeman        r     06/07/2010 10:39:08 all.q@tauri6.ufal.hide.ms.mff.     1 
-1474107 0.55500 malt05000. zeman        r     06/07/2010 10:41:08 all.q@tauri4.ufal.hide.ms.mff.     1 
-1474108 0.55500 malt10000. zeman        r     06/07/2010 10:43:08 all.q@tauri8.ufal.hide.ms.mff.     1 
-1474109 0.55500 malt20000. zeman        r     06/07/2010 10:45:08 all.q@tauri7.ufal.hide.ms.mff.     1 
-1474110 0.55500 malt25000. zeman        r     06/07/2010 10:47:08 all.q@tauri1.ufal.hide.ms.mff.     1 
-1474111 0.55500 malt30000. zeman        r     06/07/2010 10:49:08 all.q@fireball6.ufal.hide.ms.m     1 
-1474112 0.55500 malt35000. zeman        r     06/07/2010 10:51:08 all.q@fireball1.ufal.hide.ms.m     1 
-1474113 0.55500 malt40000. zeman        r     06/07/2010 10:53:08 all.q@orion6.ufal.hide.ms.mff.     1 
-1474114 0.55500 malt45000. zeman        r     06/07/2010 10:55:08 all.q@orion2.ufal.hide.ms.mff.     1 
-1474115 0.55500 malt50000. zeman        r     06/07/2010 10:57:08 all.q@orion10.ufal.hide.ms.mff     1 
-1474116 0.55500 malt55000. zeman        r     06/07/2010 10:59:08 all.q@fireball10.ufal.hide.ms.     1 
-1474117 0.55500 malt60000. zeman        r     06/07/2010 11:01:08 all.q@fireball7.ufal.hide.ms.m     1 
-1474118 0.55500 malt65000. zeman        r     06/07/2010 11:03:08 all.q@orion7.ufal.hide.ms.mff.     1 
-1474119 0.55500 malt-full. zeman        r     06/07/2010 11:05:08 all.q@fireball9.ufal.hide.ms.m     1 
-</code> 
  
 | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Datum | Poznámka | | N | Úloha | Délka trénování | Délka parsingu | Rychlost parsingu | Úspěšnost | Datum | Poznámka |

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