[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Příprava paralelního korpusu

Toto je přehled některých kroků, které bývá potřeba udělat s paralelním korpusem, než ho předhodíme Mosesovi, Joshuovi či jinému překladači.

Typicky potřebujeme

U některých kroků je důležité, aby byly aplikovány na všechny části dat stejně. To se týká zejména tokenizace, která by měla proběhnout podle jednotných pravidel. Zjednodušující úpravy jako lowercasing potřebujeme aplikovat jak na trénovací data, tak na vstupní, tj. zdrojovou polovinu testovacích dat. S cílovou polovinou testovacích dat (referenčním překladem) to sice můžeme udělat ze zvědavosti v pracovní verzi, ale při konečném vyhodnocení bychom neměli porovnávat lowercase výstup překladače s lowercasovaným referenčním překladem, nýbrž pomocí jazykového modelu či jiného nástroje domyslet velká písmena ve výstupu překladače a takto upravený výstup porovnat s originálním, nijak nezprzněným referenčním překladem.

Pro přípravu dat potřebujeme některé skripty, které jsou přibalené např. k Mosesovi, nebo je můžeme nahradit svými vlastními:

Následující příklady jsou přímo z práce s hindštinou (TIDES). Převádění velkých písmen na malá by pravděpodobně stačilo provést pro angličtinu (hindština velká a malá písmena nerozlišuje), ale takhle si alespoň budeme jisti, že neuniknou případná anglická slova vložená v hindštině, a taky že se oba soubory budou jmenovat analogicky. A pozor, kdybychom hindská data neměli v UTF-8, ale v té jejich “WX” romanizaci, nesmíme lowercasing vůbec provádět, protože velká latinská písmena se tam používají pro úplně jiné znaky než odpovídající malá!

setenv MOSES /net/work/people/zeman/moses
cd /net/work/people/zeman/hindstina/corpus
cp $DATA/para/hi/icon/train.tok train.tok.hi
cp $DATA/para/en/icon/train.tok train.tok.en
$MOSES/tools/scripts/lowercase.perl < train.tok.en > train.lowercased.en
$MOSES/tools/scripts/lowercase.perl < train.tok.hi > train.lowercased.hi
setenv MOSES /net/work/people/zeman/moses
cd /net/work/people/zeman/hindstina/corpus
cp $DATA/para/hi/icon/dev.tok dev.tok.hi
cp $DATA/para/en/icon/dev.tok dev.tok.en
$MOSES/tools/scripts/lowercase.perl < dev.tok.en > dev.lowercased.en
$MOSES/tools/scripts/lowercase.perl < dev.tok.hi > dev.lowercased.hi
setenv MOSES /net/work/people/zeman/moses
cd /net/work/people/zeman/hindstina/corpus
cp $DATA/para/hi/icon/test.tok test.tok.hi
cp $DATA/para/en/icon/test.tok test.tok.en
$MOSES/tools/scripts/lowercase.perl < test.tok.en > test.lowercased.en
$MOSES/tools/scripts/lowercase.perl < test.tok.hi > test.lowercased.hi

Zvláštní. Diff se tváří, že hindská data se lowercasingem opravdu změnila, a změněných řádků není málo. Většinou obsahují latinské písmeno “Z”. Co je to za šum? Z 50000 vět je asi 2000 takových rozdílů.

K tomu Gauravův komentář: Tam, kde se vyskytne celá posloupnost latinských znaků (opravdu asi stačí 2 a více za sebou), jde o nějakou divnou, často pro normálního Hinda nečitelnou romanizaci, kterou někdo nezkonvertoval zpátky. Tohle bude nejlepší prostě vyhodit. Pak se také občas objevuje samotné písmeno, přilepené nebo vložené do slova v dévanágarí. Viděli jsme Z, L a Q, ale mohou být i další. Je možné, že jsou to také nezkonvertované znaky. Z jsme viděli většinou na kraji slova, mohla by to být nějaká interpunkce. Q jsme viděli uprostřed slova a Gaurava nenapadá, co by to mohlo být - prostým vymazáním prý vznikne správné slovo. L jsme viděli taky uprostřed slova a u něj bylo možné vysledovat nějaký význam. Nepochopil jsem přesně jaký, ale to, co mi Gaurav namaloval, vypadalo na samohlásku “i” (krátké, tj. namalované doleva před souhlásku, která v textu předcházela tomu L). Bohužel jsem ale viděl L i samotné na konci věty (místo dandy?), taky 2 za sebou, taky jsem nově viděl Y a H.

Další krok je čištění korpusu od vět delších než 40 tokenů. Zatím k tomu použiju skript, který se mi kdysi vygeneroval u Mosese v rámci nějakého časovaného pokusu:

$MOSES/tools/moses-scripts/scripts-20090128-1534/training/clean-corpus-n.perl train.lowercased en hi train.clean 1 40

Ohlásilo to, že z 50000 vět zbylo 42737.


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