[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
courses:rg:bayes-with-tears [2009/10/27 00:16]
popel vytvořeno
courses:rg:bayes-with-tears [2009/11/02 23:02]
popel Ondrovy zápisky z dnešního čtení
Line 1: Line 1:
 ====== Poznámky k článku ====== ====== Poznámky k článku ======
 [[http://www.isi.edu/natural-language/people/bayes-with-tears.pdf|Kevin Knight: Bayesian Inference with Tears. September 2009.]] [[http://www.isi.edu/natural-language/people/bayes-with-tears.pdf|Kevin Knight: Bayesian Inference with Tears. September 2009.]]
 +
 +===== 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í. Č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ě): Co jsme se dozvěděli (prosím opravte mne, pokud něco píšu špatně):
-  * Nečíslovaný seznam 
  
   * 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.   * 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.
Line 11: Line 12:
   * nová "bayesovská inference" je vybudována na pravděpodobnosti podmíněné právě historií vyprodukovaných jevů   * 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é +  * 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í
-  * 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 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
Line 19: Line 19:
   * zabývali jsme se i tím, k čemu jsou odpovědi na tyhle otázky dobré, např. k výběru nejlepší derivace   * 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ý +  * 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.
-   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 Příště velmi stručně tohle zopakujeme na konkrétním příkladu z bodu 17. Pak
Line 26: Line 25:
  
 O. 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.
 +

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