diff --git a/wyk/04_Ngramowy_model.ipynb b/wyk/04_Ngramowy_model.ipynb new file mode 100644 index 0000000..5159795 --- /dev/null +++ b/wyk/04_Ngramowy_model.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","metadata":{},"source":["### Modele języka i ich zastosowania\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Przypomnienie\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Przypomnijmy, że model języka zwraca prawdopodobieństwo dla danego\nciągu symboli (tokenów, wyrazów itp.) $w_1\\ldots w_N$ (o długości $N$):\n\n$$P_M(w_1\\ldots w_N) = ?$$\n\nW dalszym ciągu będziemy zakładali, że będziemy operować na wyrazach.\nZbiór wszystkich wyrazów nazywa się **słownikiem** (ang. *vocabulary*,\nnie *dictionary!*), w literaturze dotyczącej modelowania języka\nzazwyczaj oznacza się go literą $V$ (częściej niż $\\Sigma$).\nDale zakładamy, że słownik jest skończony.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Co jeszcze potrafi model języka?\n\n"]},{"cell_type":"markdown","metadata":{},"source":["##### Przewidywanie kolejnego słowa\n\n"]},{"cell_type":"markdown","metadata":{},"source":["$$P_M(w_N|w_1\\ldots w_{N-1}) = \\frac{P_M(w_1\\dots w_{N-1}w_N*)}{P_M(w_1\\dots w_{n-1}*)} = \\frac{\\sum_{\\alpha \\in\n \\Sigma^*}P_M(w_1\\dots w_N\\alpha)}{\\sum_{\\alpha\\in\\Sigma^*}P(w_1\\dots w_{n-1}\\alpha)}$$\n\n$P_M(w_N|w_1\\ldots w_{N-1})$ to właściwie skrót notacyjny, pełny zapis powinien mieć następujący kształt:\n\n$$P_M(X_N=w_N|X_1=w_1,\\ldots,X_{N-1}=w_{N-1}),$$\n\ngdzie $P_M(X_i=w)$ oznacza prawdopodobieństwo, że na $i$-tej pozycji wystąpi słowo $w$.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["##### Odgadywanie słowa w luce\n\n"]},{"cell_type":"markdown","metadata":{},"source":["$$P_M(w_1\\dots w_{i-1}?w_{i+1}\\dots w_N) = \\operatorname{argmax}_w P_M(w_1\\ldots w_{i-1}ww_{i+1}\\dots w_N)$$\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Przykład dla autentycznego modelu języku\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Zobaczmy przykładowe zastosowania i wyniki dla modelu języku\nwyuczonego na tekstach z II poł. XX w.\n\n![img](./04_Ngramowy_model/tabelka.png)\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Do czego stosujemy model języka?\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Model języka sam w sobie nie jest zbyt użyteczny. To raczej środek do celu\nniż cel sam w sobie.\n\nModel języka:\n\n- ma zastosowanie w kryptoanalizie\n - Oxmynsxq mkx lo kmrsofon li cdenisxq sdc kvzrklodsm mrkbkmdobc kxn bozvkmsxq okmr yxo li dro 13dr voddob zvkmon pebdrob kvyxq sx dro kvzrklod.\n- pomaga(ł) wybrać właściwe tłumaczenie w tłumaczeniu maszynowym\n czy transkrypcję w systemach rozpoznawania mowy (ASR)\n (zanim zaczęto używać do tego sieci neuronowych, gdzie nie\n ma już wyraźnego rozróżnienia między modelem tłumaczenia\n czy modelem akustycznym a modelem języka\n- pomaga znaleźć „podejrzane” miejsca w tekście\n (korekta pisowni/gramatyki)\n- może być stosowany jako klasyfikator (potrzeba wtedy więcej niż jednego modelu,\n np. model języka spamów kontra model języka niespamów)\n- może być stosowany w kompresji danych\n- bardzo dobry model języka **musi** mieć **w środku** bardzo dobrą **wiedzę**\n o języku i o świecie, można wziąć **„wnętrzności”** modelu, nie dbając o prawdopodobieństwa\n i użyć modelu w zupełnie innym celu\n\n"]},{"cell_type":"markdown","metadata":{},"source":["### N-gramowy model języka\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Zawsze prawdziwe:\n\n$$P_M(w_1\\dots w_N) = P_M(w_1)P_M(w_2|w_1)\\dots P_M(w_N|w_1\\dots w_{N-1}).$$\n\nMożna aproksymować prawdopodobieństwa używając $n$-gramów:\n\n$$P_M(w_1\\dots w_N) \\approx P_M(w_1)\\dots P_M(w_i|w_{i-n+1}\\dots w_{i-1})\\dots P_M(w_N|w_{N-n+1}\\dots w_{N-1}).$$\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Model trigramowy\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Dla $n=3$:\n\n$$P_M(w_1\\dots w_N) = P_M(w_1)P_M(w_2|w_1)P_M(w_3|w_1w_2)\\dots P_M(w_i|w_{i-2}w_{i-1})\\dots P_M(w_N|w_{N-2}w_{N-1}).$$\n\nZauważmy, że model trigramowy oznacza modelowanie kolejnego wyrazu przy znajomości\n2 (nie 3!) poprzedzających wyrazów (**razem** mamy 3 wyrazy).\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Model digramowy\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Dla $n=2$:\n\n$$P_M(w_1\\dots w_N) = P_M(w_1)P_M(w_2|w_1)P_M(w_3|w_2)\\dots P_M(w_i|w_{i-1})\\dots P_M(w_N|w_{N-1})$$\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Model unigramowy\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Dla $n=1$ uzyskujemy przypadek szczególny:\n\n$$P_M(w_1\\dots w_N) = P_M(w_1)P_M(w_2)P_M(w_3)\\dots P_M(w_N) = \\prod_{i=1}^N P_M(w_i)$$\n\nZauważmy, że w modelu unigramowym w ogóle nie bierzemy pod uwagę kolejności wyrazów.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Estymacja prawdopodobieństw\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Dla $n$-gramowego modelu potrzebujmy estymować wartości:\n\n$$P_M(w_i|w_{i-n+1}\\dots w_{i-1}).$$\n\nPrawdopodobieństwa te estymujemy na podstawie jakiegoś **korpusu tekstów**\n(możemy nazywać go również **zbiorem uczącym**).\n\nNajprostszy sposób:\n\n$$P_M(w_i|w_{i-n+1}\\dots w_{i-1}) = \\frac{\\# w_{i-n+1}\\dots w_{i-1}w_i}{\\# w_{i-n+1}\\dots w_{i-1}},$$\n\ngdzie $\\# w_1\\dots w_k$ oznacza liczbę wystąpień w korpusie.\n\nNa przykład, jeśli model $M$ zostanie wyuczony na tekście *do be do be do do*, wówczas\n$P_M(\\mathit{be}|\\mathit{do})=\\frac{2}{3}$.\n\n"]}],"metadata":{"org":null,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.5.2"}},"nbformat":4,"nbformat_minor":0} \ No newline at end of file diff --git a/wyk/04_Ngramowy_model.org b/wyk/04_Ngramowy_model.org new file mode 100644 index 0000000..36b03c4 --- /dev/null +++ b/wyk/04_Ngramowy_model.org @@ -0,0 +1,112 @@ + +** Modele języka i ich zastosowania + +*** Przypomnienie + +Przypomnijmy, że model języka zwraca prawdopodobieństwo dla danego +ciągu symboli (tokenów, wyrazów itp.) $w_1\ldots w_N$ (o długości $N$): + +$$P_M(w_1\ldots w_N) = ?$$ + +W dalszym ciągu będziemy zakładali, że będziemy operować na wyrazach. +Zbiór wszystkich wyrazów nazywa się *słownikiem* (ang. /vocabulary/, +nie /dictionary!/), w literaturze dotyczącej modelowania języka +zazwyczaj oznacza się go literą $V$ (częściej niż $\Sigma$). +Dale zakładamy, że słownik jest skończony. + +*** Co jeszcze potrafi model języka? + +**** Przewidywanie kolejnego słowa + +$$P_M(w_N|w_1\ldots w_{N-1}) = \frac{P_M(w_1\dots w_{N-1}w_N*)}{P_M(w_1\dots w_{n-1}*)} = \frac{\sum_{\alpha \in + \Sigma^*}P_M(w_1\dots w_N\alpha)}{\sum_{\alpha\in\Sigma^*}P(w_1\dots w_{n-1}\alpha)}$$ + +$P_M(w_N|w_1\ldots w_{N-1})$ to właściwie skrót notacyjny, pełny zapis powinien mieć następujący kształt: + +$$P_M(X_N=w_N|X_1=w_1,\ldots,X_{N-1}=w_{N-1}),$$ + +gdzie $P_M(X_i=w)$ oznacza prawdopodobieństwo, że na $i$-tej pozycji wystąpi słowo $w$. + +**** Odgadywanie słowa w luce + +$$P_M(w_1\dots w_{i-1}?w_{i+1}\dots w_N) = \operatorname{argmax}_w P_M(w_1\ldots w_{i-1}ww_{i+1}\dots w_N)$$ + +*** Przykład dla autentycznego modelu języku + +Zobaczmy przykładowe zastosowania i wyniki dla modelu języku +wyuczonego na tekstach z II poł. XX w. + +[[./04_Ngramowy_model/tabelka.png]] + +*** Do czego stosujemy model języka? + +Model języka sam w sobie nie jest zbyt użyteczny. To raczej środek do celu +niż cel sam w sobie. + +Model języka: +- ma zastosowanie w kryptoanalizie + - Oxmynsxq mkx lo kmrsofon li cdenisxq sdc kvzrklodsm mrkbkmdobc kxn bozvkmsxq okmr yxo li dro 13dr voddob zvkmon pebdrob kvyxq sx dro kvzrklod. +- pomaga(ł) wybrać właściwe tłumaczenie w tłumaczeniu maszynowym + czy transkrypcję w systemach rozpoznawania mowy (ASR) + (zanim zaczęto używać do tego sieci neuronowych, gdzie nie + ma już wyraźnego rozróżnienia między modelem tłumaczenia + czy modelem akustycznym a modelem języka +- pomaga znaleźć „podejrzane” miejsca w tekście + (korekta pisowni/gramatyki) +- może być stosowany jako klasyfikator (potrzeba wtedy więcej niż jednego modelu, + np. model języka spamów kontra model języka niespamów) +- może być stosowany w kompresji danych +- bardzo dobry model języka *musi* mieć *w środku* bardzo dobrą *wiedzę* + o języku i o świecie, można wziąć *„wnętrzności”* modelu, nie dbając o prawdopodobieństwa + i użyć modelu w zupełnie innym celu + +** N-gramowy model języka + +Zawsze prawdziwe: + +$$P_M(w_1\dots w_N) = P_M(w_1)P_M(w_2|w_1)\dots P_M(w_N|w_1\dots w_{N-1}).$$ + +Można aproksymować prawdopodobieństwa używając $n$-gramów: + +$$P_M(w_1\dots w_N) \approx P_M(w_1)\dots P_M(w_i|w_{i-n+1}\dots w_{i-1})\dots P_M(w_N|w_{N-n+1}\dots w_{N-1}).$$ + +*** Model trigramowy + +Dla $n=3$: + +$$P_M(w_1\dots w_N) = P_M(w_1)P_M(w_2|w_1)P_M(w_3|w_1w_2)\dots P_M(w_i|w_{i-2}w_{i-1})\dots P_M(w_N|w_{N-2}w_{N-1}).$$ + +Zauważmy, że model trigramowy oznacza modelowanie kolejnego wyrazu przy znajomości +2 (nie 3!) poprzedzających wyrazów (*razem* mamy 3 wyrazy). + +*** Model digramowy + +Dla $n=2$: + +$$P_M(w_1\dots w_N) = P_M(w_1)P_M(w_2|w_1)P_M(w_3|w_2)\dots P_M(w_i|w_{i-1})\dots P_M(w_N|w_{N-1})$$ + +*** Model unigramowy + +Dla $n=1$ uzyskujemy przypadek szczególny: + +$$P_M(w_1\dots w_N) = P_M(w_1)P_M(w_2)P_M(w_3)\dots P_M(w_N) = \prod_{i=1}^N P_M(w_i)$$ + +Zauważmy, że w modelu unigramowym w ogóle nie bierzemy pod uwagę kolejności wyrazów. + +*** Estymacja prawdopodobieństw + +Dla $n$-gramowego modelu potrzebujmy estymować wartości: + +$$P_M(w_i|w_{i-n+1}\dots w_{i-1}).$$ + +Prawdopodobieństwa te estymujemy na podstawie jakiegoś *korpusu tekstów* +(możemy nazywać go również *zbiorem uczącym*). + +Najprostszy sposób: + +$$P_M(w_i|w_{i-n+1}\dots w_{i-1}) = \frac{\# w_{i-n+1}\dots w_{i-1}w_i}{\# w_{i-n+1}\dots w_{i-1}},$$ + +gdzie $\# w_1\dots w_k$ oznacza liczbę wystąpień w korpusie. + +Na przykład, jeśli model $M$ zostanie wyuczony na tekście /do be do be do do/, wówczas +$P_M(\mathit{be}|\mathit{do})=\frac{2}{3}$. diff --git a/wyk/04_Ngramowy_model/tabelka.pdf b/wyk/04_Ngramowy_model/tabelka.pdf new file mode 100644 index 0000000..c44d268 Binary files /dev/null and b/wyk/04_Ngramowy_model/tabelka.pdf differ diff --git a/wyk/04_Ngramowy_model/tabelka.png b/wyk/04_Ngramowy_model/tabelka.png new file mode 100644 index 0000000..5f29011 Binary files /dev/null and b/wyk/04_Ngramowy_model/tabelka.png differ