[ 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

Both sides previous revision Previous revision
Next revision
Previous revision
user:zeman:ukoly:kontrola-pravopisu [2008/12/09 22:44]
zeman Oprava P©.
user:zeman:ukoly:kontrola-pravopisu [2013/10/08 08:09] (current)
zeman quest
Line 1: Line 1:
 ====== Kontrola pravopisu ====== ====== Kontrola pravopisu ======
-//(úloha z počítačového zpracování přirozeného jazyka)// +{{template>spolecne}}
- +
-//Upozornění: Specifikace je detailnější (a tudíž více svazující) než bývá u zápočtových úloh zvykem. Ideálně by díky tomu měla tři řešení téže úlohy od tří různých lidí být zaměnitelná; šetří vám to také práci s dokumentací, která už je součástí zadání. Samozřejmě nelze vyloučit, že najdete dobrý důvod, aby něco bylo jinak než ve specifikaci; takové případy se mnou prosím [[zeman@ufal.mff.cuni.cz|konzultujte]]. Bez posvěcení se raději od specifikace zbytečně neodchylujte. Kdo bude místo na STDOUT čmárat do souboru, jehož cesta je zadrátována ve zdrojáku jako "C:\Documents and Settings\PanVopička\Dokumenty\tisícdalšíchadresářů\mujchytrysoubor.dat" apod., nejenže nedostane zápočet, ale bude podroben veřejnému zostuzení.//+
  
 Kontrola pravopisu //(spell checking)// obvykle zahrnuje dvě podúlohy: Kontrola pravopisu //(spell checking)// obvykle zahrnuje dvě podúlohy:
Line 10: Line 8:
 Pokud nemáte ručně vytvořený slovník, můžete si vypomoci tím, že se ho naučíte z dostatečně velkého korpusu. Musíte ale pamatovat na to, že korpusy někdy obsahují i překlepy, tedy slova, která ve slovníku mít nechcete. Slova, která navrhujete, by pak měla být seřazená podle pravděpodobnosti, že jsou opravou dané chyby. Díky tomu jednak uživatel dostane nabídku, která mu skutečně pomůže, jednak by mělo být možné kontrolu aplikovat neinteraktivně, tj. program sám nahradí chybná slova nejpravděpodobnějšími opravami ze slovníku. Pokud nemáte ručně vytvořený slovník, můžete si vypomoci tím, že se ho naučíte z dostatečně velkého korpusu. Musíte ale pamatovat na to, že korpusy někdy obsahují i překlepy, tedy slova, která ve slovníku mít nechcete. Slova, která navrhujete, by pak měla být seřazená podle pravděpodobnosti, že jsou opravou dané chyby. Díky tomu jednak uživatel dostane nabídku, která mu skutečně pomůže, jednak by mělo být možné kontrolu aplikovat neinteraktivně, tj. program sám nahradí chybná slova nejpravděpodobnějšími opravami ze slovníku.
  
-Pravděpodobnost, že dané slovo //w// má být opraveno na slovo //c// (correction) lze vyjádřit jako P(c|w). Hledáme slovo //c// s nejvyšší takovou pravděpodobností, tj. hledáme výsledek výrazu argmax(c)(P(c|w)). Pod touto pravděpodobností se skrývají dvě (resp. tři) složky, které můžeme zviditelnit pomocí Bayesova vzorce:+Pravděpodobnost, že dané slovo //w// má být opraveno na slovo //c// (correction) lze vyjádřit jako P(c|w). Hledáme slovo //c// s nejvyšší takovou pravděpodobností, tj. hledáme výsledek výrazu argmax(<nowiki>c</nowiki>)(P(c|w)). Pod touto pravděpodobností se skrývají dvě (resp. tři) složky, které můžeme zviditelnit pomocí Bayesova vzorce:
  
 <code>P(c|w) = P(w|c) * P(c) / P(w)</code> <code>P(c|w) = P(w|c) * P(c) / P(w)</code>
Line 16: Line 14:
   * P(w|c) je pravděpodobnost, že správné slovo //c// může být zkomoleno na slovo //w//   * P(w|c) je pravděpodobnost, že správné slovo //c// může být zkomoleno na slovo //w//
   * P<nowiki>(</nowiki>c) je pravděpodobnost výskytu slova //c// jako takového   * P<nowiki>(</nowiki>c) je pravděpodobnost výskytu slova //c// jako takového
-  * P(w) je pravděpodobnost výskytu slova //w//. Z hlediska argmax(c) je to konstanta: ať bude výsledkem kterékoli //c//, pravděpodobnost slova //w// bude vždy stejná. Proto ji můžeme z dalších úvah vypustit.+  * P(w) je pravděpodobnost výskytu slova //w//. Z hlediska argmax<nowiki>(</nowiki>c) je to konstanta: ať bude výsledkem kterékoli //c//, pravděpodobnost slova //w// bude vždy stejná. Proto ji můžeme z dalších úvah vypustit.
  
 Pravděpodobnost P<nowiki>(</nowiki>c) je dána jazykovým modelem. Snadno ji odhadneme na základě korpusu, ve kterém spočítáme výskyty jednotlivých slov. Chytrý jazykový model bude navíc brát v úvahu i kontext okolních slov: některá slova nemusejí být sama o sobě nejpravděpodobnější, ale v určitém kontextu přesto převáží. Pravděpodobnost P<nowiki>(</nowiki>c) je dána jazykovým modelem. Snadno ji odhadneme na základě korpusu, ve kterém spočítáme výskyty jednotlivých slov. Chytrý jazykový model bude navíc brát v úvahu i kontext okolních slov: některá slova nemusejí být sama o sobě nejpravděpodobnější, ale v určitém kontextu přesto převáží.
Line 41: Line 39:
   - Skript ''guess.pl -s model'' načte statistiku ze souboru, jehož jméno dostane jako argument volby ''-s'', ze standardního vstupu pak načte seznam slov (každé na samostatném řádku) a na standardní výstup vypíše tentýž seznam, ale za každým slovem bude tabulátor a pak nejvýše deset návrhů na opravu slova, seřazených podle pravděpodobnosti. Návrhy jsou oddělené čárkami, pravděpodobnost je za každým návrhem uvedená v závorce.   - Skript ''guess.pl -s model'' načte statistiku ze souboru, jehož jméno dostane jako argument volby ''-s'', ze standardního vstupu pak načte seznam slov (každé na samostatném řádku) a na standardní výstup vypíše tentýž seznam, ale za každým slovem bude tabulátor a pak nejvýše deset návrhů na opravu slova, seřazených podle pravděpodobnosti. Návrhy jsou oddělené čárkami, pravděpodobnost je za každým návrhem uvedená v závorce.
   - Skript ''correct.pl -s model'' se volá podobně jako guess, ale na vstupu má souvislý text (nemusí být tokenizovaný). V něm najde chyby, nahradí je nejpravděpodobnější opravou a opravený text pošle na standardní výstup.   - Skript ''correct.pl -s model'' se volá podobně jako guess, ale na vstupu má souvislý text (nemusí být tokenizovaný). V něm najde chyby, nahradí je nejpravděpodobnější opravou a opravený text pošle na standardní výstup.
 +
  
 ===== Data a jazyk ===== ===== Data a jazyk =====
  
 Pro testování skriptů dostanete k dispozici data v konkrétním jazyce, skripty však pište tak, aby na jazyce nezávisely. Pro testování skriptů dostanete k dispozici data v konkrétním jazyce, skripty však pište tak, aby na jazyce nezávisely.
 +
 +V&nbsp;zimním semestru 2008/2009 a 2009/2010 je v&nbsp;nabídce angličtina. Anglická data si stáhněte z&nbsp;[[http://ufal.mff.cuni.cz/~zeman/vyuka/ukoly/data/kopr/en.train.txt.gz]].
  
 ===== Další informace ===== ===== Další informace =====
  
-Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://ufal.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán).+Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://quest.ms.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán).
  
 Pokud se individuálně nedohodneme jinak, termín odevzdání je konec listopadu. Při některé prosincové přednášce program předvedete ostatním. Pokud se individuálně nedohodneme jinak, termín odevzdání je konec listopadu. Při některé prosincové přednášce program předvedete ostatním.
  

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