[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Table of Contents

Pokusy s DZ Parserem pro CoNLL

CoNLL Shared Task je soutěž v závislostní syntaktické analýze více jazyků, která probíhala v letech 2006, 2007, 2008 a 2009. Tato stránka původně vznikla jako záznam o tom, jakým způsobem jsem spouštěl parser během CoNLL 2007, abych tyto pokusy dokázal zopakovat. Postupně se mění na stránku o pokusech s daty CoNLL obecně.

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

$OUTPUT/bin mám několik skriptů, které odesílají parsovací úlohy na cluster:

Sémantika 2009

Aby vyhodnocení CoNLL 2009 fungovalo, musím do výsledků doplnit alespoň nějakou sémantiku, i kdyby třeba náhodně.

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

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


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