This is an old revision of the document!
Table of Contents
Pokusy s DZ Parserem pro CoNLL
Tato stránka původně vznikla jako záznam o tom, jakým způsobem jsem spouštěl parser během soutěže v parsingu CoNLL 2007, abych tyto pokusy dokázal zopakovat. Postupně se mění na stránku o pokusech s daty CoNLL obecně (nejen 2007). Data leží v /net/data/conll
. Parser odsud čte, ale nepíše sem. Pro soubory související se syntaktickou analýzou těchto dat mám samostatnou složku /net/work/people/zeman/conll-dzparser
.
Proměnné
Používám proměnné prostředí, které mám nastavené ve svém .cshrc
takto:
setenv PARSINGROOT /net/work/people/zeman/parsing setenv TOOLS $PARSINGROOT/tools setenv INTERSET ~zeman/projekty/interset setenv PARSER ~zeman/projekty/parser
Kromě toho mám ve své PATH
přidáno $INTERSET/bin
a v PERLLIB
a PERL5LIB
mám mj. $INTERSET/lib
a $PARSINGROOT/lib
.
Další proměnné, určené přímo pro rozbor dat CoNLL mým parserem:
setenv DATA /net/data/conll setenv OUTPUT /net/work/people/zeman/conll-dzparser
Zpracování
Zpracování má dvě části. První se týká přípravy dat, jejich převodu do formátu CSTS apod. Tato část není bezprostředně závislá na konkrétním parseru a odehrává se přímo ve složce s daty ($DATA
). Druhá část zahrnuje natrénování parseru, otestování parseru na testovacích datech a vyhodnocení výsledků. Může se opakovat s různými parsery a s různým nastavením parametrů. Tato část se odehrává v pracovní složce ($OUTPUT
). Na zpracování jsem si vytvořil i Makefile, ale bylo to v době, kdy jsem ještě obě části provozoval přímo ve složce s daty, takže cesty uvnitř Makefilu je nutné upravit. Makefile se nachází v /net/data/conll/2007/Makefile
.
Každý jazyk zkouším zpracovat jednak s původními značkami, jednak se značkami převedenými do české sady PDT. Základní zpracování (bez přiřazování syntaktických značek) předpokládá pouze dva kroky: natrénování modelu na průběžných trénovacích datech a jeho otestování na průběžných testovacích datech. U základního zpracování používáme výchozí, jazykově nezávislé nastavení parseru.
cd $OUTPUT setenv ROK 2007 setenv JAZYK cs $PARSER/train.pl < $DATA/$ROK/$JAZYK/dtrain.csts > $JAZYK.stat ($PARSER/parse.pl -m $JAZYK.stat < $DATA/$ROK/$JAZYK/dtest.csts > $JAZYK.dtest.dz.csts) >& $JAZYK.dtest.log
Zpracování na clusteru
V $OUTPUT/bin
mám několik skriptů, které odesílají parsovací úlohy na cluster:
qtp2006.csh
… přetrénování a rozbor všech jazyků 2006 bez machinací se značkamiqtp2007.csh
… přetrénování a rozbor všech jazyků 2007 bez machinací se značkamiqtppdt.csh
… přetrénování a rozbor dat se značkami převedenými do sady PDT u jazyků, u kterých to umíme, z obou lettrainparse.csh ROK JAZYK VAR INI
… přetrénování a rozbor jednoho korpusu (rok a jazyk jsou jasné parametry, var je varianta dat, třeba “pdttags
”, a ini je název konfiguračního souboru bez přípony .ini, třeba “03
”)harvest.csh
… pro všechny roky a jazyky (a u korpusů, u kterých to umíme, i pro data se značkami převedenými do PDT) zavoláporovnat.pl
na zlatý standard a výstup parseru, čímž kromě úspěšnosti získáme i McNemarův test statistické významnosti zlepšení nebo zhoršení, které přinesl převod značek oproti datům s původními značkamivypsat_tabulku.pl
dělá podobnou věc jakoharvest.csh
, ale výsledky rovnou formátuje jako tabulku, kterou můžeme uložit v této wiki. Má parametrINI
, který říká, jaké výsledky (získané s jakým konfiguračním souborem) se mají sbírat.
Výsledky
Výchozí nastavení
Následující tabulka ukazuje úspěšnost DZ parseru s výchozím nastavením na průběžných testovacích datech CoNLL, s původními neupravenými značkami CoNLL (tabulátory, rysy oddělené svislítky).
Úspěšnost parsingu s původními značkami CoNLL:
Jazyk | Rok | P |
ar | 2006 | 63.9 |
ar | 2007 | 64.9 |
bg | 2006 | 72.3 |
ca | 2007 | 72.7 |
ca | 2009 | 73.6 |
cs | 2006 | 64.1 |
cs | 2007 | 69.1 |
cs | 2009 | 65.8 |
da | 2006 | 69.9 |
de | 2006 | 71.8 |
de | 2009 | 72.3 |
el | 2007 | 65.0 |
en | 2007 | 70.6 |
en | 2009 | 69.5 |
es | 2009 | 71.8 |
eu | 2007 | 58.6 |
hu | 2007 | 62.3 |
it | 2007 | 71.5 |
ja | 2006 | 87.3 |
ja | 2009 | 83.2 |
nl | 2006 | 73.7 |
pt | 2006 | 73.8 |
sl | 2006 | 58.7 |
sv | 2006 | 71.0 |
tr | 2007 | 64.6 |
zh | 2006 | 69.9 |
zh | 2007 | 69.0 |
zh | 2009 | 57.7 |
Následující tabulka srovnává výsledky s původními značkami CoNLL a výsledky se značkami PDT. Data jsou dtest. Nastavení parseru je výchozí, tj. úprava značek ani selektivní lexikalizace není zapnuta. Poslední sloupec říká, zda je změna úspěšnosti statisticky významná podle McNemarova testu na úrovni 0,05 (χ2 ≥ 3,84).
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 63.9 | 66.8 | lepší | ano (19.858476) |
ar | 2007 | 64.9 | 64.2 | horší | ne (1.497453) |
bg | 2006 | 72.3 | 71.2 | horší | ne (3.205607) |
cs | 2006 | 64.1 | 64.1 | lepší | ne (0.007519) |
cs | 2007 | 69.1 | 68.6 | horší | ano (3.948357) |
da | 2006 | 69.9 | 70.5 | lepší | ne (2.082218) |
de | 2006 | 71.8 | 67.5 | horší | ano (61.301887) |
en | 2007 | 70.6 | 65.4 | horší | ano (227.951382) |
pt | 2006 | 73.8 | 76.4 | lepší | ano (44.312588) |
sv | 2006 | 71.0 | 72.6 | lepší | ano (12.763713) |
zh | 2006 | 69.9 | 68.4 | horší | ne (1.574297) |
zh | 2007 | 69.0 | 63.7 | horší | ano (22.360248) |
U čínštiny lze zhoršení snadno vysvětlit. Čínská sada značek se velmi liší od ostatních, do Intersetu se vejde jen nepatrný zlomek informace, kterou značky nesou, takže ztráta informace při převodu značek je mimořádně veliká.
01: zapnuté upravování značek a selektivní lexikalizace
Následující tabulka ukazuje úspěšnost DZ parseru se zapnutou úpravou morfologických značek a selektivní lexikalizací na průběžných testovacích datech CoNLL, s původními značkami CoNLL (tabulátory, rysy oddělené svislítky).
Jazyk | Rok | P |
ar | 2006 | 64.3 |
ar | 2007 | 59.8 |
bg | 2006 | 67.9 |
ca | 2007 | 69.9 |
cs | 2006 | 56.0 |
cs | 2007 | 58.7 |
da | 2006 | 69.3 |
de | 2006 | 68.5 |
el | 2007 | 67.5 |
en | 2007 | 64.7 |
eu | 2007 | 58.4 |
hu | 2007 | 66.1 |
it | 2007 | 73.4 |
ja | 2006 | 74.6 |
nl | 2006 | 73.0 |
pt | 2006 | 73.5 |
sl | 2006 | 63.8 |
sv | 2006 | 71.1 |
tr | 2007 | 65.1 |
zh | 2006 | 69.0 |
zh | 2007 | 66.1 |
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 64.3 | 67.3 | lepší | ano (20.855670) |
ar | 2007 | 59.8 | 66.7 | lepší | ano (149.962142) |
bg | 2006 | 67.9 | 71.4 | lepší | ano (44.137931) |
cs | 2006 | 56.0 | 71.6 | lepší | ano (597.483871) |
cs | 2007 | 58.7 | 74.2 | lepší | ano (616.602151) |
da | 2006 | 69.3 | 69.5 | lepší | ne (0.114286) |
en | 2007 | 64.7 | 65.6 | lepší | ano (8.781548) |
sv | 2006 | 71.1 | 73.1 | lepší | ano (24.144134) |
zh | 2006 | 69.0 | 68.1 | horší | ne (1.000000) |
zh | 2007 | 66.1 | 63.6 | horší | ano (8.950413) |
Srovnání výchozího nastavení CoNLL s nastavením 01 PDT
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 63.9 | 67.3 | lepší | ano (21.670630) |
ar | 2007 | 64.9 | 66.7 | lepší | ano (9.078534) |
bg | 2006 | 72.3 | 71.4 | horší | ne (1.904968) |
cs | 2006 | 64.1 | 71.6 | lepší | ano (170.571020) |
cs | 2007 | 69.1 | 74.2 | lepší | ano (85.242604) |
da | 2006 | 69.9 | 69.5 | horší | ne (0.821288) |
en | 2007 | 70.6 | 65.6 | horší | ano (176.765737) |
sv | 2006 | 71.0 | 73.1 | lepší | ano (24.369923) |
zh | 2006 | 69.9 | 68.1 | horší | ne (2.330645) |
zh | 2007 | 69.0 | 63.6 | horší | ano (22.769829) |
02: navíc zakázané přeskakování bezdětných předložek
Jazyk | Rok | P |
ar | 2006 | 64.3 |
ar | 2007 | 59.8 |
bg | 2006 | 68.0 |
ca | 2007 | 69.9 |
cs | 2006 | 56.1 |
cs | 2007 | 58.7 |
da | 2006 | 68.3 |
de | 2006 | 68.5 |
el | 2007 | 67.1 |
en | 2007 | 63.8 |
eu | 2007 | 58.4 |
hu | 2007 | 62.3 |
it | 2007 | 72.1 |
ja | 2006 | 74.6 |
nl | 2006 | 73.0 |
pt | 2006 | 73.5 |
sl | 2006 | 63.8 |
sv | 2006 | 71.0 |
tr | 2007 | 65.1 |
zh | 2006 | 69.0 |
zh | 2007 | 66.1 |
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 64.3 | 67.6 | lepší | ano (24.635569) |
ar | 2007 | 59.8 | 66.9 | lepší | ano (162.665108) |
bg | 2006 | 68.0 | 71.3 | lepší | ano (41.317073) |
cs | 2006 | 56.1 | 71.4 | lepší | ano (583.183944) |
cs | 2007 | 58.7 | 74.0 | lepší | ano (611.467919) |
da | 2006 | 68.3 | 69.8 | lepší | ano (9.116809) |
en | 2007 | 63.8 | 67.3 | lepší | ano (97.889876) |
sv | 2006 | 71.0 | 73.5 | lepší | ano (38.126126) |
zh | 2006 | 69.0 | 68.0 | horší | ne (1.249135) |
zh | 2007 | 66.1 | 63.5 | horší | ano (9.836066) |
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 63.9 | 67.6 | lepší | ano (26.578554) |
ar | 2007 | 64.9 | 66.9 | lepší | ano (12.122523) |
bg | 2006 | 72.3 | 71.3 | horší | ne (2.198697) |
cs | 2006 | 64.1 | 71.4 | lepší | ano (163.208696) |
cs | 2007 | 69.1 | 74.0 | lepší | ano (78.750246) |
da | 2006 | 69.9 | 69.8 | horší | ne (0.065772) |
en | 2007 | 70.6 | 67.3 | horší | ano (80.847587) |
sv | 2006 | 71.0 | 73.5 | lepší | ano (35.800000) |
zh | 2006 | 69.9 | 68.0 | horší | ne (2.623482) |
zh | 2007 | 69.0 | 63.5 | horší | ano (23.875776) |
03: navíc zapnuté modelování pseudovalence
Úspěšnost parsingu s původními značkami CoNLL:
Jazyk | Rok | P |
ar | 2006 | 64.4 |
ar | 2007 | 59.8 |
bg | 2006 | 67.6 |
ca | 2007 | 69.9 |
cs | 2006 | 56.0 |
cs | 2007 | 58.7 |
da | 2006 | 68.3 |
de | 2006 | 69.5 |
el | 2007 | 67.2 |
en | 2007 | 64.2 |
eu | 2007 | 58.4 |
hu | 2007 | 62.3 |
it | 2007 | 72.2 |
ja | 2006 | 74.9 |
nl | 2006 | 73.2 |
pt | 2006 | 73.5 |
sl | 2006 | 63.8 |
sv | 2006 | 71.0 |
tr | 2007 | 65.2 |
zh | 2006 | 67.5 |
zh | 2007 | 64.6 |
Srovnání úspěšnosti parsingu s původními značkami a se značkami PDT:
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 64.4 | 67.6 | lepší | ano (23.953216) |
ar | 2007 | 59.8 | 67.0 | lepší | ano (165.491130) |
bg | 2006 | 67.6 | 71.0 | lepší | ano (45.224638) |
cs | 2006 | 56.0 | 71.4 | lepší | ano (587.655280) |
cs | 2007 | 58.7 | 74.3 | lepší | ano (627.063764) |
da | 2006 | 68.3 | 69.8 | lepší | ano (8.878214) |
de | 2006 | 69.5 | 67.7 | horší | ano (9.841876) |
en | 2007 | 64.2 | 67.9 | lepší | ano (110.976037) |
pt | 2006 | 73.5 | 76.4 | lepší | ano (42.581187) |
sv | 2006 | 71.0 | 73.2 | lepší | ano (27.717540) |
zh | 2006 | 67.5 | 68.8 | lepší | ne (2.042553) |
zh | 2007 | 64.6 | 64.6 | stejná | ne (0.000000) |
Totéž, ale parsing s původními značkami použil výchozí konfiguraci místo 03.
Jazyk | Rok | P(CoNLL) | P(PDT) | Změna | McNemar |
ar | 2006 | 63.9 | 67.6 | lepší | ano (27.380000) |
ar | 2007 | 64.9 | 67.0 | lepší | ano (12.949640) |
bg | 2006 | 72.3 | 71.0 | horší | ne (3.688525) |
cs | 2006 | 64.1 | 71.4 | lepší | ano (167.052632) |
cs | 2007 | 69.1 | 74.3 | lepší | ano (87.422200) |
da | 2006 | 69.9 | 69.8 | horší | ne (0.046272) |
de | 2006 | 71.8 | 67.7 | horší | ano (54.691057) |
en | 2007 | 70.6 | 67.9 | horší | ano (55.470000) |
pt | 2006 | 73.8 | 76.4 | lepší | ano (34.848721) |
sv | 2006 | 71.0 | 73.2 | lepší | ano (22.530318) |
zh | 2006 | 69.9 | 68.8 | horší | ne (0.757576) |
zh | 2007 | 69.0 | 64.6 | horší | ano (14.266376) |
Která konfigurace je nejúspěšnější pro který jazyk?
Jazyk | Rok | orig df | pdt df | orig 03 | pdt 03 |
ar | 2006 | 63.9 | 66.8 | 64.4 | 67.6 |
ar | 2007 | 64.9 | 64.2 | 59.8 | 67.0 |
bg | 2006 | 72.3 | 71.2 | 67.6 | 71.0 |
ca | 2007 | 72.7 | 69.9 | ||
cs | 2006 | 64.1 | 64.1 | 56.0 | 71.4 |
cs | 2007 | 69.1 | 68.6 | 58.7 | 74.3 |
da | 2006 | 69.9 | 70.5 | 68.3 | 69.8 |
de | 2006 | 71.8 | 67.5 | 69.5 | 67.7 |
el | 2007 | 65.0 | 67.2 | ||
en | 2007 | 70.6 | 65.4 | 64.2 | 67.9 |
eu | 2007 | 58.6 | 58.4 | ||
hu | 2007 | 62.3 | 62.3 | ||
it | 2007 | 71.5 | 72.2 | ||
ja | 2006 | 87.3 | 74.9 | ||
nl | 2006 | 73.7 | 73.2 | ||
pt | 2006 | 73.8 | 76.4 | 73.5 | 76.4 |
sl | 2006 | 58.7 | 63.8 | ||
sv | 2006 | 71.0 | 72.6 | 71.0 | 73.2 |
tr | 2007 | 64.6 | 65.2 | ||
zh | 2006 | 69.9 | 68.4 | 67.5 | 68.8 |
zh | 2007 | 69.0 | 63.7 | 64.6 | 64.6 |
Starší poznámky
Postup zpracování jednoho jazyka CoNLL:
$cesta je cesta k datům daného jazyka. Např. pro češtinu je to “/net/data/conll/2007/czech/pdt”.
$xx je kód daného jazyka podle ISO 639-1.
$PARSINGROOT je cesta k mé pracovní kopii SVN balíku s parsery
$parser je cesta k mému parseru, tedy ~zeman/projekty/parser
$PARSINGROOT/tools/conll2csts.pl -l $xx < $cesta/${xx}train.conll > $cesta/${xx}train.csts $PARSINGROOT/tools/conll2csts.pl -l $xx < $cesta/${xx}test.conll > $cesta/${xx}test.csts $parser/train.pl < $cesta/${xx}train.csts > $cesta/${xx}.stat $parser/atrain.pl < $cesta/${xx}train.csts > $cesta/${xx}.astat $parser/parse.pl -m $cesta/${xx}.stat < $cesta/${xx}test.csts > $cesta/${xx}test.dz.csts $parser/aclass.pl -m $cesta/${xx}.astat -z mdgdz < $cesta/${xx}test.dz.csts > $cesta/${xx}test.dz.a.csts $PARSINGROOT/tools/csts2conll.pl < $cesta/${xx}test.dz.a.csts > $cesta/${xx}test.dz.conll
Takhle to pro čínštinu 2006 nefunguje. Jednak máme dtrain a dtest, jednak při zavolání z cesty s daty (ale s plnou cestou, jak je uvedeno výše) parser stávkuje a nenačte data ze standardního vstupu. Měl by alespoň vypsat cestu ke konfiguračnímu souboru, který používá.
setenv parser ~zeman/projekty/parser setenv cesta /net/data/conll/2006/chinese/sinica setenv xx zh $parser/train.pl < $cesta/${xx}dtrain.csts > $cesta/${xx}.stat $parser/parse.pl -m $cesta/${xx}.stat < $cesta/${xx}dtest.csts > $cesta/${xx}dtest.dz.csts ~zeman/projekty/interset/bin/csts-zh-conll-cs-pdt.pl < $cesta/${xx}dtrain.csts > $cesta/${xx}dtrain.pdt.csts ~zeman/projekty/interset/bin/csts-zh-conll-cs-pdt.pl < $cesta/${xx}dtest.csts > $cesta/${xx}dtest.pdt.csts $parser/train.pl < $cesta/${xx}dtrain.pdt.csts > $cesta/${xx}.pdt.stat $parser/parse.pl -m $cesta/${xx}.pdt.stat < $cesta/${xx}dtest.pdt.csts > $cesta/${xx}dtest.pdt.dz.csts
Čeština 2006
setenv cesta /net/data/conll/2006/czech/pdt setenv xx cs cd $cesta csts_convert_tags.pl -f cs::conll -t cs::pdt < cstrain.csts > cstrain.pdttags.csts csts_convert_tags.pl -f cs::conll -t cs::pdt < cstest.csts > cstest.pdttags.csts $PARSER/train.pl < $cesta/${xx}train.pdttags.csts > $cesta/${xx}.pdttags.stat $PARSER/parse.pl -m $cesta/${xx}.pdttags.stat < $cesta/${xx}test.pdttags.csts > $cesta/${xx}test.pdttags.dz.csts
Výsledky (365 vět, které CoNLL dodalo jako testovací): A 5853 - G 4197 - B 1656 - P 71,71 %
Parser (i trénování) byl spuštěn s výchozími parametry bez konfiguračního souboru. Neměl tušení, že zpracovává svůj rodný jazyk. Kromě toho, že testovací data jsou jiná (a podstatně menší), než jsem měl přímo při práci s PDT, také chybí přídavné informace u lemmat (protože je CoNLL částečně přesunulo do atributu Sem, jehož hodnotu jsem při převádění značek zpět na PDT zahodil). Parser z nich využíval informace o křestním jménu a příjmení. Na druhou stranu parseru mohlo pomoct, že pracujeme s ručně přiřazenými značkami.