This commit is contained in:
Filip Gralinski 2022-04-02 10:02:00 +02:00
parent 09cf8cbc23
commit 81c7963e4c
4 changed files with 46 additions and 15 deletions

View File

@ -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]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB