diff --git a/wyk/05_Wygladzanie.org b/wyk/05_Wygladzanie.org index dbbfd75..e636ec7 100644 --- a/wyk/05_Wygladzanie.org +++ b/wyk/05_Wygladzanie.org @@ -15,14 +15,14 @@ Rzecz jasna, $\sum_{i=1}^m k_i = T$. Jak powinniśmy racjonalnie szacować prawdopodobieństwa wylosowania kuli w $i$-tym kolorze ($p_i$)? -Wydawałoby się wystarczyłoby liczbę wylosowanych kul w danym kolorze +Wydawałoby się, że wystarczy liczbę wylosowanych kul w danym kolorze podzielić przez liczbę wszystkich prób: $$p_i = \frac{k_i}{T}.$$ *** Wygładzanie — przykład -Rozpatrzmy przykład z 3 kolorami (wiemy, że w urnie mogą być urny +Rozpatrzmy przykład z 3 kolorami (wiemy, że w urnie mogą być kule żółte, zielone i czerwone, tj. $m=3$) i 4 losowaniami ($T=4$): [[./05_Wygladzanie/urna.drawio.png]] @@ -35,12 +35,12 @@ a zielonej — 0. Wartości te są jednak dość problematyczne: potrzebowalibyśmy większej liczby losowań, żeby być bardziej pewnym naszych estymacji. - W szczególności stwierdzenie, że prawdopodobieństwo wylosowania kuli - zielonej wynosi 0 jest bardzo mocnym stwierdzeniem (twierdzimy, że + zielonej wynosi 0, jest bardzo mocnym stwierdzeniem (twierdzimy, że *NIEMOŻLIWE* jest wylosowanie kuli zielonej), dopiero większa liczba prób bez wylosowania zielonej kuli mogłaby sugerować prawdopodobieństwo bliskie zeru. - Zauważmy, że niemożliwe jest wylosowanie ułamka kuli, jeśli w - rzeczywistości 10% kul jest żółtych to nie oznacza się wylosujemy + rzeczywistości 10% kul jest żółtych, to nie oznacza się wylosujemy $4\frac{1}{10} = \frac{2}{5}$ kuli. Prawdopodobnie wylosujemy jedną kulę żółtą albo żadną. Wylosowanie dwóch kul żółtych byłoby możliwe, ale mniej prawdopodobne. Jeszcze mniej prawdopodobne byłoby @@ -59,11 +59,11 @@ Laplace'a, zdefiniowane za pomocą następującego wzoru: $$p_i = \frac{k_i+1}{T+m}.$$ -W naszym przypadku z urną prawdopodobieństwo wylosowania kuli -czerwonej określimy na $\frac{3+1}{4+3} = \frac{4/7}$, kuli żółtej — +W naszym przykładzie z urną prawdopodobieństwo wylosowania kuli +czerwonej określimy na $\frac{3+1}{4+3} = \frac{4}{7}$, kuli żółtej — $\frac{1+1}{4+3}=2/7$, zielonej — $\frac{0+1}{4+3}=1/7$. Tym samym, kula zielona uzyskała niezerowe prawdopodobieństwo, żółta — nieco -zyska, zaś czerwona — straciła. +zyskała, zaś czerwona — straciła. **** Własności wygładzania +1 @@ -74,7 +74,7 @@ $$\lim_{m \rightarrow \infty} \frac{k_i +1}{T + m} = \frac{k_i}{T}.$$ Inna dobra, zdroworozsądkowo, własność to to, że prawdopodobieństwo nigdy nie będzie zerowe: -$$frac{k_i + 1}{T + m} > 0.$$ +$$\frac{k_i + 1}{T + m} > 0.$$ ** Wygładzanie w unigramowym modelu języku @@ -90,7 +90,7 @@ $T$ — długość zbioru uczącego. A zatem przy użyciu wygładzania +1 w następujący sposób estymować będziemy prawdopodobieństwo słowa $w$: -$$P(w) = \fraq{\# w + 1}{|C| + |V|}.$$ +$$P(w) = \frac{\# w + 1}{|C| + |V|}.$$ *** Wygładzanie $+\alpha$ @@ -98,7 +98,7 @@ W modelowaniu języka wygładzanie $+1$ daje zazwyczaj niepoprawne wyniki, dlatego częściej zamiast wartości 1 używa się współczynnika $0 < \alpha < 1$: -$$P(w) = \fraq{\# w + \alpha}{|C| + \alpha|V|}.$$ +$$P(w) = \frac{\# w + \alpha}{|C| + \alpha|V|}.$$ W innych praktycznych zastosowaniach statystyki przyjmuje się $\alpha = \frac{1}{2}$, ale w przypadku n-gramowych @@ -248,7 +248,7 @@ counterA['taki'] :results: :end: -Policzmy teraz jakiej liczby wystąpień byśmy oczekiwali gdyby użyć wygładzania +1 bądź +0.01. +Policzmy teraz jakiej liczby wystąpień byśmy oczekiwali, gdyby użyć wygładzania +1 bądź +0.01. (Uwaga: zwracamy liczbę wystąpień, a nie względną częstość, stąd przemnażamy przez rozmiar całego korpusu). #+BEGIN_SRC python :session mysession :exports both :results raw drawer @@ -339,7 +339,7 @@ Wygładzanie metodą Gooda-Turinga, mimo prostoty, daje wyniki zaskakująco zbli *** Rzadkość danych -W wypadku bigramów, trigramów itd. jeszcze dotkliwy staje się problem +W wypadku bigramów, trigramów, tetragramów itd. jeszcze dotkliwy staje się problem *rzadkości* danych (/data sparsity/). Przestrzeń możliwych zdarzeń jest jeszcze większa ($|V|^2$ dla bigramów), więc estymacje stają się jeszcze mniej pewne. @@ -347,7 +347,7 @@ jeszcze mniej pewne. *** Back-off Dla $n$-gramów, gdzie $n>1$, nie jesteśmy ograniczeni do wygładzania $+1$, $+k$ czy Gooda-Turinga. -W przypadku rzadkich $n$-gramów, w szczególności gdy $n$-gram w ogóle się nie pojawił w korpusie, +W przypadku rzadkich $n$-gramów, w szczególności, gdy $n$-gram w ogóle się nie pojawił w korpusie, możemy „zejść” na poziom krótszych $n$-gramów. Na tym polega *back-off*. Otóż jeśli $\# w_{i-n+1}\ldots w_{i-1} > 0$, wówczas estymujemy prawdopodobieństwa @@ -355,7 +355,7 @@ Otóż jeśli $\# w_{i-n+1}\ldots w_{i-1} > 0$, wówczas estymujemy prawdopodobi $$P_B(w_i|w_{i-n+1}\ldots w_{i-1}) = d_n(w_{i-n+1}\ldots w_{i-1}\ldots w_{i-1}) P(w_i|w_{i-n+1}\ldots w_{i-1})$$ -W przeciwnym razie, rozpatrujemy rekurencyjnie krótszy $n$-gram: +W przeciwnym razie rozpatrujemy rekurencyjnie krótszy $n$-gram: $$P_B(w_i|w_{i-n+1}\ldots w_{i-1}) = \delta_n(w_{i-n+1}\ldots w_{i-1}\ldots w_{i-1}) P_B(w_i|w_{i-n+2}\ldots w_{i-1}).$$ @@ -396,7 +396,7 @@ Teraz zastosujemy interpolację z następującą wartością parametru $1-\lambda$, sterującego wagą, jaką przypisujemy do krótszych $n$-gramów: -$$1 - \lambda = \frag{N_{1+}(w_1\ldots w_{n-1}\dot\bullet)}{N_{1+}(w_1\ldots w_{n-1}\dot\bullet) + \# w_1\ldots w_{n-1}}.$$ +$$1 - \lambda = \frac{N_{1+}(w_1\ldots w_{n-1}\dot\bullet)}{N_{1+}(w_1\ldots w_{n-1}\dot\bullet) + \# w_1\ldots w_{n-1}}.$$ *** Wygładzanie Knesera-Neya @@ -453,3 +453,34 @@ $$P(w) = \frac{N_{1+}(\bullet w)}{\sum_{w_j} N_{1+}(\bullet w_j)}.$$ #+RESULTS: :results: :end: + +** Narzędzia $n$-gramowego modelowania języka + +Istnieje kilka narzędzie do modelowania, ze starszych warto wspomnieć +pakiety [[http://www.speech.sri.com/projects/srilm/][SRILM]] i [[https://github.com/irstlm-team/irstlm][IRSTLM]]. +Jest to oprogramowanie bogate w opcje, można wybierać różne opcje wygładzania. + +Szczytowym osiągnięciem w zakresie $n$-gramowego modelowania języka +jest wspomniany już KenLM. Ma on mniej opcji niż SRILM czy ISRLM, jest +za to precyzyjnie zoptymalizowany zarówno jeśli chodzi jakość, jak i +szybkość działania. KenLM implementuje nieco zmodyfikowane wygładzanie +Knesera-Neya połączone z *przycinaniem* słownika n-gramów (wszystkie +/hapax legomena/ dla $n \geq 3$ są domyślnie usuwane). + +*** Przykładowe wyniki dla KenLM i korpusu Open Subtitles + +**** Zmiana perplexity przy zwiększaniu zbioru testowego + +#+CAPTION: Perplexity dla różnych rozmiarów zbioru testowego +[[./05_Wygladzanie/size-perplexity.gif]] + + +**** Zmiana perplexity przy zwiększaniu zbioru uczącego + +#+CAPTION: Perplexity dla różnych rozmiarów zbioru uczącego +[[./05_Wygladzanie/size-perplexity2.gif]] + +**** Zmiana perplexity przy zwiększaniu rządu modelu + +#+CAPTION: Perplexity dla różnych wartości rządu modelu +[[./05_Wygladzanie/order-perplexity.gif]] diff --git a/wyk/05_Wygladzanie/order-perplexity.gif b/wyk/05_Wygladzanie/order-perplexity.gif new file mode 100644 index 0000000..1c52fbf Binary files /dev/null and b/wyk/05_Wygladzanie/order-perplexity.gif differ diff --git a/wyk/05_Wygladzanie/size-perplexity.gif b/wyk/05_Wygladzanie/size-perplexity.gif new file mode 100644 index 0000000..d52c9ba Binary files /dev/null and b/wyk/05_Wygladzanie/size-perplexity.gif differ diff --git a/wyk/05_Wygladzanie/size-perplexity2.gif b/wyk/05_Wygladzanie/size-perplexity2.gif new file mode 100644 index 0000000..53f2002 Binary files /dev/null and b/wyk/05_Wygladzanie/size-perplexity2.gif differ