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
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.