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í
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
Výsledky
Následující tabulka ukazuje úspěšnost DZ parseru s výchozím nastavením na průběžných testovacích datech CoNLL 2007, s původními značkami CoNLL (tabulátory, rysy oddělené svislítky):
Jazyk | Rok | A | G | B | P |
ar | 2006 | 3955 | 2555 | 1400 | 64,6 |
ar | 2007 | 5873 | 3757 | 2116 | 64,0 |
bg | 2006 | 4677 | 3178 | 1499 | 67,9 |
ca | 2007 | 10971 | 7670 | 3301 | 69,9 |
cs | 2006 | 5643 | 3822 | 1821 | 67,7 |
cs | 2007 | 5760 | 4061 | 1699 | 70,5 |
da | 2006 | 5470 | 3792 | 1678 | 69,3 |
de | 2006 | 5403 | 3704 | 1699 | 68,6 |
el | 2007 | 4874 | 3132 | 1742 | 64,3 |
en | 2007 | 9529 | 6163 | 3366 | 64,7 |
eu | 2007 | 4334 | 2477 | 1857 | 57,2 |
hu | 2007 | 5995 | 4088 | 1907 | 68,2 |
it | 2007 | 7643 | 5556 | 2087 | 72,7 |
ja | 2006 | 3384 | 2524 | 860 | 74,6 |
nl | 2006 | 6187 | 4579 | 1608 | 74,0 |
pt | 2006 | 6719 | 4941 | 1778 | 73,5 |
sl | 2006 | 4307 | 2765 | 1542 | 64,2 |
sv | 2006 | 7140 | 5075 | 2065 | 71,1 |
tr | 2007 | 6210 | 3920 | 2290 | 63,1 |
zh | 2006 | 1839 | 1269 | 570 | 69,0 |
zh | 2007 | 2277 | 1506 | 771 | 66,1 |
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.