[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Table of Contents

CzEng - mining

Hlavni mail


Ahoj,

commitnul jsem na czeng fungující mining pipelinu, která zatím bere
všechny zdroje z minulého CzEngu krom subtitles a dovede je do
segmentované podoby. Výsledek by se neměl nijak drasticky lišit od
toho, co tu bylo vloni. Největší rozdíl bude asi ve zdroji EMEA, kde
má teď segmentaci na starosti trtok, a tam se ještě uvidí, jestli tam
nenaseká víc chyb než původní segmentace.

S výslednou pipelinou se pracuje dost podobně jako v minulém CzEngu.
Je to vždy postaveno kolem nějakého Makefilu, ve kterém jsou cíle
prepare.zdroj a clean-zdroj (dříve convert-zdroj-to-f2). Zdroje
prepare.zdroj berou data z data-backup a ukládají si je do nějakého
svého úložiště (v případě zdrojů z CzEng 0.9 to je
mining/czeng09-sources/collected-data). Cíle clean-zdroj pak berou
data z těchto úložišť, čistí je a výsledky hází buď do složky
mining/cleaned či mining/segmented, pokud jsou data již segmentovaná.
Takovýhle Makefile existuje v mining/czeng09-sources a obstarává
zdroje z CzEngu 0.9. Podobný Makefile by pak měl existovat i v
mining/umc-sources. V mining je pak přímo takovýto kořenový Makefile,
který má jako “zdroje” už czeng09, umc a pak nové zdroje Petry
Galuščákové. Krom těchto zdrojů jsou v těchto Makefilech ještě zdroje
prepare a clean-all, které ti vypíší všechny cíle z té dané kategorie
z toho Makefilu.

Některé cíle vypisují, co by se mělo spustit, na místo toho, aby to
samy udělaly. Snažil jsem se dodržovat, aby u cílů typu prepare.zdroj
a clean-zdroj make rovnou pracoval, zatímco u cílů typu prepare či
clean-all jsem preferoval výpis cílů. Tady je pak jen zrada v případě
cílů clean-celex a clean-microsoft v czeng09-sources, které se samy
ještě rozkládají na menší joby. Při volání “make clean.czeng09” se tak
tudíž instrukce pro vykonání jejich čištění nejspíš ztratí v moři
logovacích výstupů a tudíž bude asi nutné zajít osobně do
czeng09-sources a tam je makenout.

V kořenovém mining/Makefile jsou pak navíc cíle segment,
segment.parallel, train a train.parallel. Segment bere soubory z
cleaned a pouští na ně tokenizér s patřičnou konfigurací. Výsledky pak
přidává do složky segmented. Train slouží k tomu, že spustí trénování
trtoku pro všechna tokenizační schémata zmíněná ve složce cleaned.
Hodí se tedy ho spustit před vůbec prvním segmentováním, ale potom, co
už máš všechny zdroje v cleaned a tudíž to natrénuje všechny potřebná
schémata. Jakmile to jednou doběhne, tak už bys to nikdy neměl
potřebovat měnit, pokud nebudeš měnit samotnou konfiguraci trtoku.
Verze .parallel vykonávají úkoly pro jednotlivé jazyky a tokenizačních
schémata paralelně přes qsubmit.

Při tahání dat z data-backup se předpokládá přítomnost složky
data-backup v czeng09-sources, umc-sources a mining. Sám osobně mám
lokální checkout celého czeng repozitáře a mám na těchto třech místech
symlink. Na použití trtoku jej budeš nejdřív zapotřebí taky
zkompilovat. Ondřej Bojar postavil mining/tools/Makefile, který pomáhá
s jeho kompilací. V ~marsik/jak_na_trtok je pak v první sekci
“Kompilace” popsáno, jak sehnat nějaké další prerekvizity, které
nemusíš mít zrovna nainstalované.

V mining tedy stačí udělat:

make prepare.czeng09
make clean-czeng09
cd czeng09-sources
make clean-celex JOBS=nějaký rozumný počet jobů, třeba 10
spustit výstup předchozího příkazu
make clean-microsoft
spustit výstup předchozího příkazu
cd ..
make train.parallel
make segment.parallel

Jednotlivé kroky jsem testoval. Mělo by to stačit takhle, možná jsem
ale něco opomenul. Kdyžtak se ozvi.


Pak by to teda chtělo přidat do toho kořenového Makefilu nějaký cíl
align, který by bral data ze segmented a pouštěl na ně hunalign.
Popíšu ti tedy přesnou podobu dat v segmented.

Soubory jsou v UTF-8 a měly by obsahovat už jen samotný text.
Každá věta by měla být na odděleném řádku.
Pokud zdroj nabízel nějaké zarovnání (obě jazykové verze šlo nějak
rozdělit na bloky takové, že k-tý český blok odpovídal k-tému
anglickému bloku), tak byly mezi jednotlivé bloky zarovnání vloženy
dvojité newliny. Tímto způsobem bylo zachováno zarovnání ve zdrojích,
které už byly alignované a např. v Project Syndicate je to použito na
oddělení názvu článku, autora a pak samotného textu.
Pokud jednotlivé soubory obsahovaly více různých poddokumentů (např.
chybové hlášky a stringy z nějaké aplikace), tak ty jsou pak odděleny
trojitou newlinou. Ta značí, že přes tuto hranici nikdy nejde
koreference a nejspíš by se měla nějakým způsobem zachovat. Trojitá
newlina taky implikuje zarovnání a tudíž také platí, že trojitou
newlinou oddělené bloky si navzájem odpovídají.

U tohohle označování hranic bloků zarovnání pozor na vazby 0-N v
alignmentu. Ty se pak projeví prázdným blokem na jedné straně a
dostaneš tak místo dvojité newliny čtyřnásobnou newlinu (příp. šesti-,
či osmi-, násobnou, pokud takových vazeb bude za sebou víc). Příklad
najdeš třeba v Kačence v textu jude.
Tady pak vyvstává otázka, jak řešit situaci, kdy uvidíš třeba šest
newline (je to trojitý alignment block break anebo dvojitý subdocument
break?). Jelikož žádný poddokument by neměl být prázdný, tak by se to
mělo brát jako ty hranice bloků zarovnání. Čili když uvidíš newliny,
tak pokud je 1, jedná se prostě o konec věty, když uvidíš 3, tak to je
konec poddokumentu, a pokud uvidíš nějaký jiný počet, tak by měl být
sudý a měly by to být všechno hranice obklopující prázdné bloky
zarovnání.
Na poddokumenty jsou rozděleny jen zdroje microsoft, kde a gnome.
Všechny ostatní zdroje používají jen ty dvojité newliny, pokud mají
nějaký alignment (tedy by microsoft, kde a gnome jsou zarovnané podle
bloků vzniklých splitem podle trojité newliny a ostatní podle
dvojité). Nevím, co všechno za informace z toho zarovnání využiješ,
jestli to budeš muset takhle řešit, ale jako taková jednodušší
vlastnost, která z toho vyplývá, je třeba to, že alignment nikdy nejde
přes prázdný řádek (vícenásobná newlina).


Kdyby si s tím měl nějaké problémy, tak se ozvi.

S pozdravem,
Jirka Maršík

Poznamka


Ahoj,

nakonec je to jenom par drobnosti – omylem jsem preskocil poznamku o
“jak na trtok” v tom preposlanem mailu, proto mi nesel zkompilovat.

Nicmene i tak je potreba bud opravit Makefily, nebo si rucne pomoct,
aby to dobehlo:

rm collected-data/EMEA0.3 && make prepare.emea03 # jinak neprosel make
prepare.czeng09
rm -r collected-data/microsoft/Czech && make prepare.microsoft # jinak
spadly qsubremake clean-microsoft.s*

Zdravi
Ales


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