{"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