====== 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 [[jak-na-trtok|~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 ''