Desambiguace na úrovni lemmatu

Obsah

 

Zadání projektu

Desambiguací na úrovni lemmatu se rozumí jednoznačné přiřazení lemmatu, tj. základního tvaru, takovému slovnímu tvaru, kterému lze z hlediska morfologie přiřadit více lemmat. V závislosti na kontextu je však správné právě jedno lemma.

Dalším cílem bylo jednak zlepšení úspěšnosti přiřazení správných lemmat daným slovním tvarům a jednak snaha o sledování jistého jevu, který je stejný pro více slovních tvarů a jejich lemmat. Příkladem může být slovní tvar Miroslava, které může mít lemma Miroslav (pokud se jedná o muže) nebo Miroslava (pokud se jedná o ženu). Stejný jev nastane např. u slovního tvaru Petra (rovněž se může jednat o muže jménem Petr nebo o ženu jménem Petra).

 

Situace v korpusu DESAM

Asi 700 slovních tvarů se dvěma různými lemmaty vyskytujících se v části korpusu DESAM bylo rozděleno zhruba do těchto kategorií jevů (všechny příklady jsou uváděny jako trojice (slovní tvar, lemma1, lemma2)):

Podstatné jméno vs. podstatné jméno - velká skupina slovních tvarů, která má společné pouze to, že jsou jejími oběma lemmaty podstatná jména. Tuto skupinu je třeba dále rozdělit na množství malých skupin čítajících bohužel jen několik slovních tvarů. Příklad takové skupiny: ((fyziky, fyzik, fyzika), (kritiky, kritik, kritika), (matematiky, matematik, matematika)).

Mužská jména vs. ženská jména - speciální skupinu slovních tvarů s oběma lemmaty jako podstatnými jmény tvoří vlastní jména osob: ((Alexandra, Alexandr, Alexandra), (Michaela, Michael, Michaela)).

Mužská příjmení vs. ženská příjmení - speciální skupinu slovních tvarů s oběma lemmaty jako podstatnými jmény tvoří příjmení osob: ((Dostálová, Dostál, Dostálová), (Urbanová, Urban, Urbanová)).

Podstatné jméno vs. příjmení - speciální skupina slovních tvarů s lemmatem podstatného jména nebo příjmení osob: (Ježka, ježek, Ježek), (Němci, němec, Němec).

Podstatné jméno vs. přídavné jméno - skupina slov s lemmatem podstatného jména nebo přídavného jména ((obvinění, obvinění, obviněný), (postižení, postižení, postižený), (soukromí, soukromí, soukromý)).

Podstatné jméno vs. přídavné jméno II - tato slova mají lemma zpodstatnělé nebo obyčejné přídavné jméno. Tento rozdíl je zřejmý z příkladů: Dělám jen to, co je dovolené. vs. Vracel jsem se z dovolené. V prvním případě má slovní tvar dovolené lemma dovolený, kdežto ve druhém případě lemma dovolená. Příklady slov: ((červené, červená, červený), (malé, malá, malý)).

Podstatné jméno vs. sloveso - slovní tvary s lemmatem podstatného jména nebo slovesa jako (bál, bál, bát) nebo (moci, moc, moci).

Podstatné jméno vs. sloveso II - skupina slovních tvarů s lemmatem buďto zpodstatnělým přídavným jménem nebo slovesem: (jmenovaná, jmenovaná, jmenovat) a (mražené, mražené, mrazit).

Podstatné jméno vs. sloveso III - zvláštní větší skupina slovních tvarů s lemmatem podstatného jména nebo slovesa: ((dělení, dělení, dělit), (obsazení, obsazení, obsadit), (tvrzení, tvrzení, tvrdit)).

Přídavné jméno vs. sloveso - slovní tvary mohou mít lemma přídavné jméno nebo sloveso. Jedná se o větší skupinu, u které se dá sledovat společný jev: ((definované, definovaný, definovat), (označované, označovaný, označovat)).

Podstatné jméno vs. příslovce - tyto slovní tvary jsou buď podstatným jménem nebo příslovcem ((absolutně, absolutno, absolutně), (objektivně, objektivno, objektivně)).

Podstatné jméno vs. příslovce II - slovní tvary vyskytující se v 7.pádě jednotného čísla a mající jako lemma buďto podstatné jméno nebo příslovce ((celkem, celek, celkem), (mnohem, mnoho, mnohem)).

Zájmeno vs. příslovce - slovní tvary s lemmaty zájmena nebo příslovce (již, jehož, již).

Sloveso vs. sloveso - některé slovní tvary mohou mít jako lemmata 2 různá slovesa, např.: (povede, povést, vést), (váží, vážit, vázat).

Sloveso vs. příslovce - skupina slovních tvarů s lemmaty slovesa nebo příslovce ((čistě, čistit, čistě), (pozdě, pozdit, pozdě)).

Příslovce vs. příslovce - skupina slovních tvarů s lemmaty jako dvě různá příslovce ((dál, dál, dále), (výše, výše, vysoce)).

Stupeň přídavných jmen a příslovcí - některá přídavná jména a příslovce se vyskytují s lemmatem v 1. stupni nebo s lemmatem ve vyšším stupni. Např.: (nejvíce, hodně, nejvíce), (více, hodně, více), (starší, starý, starší).

Zájmeno vs. zájmeno - tato skupina obsahuje slovní tvary mající jako lemmata dvě různá zájmena (již, jehož, jenž).

Ne - některé slovní tvary jsou v korpusu DESAM určeny s jistým lemmatem nebo s lemmatem s předponou ne-, jako např. (Nedávno, dávno, nedávno), (nezbytné, zbytné, nezbytné)).

České lemma vs. Anglické lemma - některá slova mohou být i anglického původu: (Band, banda, band), (set, sto, set).

Nesmysly - velká množina slovních tvarů byla buďto desambiguována chybně, nejednotně nebo nemá smysl zabývat se způsoby rozlišujícími daná lemmata: (ČTI, ČTI, ČTK), (obr., obr., obrázek), (KPSBrno, KPSBrno, Brno).

Kromě toho existují další skupiny obsahující pouze 1 slovní tvar:

(Buď, být, buď), (prvé, prvá, první), (možná, možná, možný), (té, té, ten), (je, on, být) a (má, můj, mít).

Zbytek - blíže neurčený význam vztahů dvou lemmat.

 

Řešení

Jako reprezentativní množina vhodná k nalezení závislostí daného slovního tvaru na kontextu a následného odhadu správného lemmatu pro tento slovní tvar byl vybrán korpus DESAM. Přestože je v něm spousta špatně či nepřesně desambiguovaných slovních tvarů, neovlivnilo to významně výsledky.

V první fázi bylo potřebné pro daný slovní tvar najít množinu úseků vět, kde se tento tvar vyskytuje v kontextu. K tomuto účelu slouží program cqp nebo jeho nádstavba xkwic. Jelikož je snaha celý proces desambiguace automatizovat, byl použit cqp. Jako vhodný kontext byl zvolen pravý i levý kontext délky 5 slov. Po nastavení několika parametrů byl cqp zaslán požadavek na vypsání všech desambiguovaných úseků vět obsahujících hledaný slovní tvar, o kterém se vědělo, jaké má lemma.

Dále bylo potřeba zvolit vhodný prostředek pro zkoumání závislostí slovního tvaru na kontextu. K tomu byl zvolen ILP systém Progol umožňující pracovat i s nepřesnými daty. Výsledek dotazu z cqp byl tedy přetransformován do faktů používaných Progolem, který pak indukoval výslednou teorii.

Na vstupu vyhodnocování musí obdržet Progol následující data:

Ve skutečnosti je Progolu poskytnuta jen část dat, na které je naučena příslušná teorie - učící množina. Zbytek dat je použit na testování kvality dané teorie - testovací množina.

Nalezení teorie bylo provedeno unixovskými skripty deslem1 (pro první lemma) a deslem2 (pro druhé lemma). Součástí tohoto skriptu je i převod dotazu cqp do formátu Progolu od Radka Sedláčka a doménová znalost od Pavla Filipenského. Pro testování teorie byl použit skript testt, který používá predikáty p2w a successRate od RNDr. Lubomíra Popelínského.

Nyní bylo třeba vyzkoušet tyto teorie na neznámém textu(větě). Pomocí programu lemma byly pro každé slovo vygenerovány značky(tagy). Cílem bylo pro hledaný slovní tvar redukovat počet značek. Je jasné, že nelze tímto přístupem slovní tvar zcela zjednoznačnit. Např. pro slovní tvar ženu existuje kromě značky pro lemma hnát, ještě dvě značky pro lemma žena (ženu může být tvar jak pro 2. tak pro 4. pád).

Unixovský skript vcqp provádí výběr vět z korpusu (tentokrát ovšem pouze jako nedesambiguovaných slov). Skript lem nejprve označkuje všechna slova pomocí morfologického analyzátoru lemma, pak pro všechny jejich různé kombinace vygeneruje příklady (předpokládá je jako pozitivní). Na tyto příklady aplikuje teorie pro obě lemmata a zjistí, která z nich byla úspěšnější. Značky té neúspěšné pak může odstranit.

 

Praktické výsledky

Výše uvedený postup byl aplikován na některé skupiny slovních tvarů víceznačných lemmat s těmito výsledky (predikát ist(X,A) znamená, že značka X se vyskytuje v levém kontextu, ist(X,B) podobně znamená výskyt značky X v pravém kontextu):

 

Podstatné jméno vs. sloveso

Příklady: (čekání, čekání, čekat), (dělení, dělení, dělit), (narození, narození, narodit).

Teorie pro podstatné jméno (predikát k1k5ck1):

k1k5ck1(A,B) :- ist(c4,B), ist(tM,A), ist(aP,A).

Úspěšnost na testovací množině: 100 %

Teorie pro sloveso (predikát k1k5ck5):

k1k5ck5(A,B) :- ist(c2,B), ist(c1,A).
k1k5ck5(A,B) :- ist(k1,A), ist(gN,A).
k1k5ck5(A,B) :- ist(k5,B).
k1k5ck5(A,B) :- ist(gN,B).
k1k5ck5(A,B) :- ist(gM,B).
k1k5ck5(A,B) :- ist(nP,B), ist(gF,B), ist(k1,A).

Úspěšnost na testovací množině: 91.7 %

 

Sloveso vs. příslovce

Příklady: (čistě, čistě, čistit), (jistě, jistě, jistit), (pozdě, pozdě, pozdit).

Teorie pro sloveso (predikát k5k6k5):

k5k6k5(A,B) :- ist(p3,B).
k5k6k5(A,B) :- ist(d1,B), ist(p3,A), ist(nS,A).
k5k6k5(A,B) :- ist(k6,B), ist(d1,B).
k5k6k5(A,B) :- ist(k7,B).
k5k6k5(A,B) :- ist(tM,A).
k5k6k5(A,B) :- ist(k7,A).
k5k6k5(A,B) :- ist(nS,A), ist(k2,A).
k5k6k5(A,B) :- ist(tF,A).

Úspěšnost na testovací množině: 94.1 %

Teorie pro příslovce (predikát k5k6k6):

k5k6k6(A,B) :- ist(k2,B), ist(nP,A), ist(k9,A).

Úspěšnost na testovací množině: 94.1 %

 

Mužská vs. ženská jména

Příklady: (Alexandra, Alexandr, Alexandra), (Miroslava, Miroslav, Miroslava), (Jana, Jan, Jana).

Teorie pro mužská jména (predikát mzm):

mzm(A,B) :- ist(gM,B), ist(eA,A), ist(c2,A).
mzm(A,B) :- ist(k5,B), ist(c2,B), ist(eA,A).
mzm(A,B) :- ist(gI,A), ist(gF,A), ist(c4,A).
mzm(A,B) :- ist(eA,B), ist(k7,A), ist(c4,A).
mzm(A,B) :- ist(nP,B), ist(k7,B), ist(gN,B).
mzm(A,B) :- ist(p3,B), ist(c4,B), ist(nS,A).
mzm(A,B) :- ist(gI,B), ist(gM,A).
mzm(A,B) :- ist(k8,A), ist(k2,A).
mzm(A,B) :- ist(c2,B), ist(gM,A), ist(eA,A).
mzm(A,B) :- ist(c6,B), ist(k7,A), ist(c6,A).
mzm(A,B) :- ist(gM,B), ist(gN,A).
mzm(A,B) :- ist(k3,B), ist(c2,A).
mzm(A,B) :- ist(kX,A), ist(gF,A).
mzm(A,B) :- ist(c2,B), ist(k5,A), ist(c4,A).
mzm(A,B) :- ist(k8,A), ist(c2,A).
mzm(A,B) :- ist(tM,B), ist(c2,B).
mzm(A,B) :- ist(c7,A), ist(c2,A).

Úspěšnost na testovací množině: 90.0 %

Teorie pro ženská jména (predikát mzz):

mzz(A,B) :- ist(c1,B), ist(mP,A), ist(aP,A).
mzz(A,B) :- ist(nP,B), ist(c1,B), ist(c1,A).
mzz(A,B) :- ist(xS,B), ist(k5,B).
mzz(A,B) :- ist(k6,B), ist(k5,B), ist(gF,B).
mzz(A,B) :- ist(c2,B), ist(c1,B), ist(tP,A).
mzz(A,B) :- ist(kX,B), ist(gF,B).
mzz(A,B) :- ist(c1,B), ist(xP,A).
mzz(A,B) :- ist(tP,B), ist(xM,A).
mzz(A,B) :- ist(nP,B), ist(d1,B), ist(xC,A).
mzz(A,B) :- ist(k4,B), ist(gI,B), ist(c1,B).

Úspěšnost na testovací množině: 82.5 %

 

Poslední dvojice teorií byla prověřena na následujícím textu:

Známá barová tanečnice <Daniela> byla dnes ve formě.

Slovní tvar Daniela spadal do poslední skupiny mužských a ženských jmen, teorie by tedy měla fungovat i zde a to i přesto, že na tomto slově nebyla naučena. Tento slovní tvar má celkem 5 různých značek, z nichž 4 jsou pro lemma Daniel a 1 pro lemma Daniela.

Výsledek: Teorie predikátu mzm uspěla na 0 % případů, zatímco teorie mzz na 100 % případů. Protoe celkový počet vech moných kombinací různých značek je 1680, lemma Daniel můžeb být jednoznačně odstraněno. Výsledkem tedy je, že počet lemmat byl zredukován z 5 na 1.

 

Soubory a další odkazy