Table of Contents
Poznámky k článku
1. část (26. října)
Čtení Kevina Knighta nedopadlo podle mého nijak slavně, ale věřím, že repete příští týden to napraví a vše se v dobré obrátí.
Co jsme se dozvěděli (prosím opravte mne, pokud něco píšu špatně):
- dosavadní pstní modely pro EM “vyprávějí pohádku”, jak něco vzniká, ovšem neberou v úvahu už odvyprávěný začátek pohádky.
- takové modely jsou proto nevhodné pro jazyková data, nereflektují skutečnost, že je v našich datech většina jevů rozdělena zipfovsky, tj. že lidé preferují opakovat už vyslovené
- nová “bayesovská inference” je vybudována na pravděpodobnosti podmíněné právě historií vyprodukovaných jevů
- Pavel Pecina je přesvědčen, že metoda učení (kterou jsme vlastně pořád neprobrali) je schopná se naučit jakékoli rozdělení, ne jen zipfovské. Ostatní jsme nevěděli a dokonce jsme se domnívali, že je metoda doslova postavena na tom, že se má naučit zipfovské rozdělení
- prošli jsme si klíčový vzoreček definující P(rule | root(rule), cache) a uvědomili si, že cache se má užívat nezávislá pro různé root(rule), (aby platilo zjednodušení vzorečku na str. 11 uprostřed) čili se dá stejně dobře mluvit o P(rule | cache) pro pevně daný kořen
- prošli jsme si otázky v bodu 15 a nyní např. víme, když máme už naplněnou cache, jak pomocí cache spočítat pst dané derivace, všech derivací vedoucích k danému stromu, všech derivací všech stromů v treebanku ap.
- zabývali jsme se i tím, k čemu jsou odpovědi na tyhle otázky dobré, např. k výběru nejlepší derivace
- Pavel Pecina nás upozornil, že pořád mluvíme o generování treebanku, a že ale v praxi vůbec takhle generovat nebudeme. Že si jen “v rámci trénování vyladíme parametry” (je cache parametr??) tak, aby nám z generování s vysokou pstí vypadl právě náš trénovací treebank, kdybychom omylem generovat začali. Jak ale tedy napíšu např. parser pro novou větu založený na gramatice strojově vykoukané z treebanku (a co je vůbec gramatika v tomto pojetí?? P_0 a vyplněná cache??), to nevíme.
Příště velmi stručně tohle zopakujeme na konkrétním příkladu z bodu 17. Pak
doufám, že se dobrodíme až do slibované sekce 26.
O.
2. část (2. listopadu)
- Vytyčený cíl jsme zvládli! Došli jsme do sekce 26!
- Srovnávali jsme dva typy modelů (EM model a cache model) na příkladech segmentace a tagování.
- Oba typy modelů se používají v unsupervised metodách. Když mám náhodou už anotovaný korpus, můžu ho použít jako startovní bod EM nebo jako P_0 v cache modelu, jinak je k ničemu.
- Oba typy modelů definují vzoreček, jak se vypočítává pst dané konkrétní derivace (tj. otagované sekvence slov či nasegmentovaného čínského slova):
- EM model potřebuje tabulky podmíněných pstí (podle toho, jak mám model postaven, např. P(w_i | t_i)), které nastřelím uniformně a během “trénování” dokonverguju k takovým hodnotám, které maximalizují pst mých dat.
- Cache model žádné takové tabulky nepotřebuje. Jediným vstupem (krom konstant) je vzoreček pro apriorní pst P_0, který danému stavebnímu dílku (např. čínské slovo) dává jeho pst. Žádoucí je jedině, aby P_0 dávala nenulovou pst všemu. Základním rysem cache modelu je, že v derivacích zohledňuje historii a preferuje často užívané stavební dílky.
- Pod označením “trénování modelu” se v obou případech rozumí zjištění těch tabulek, které EM potřebuje a cache model ne. Ty tabulky jsou totiž užitečné i pro finální uplatnění natrénovaného na nová data – např. tagování Viterbim.
- “Trénování” v cache modelu (ano, pořád si myslím, že je to protimluv, viz nápad na konci mailu) se tedy dělá např. tak, že:
- (v ideálním světě) projdu všechny derivace a nasbírám fractional counts, z nich vyplním a normalizuju tabulky
- (pro hrubou představu reálného světa) si najdu nějakou dost pravděpodobnou derivaci a nasbírám fractional counts z ní (díky Janě Strakové)
- (asi v praxi) kumuluju počty přes vícero derivací navštívených během GS, viz níže, které na závěr jednou znormalizuju
- Cyklus se používá:
- v EM během trénování
- cyklí se přes modely (tj. konkrétní hodnoty v tabulkách)
- v každé iteraci projdu všechny derivace celého korpusu (průchod přes všechny iterace je implicitní, užívá se dynamické programování, v daném bodě každé iterace totiž pst následujícího kroku v derivaci nezávisí na tom, jak vypadá začátek derivace. Dyn. prog. toho využije a počítá během průchodu všechny derivace najednou.)
- v cache modelu při Gibbsově samplingu (GS):
- cyklí se přes derivace (tj. konkrétní otagování korpusu)
- vzhledem k tomu, že každý krok derivace ovlivňuje ty následující, nelze počítat se všemi derivacemi najednou, proto se užívá GS:
- v aktuální derivaci (začnu náhodnou) navrhnu místo změny
- prozkoumám všechny možné derivace, které se od té aktuální liší v daném místě
- přesunu se do souseda vybraného náhodně s pstí odpovídající těm sousedům
- Probrali jsme si trik, který stojí za inkrementálním výpočtem psti souseda dané derivace. Kromě samotné psti aktuální derivace potřebuju ještě udržovat počty dílků použitých v derivaci, tj. cache.
- Eda Bejček docela srozumitelně vysvětlil tu exchangeabilitu (vytrhnu čitatel, tím se ostatní čitatelé musí o jedna posunout, aby zabrali jeho místo, ale ten čitatel nakonec zase vrátím, takže výsledek součinu bude stejný; a stejně se jmenovateli, nikoli však se zlomky jako celky), takže tomu věříme.
- Teď dodatečně mne napadla ještě jiná varianta, jak splnit úlohu “otaguj mi tuto sekvenci” pomocí cache modelu, a přitom tabulky neextrahovat: danou sekvenci připojím na konec “trénovacích” dat, nechám Gibbse bloumat derivacemi. Až si budu myslet, že sedí na pěkné derivaci, uříznu její konec a prohlásím ji za otagování mého vstupu.
Uff.
Díky za pomoc,
O.