Fixes
This commit is contained in:
parent
219d0fc56b
commit
27a179cac9
@ -4,18 +4,18 @@ Omówiony w poprzedniej części neuronowy bigramowy model języka
|
|||||||
warunkuje kolejny wyraz jedynie względem bezpośrednio poprzedzającego
|
warunkuje kolejny wyraz jedynie względem bezpośrednio poprzedzającego
|
||||||
— jak w każdym bigramowym modelu przyjmujemy założenie, że $w_i$
|
— jak w każdym bigramowym modelu przyjmujemy założenie, że $w_i$
|
||||||
zależy tylko od $w_{i-1}$. Rzecz jasna jest to bardzo duże
|
zależy tylko od $w_{i-1}$. Rzecz jasna jest to bardzo duże
|
||||||
ograniczenie, w rzeczywiście bardzo często prawdopodobieństwo
|
ograniczenie, w rzeczywistości bardzo często prawdopodobieństwo
|
||||||
kolejnego wyrazu zależy od wyrazu dwie, trzy, cztery itd. pozycje
|
kolejnego wyrazu zależy od wyrazu dwie, trzy, cztery itd. pozycje
|
||||||
wstecz czy w ogólności od wszystkich wyrazów poprzedzających (bez
|
wstecz czy w ogólności od wszystkich wyrazów poprzedzających (bez
|
||||||
względu na ich pozycje).
|
względu na ich pozycje).
|
||||||
|
|
||||||
*Pytanie*: Wskaż zależności o zasięgu większym niż 1 wyraz w zdaniu
|
*Pytanie*: Wskaż zależności o zasięgu większym niż 1 wyraz w zdaniu
|
||||||
_Zatopieni w kłębach dymu cygar i pochyleni nad butelkami z ciemnego
|
/Zatopieni w kłębach dymu cygar i pochyleni nad butelkami z ciemnego
|
||||||
szkła obywatele tej dzielnicy, jedni zakładali się o wygranę lub
|
szkła obywatele tej dzielnicy, jedni zakładali się o wygranę lub
|
||||||
przegranę Anglii, drudzy o bankructwo Wokulskiego; jedni nazywali
|
przegranę Anglii, drudzy o bankructwo Wokulskiego; jedni nazywali
|
||||||
geniuszem Bismarcka, drudzy — awanturnikiem Wokulskiego; jedni
|
geniuszem Bismarcka, drudzy — awanturnikiem Wokulskiego; jedni
|
||||||
krytykowali postępowanie prezydenta MacMahona, inni twierdzili, że
|
krytykowali postępowanie prezydenta MacMahona, inni twierdzili, że
|
||||||
Wokulski jest zdecydowanym wariatem, jeżeli nie czymś gorszym…_
|
Wokulski jest zdecydowanym wariatem, jeżeli nie czymś gorszym…/
|
||||||
|
|
||||||
** Trigramowy neuronowy model języka
|
** Trigramowy neuronowy model języka
|
||||||
|
|
||||||
@ -29,24 +29,24 @@ Byłoby to jednak zupełnie niepraktyczne, jako że:
|
|||||||
|
|
||||||
- liczba zanurzeń do wyuczenia byłaby olbrzymia ($|V|^2$ — byłoby to
|
- liczba zanurzeń do wyuczenia byłaby olbrzymia ($|V|^2$ — byłoby to
|
||||||
ewentualnie akceptowalne dla modeli operujących na krótszych
|
ewentualnie akceptowalne dla modeli operujących na krótszych
|
||||||
jednostkach niż słowno, np. na znakach),
|
jednostkach niż słowa, np. na znakach),
|
||||||
- w szczególności zanurzenia dla par $(v, u)$, $(u, v)$, $(u, u)$ i
|
- w szczególności zanurzenia dla par $(v, u)$, $(u, v)$, $(u, u)$ i
|
||||||
$(v, v)$ nie miałyby ze sobą nic wspólnego.
|
$(v, v)$ nie miałyby ze sobą nic wspólnego.
|
||||||
|
|
||||||
*** Konketanacja zanurzeń
|
*** Konketanacja zanurzeń
|
||||||
|
|
||||||
Właściwsze rozwiązanie polega na zanurzenia dalej pojedynczych słów i
|
Właściwsze rozwiązanie polega na zanurzeniu dalej pojedynczych słów i
|
||||||
następnie ich *konkatenowaniu*.
|
następnie ich *konkatenowaniu*.
|
||||||
|
|
||||||
Przypomnijmy, że konkatenacja wektorów $\vec{x_1}$ i $\vec{x_2}$ to wektor o rozmiarze
|
Przypomnijmy, że konkatenacja wektorów $\vec{x_1}$ i $\vec{x_2}$ to wektor o rozmiarze
|
||||||
$|\vec{x_1}| + |\vec{x_2}|$ powstały ze „sklejania” wektorów $\vec{x_1}$ i $\vec{x_2}$.
|
$|\vec{x_1}| + |\vec{x_2}|$ powstały ze „sklejania” wektorów $\vec{x_1}$ i $\vec{x_2}$.
|
||||||
Konkatenację wektorów $\vec{x_1}$ i $\vec{x_2}$ będziemy oznaczać za pomocą $[\vec{x_1}, \vec{x_2}]$.
|
Konkatenację wektorów $\vec{x_1}$ i $\vec{x_2}$ będziemy oznaczać za pomocą $[\vec{x_1}, \vec{x_2}]$.
|
||||||
|
|
||||||
Przykład: jeśli $\vec{x_1} = [-1, 2, 0]$ i $\vec{x_2} = [3, -3]$
|
Przykład: jeśli $\vec{x_1} = [-1, 2, 0]$ i $\vec{x_2} = [3, -3]$,
|
||||||
wówczas $[\vec{x_1}, \vec{x_2}] = [-1, 2, 0, 3, -3]$
|
wówczas $[\vec{x_1}, \vec{x_2}] = [-1, 2, 0, 3, -3]$
|
||||||
|
|
||||||
Oznacza to, że nasza macierz „kontekstowa” $C$ powinna mieć w modelu trigramowy rozmiar nie
|
Oznacza to, że nasza macierz „kontekstowa” $C$ powinna mieć w modelu trigramowym rozmiar nie
|
||||||
$|V| \times m$, lecz $|V| \times m+m$ = $|V| \times 2m$ i wyjście będę zdefiniowane za pomocą wzoru:
|
$|V| \times m$, lecz $|V| \times (m+m)$ = $|V| \times 2m$ i wyjście będzie zdefiniowane za pomocą wzoru:
|
||||||
|
|
||||||
$$\vec{y} = \operatorname{softmax}(C[E(w_{i-2}),E(w_{i-1})]),$$
|
$$\vec{y} = \operatorname{softmax}(C[E(w_{i-2}),E(w_{i-1})]),$$
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ co można przedstawić za pomocą następującego schematu:
|
|||||||
|
|
||||||
Zamiast mnożyć macierz $C$ przez konkatenację dwóch wektorów, można
|
Zamiast mnożyć macierz $C$ przez konkatenację dwóch wektorów, można
|
||||||
rozbić macierz $C$ na dwie, powiedzmy $C_{-2}$ i $C_{-1}$, przemnażać
|
rozbić macierz $C$ na dwie, powiedzmy $C_{-2}$ i $C_{-1}$, przemnażać
|
||||||
je osobno przez odpowiadający im wektory i następnie _dodać_ macierze,
|
je osobno przez odpowiadające im wektory i następnie *dodać* macierze,
|
||||||
tak aby:
|
tak aby:
|
||||||
|
|
||||||
$$C[E(w_{i-2}),E(w_{i-1})] = C_{-2}E(w_{i-2}) + C_{-1}E(w_{i-1}).$$
|
$$C[E(w_{i-2}),E(w_{i-1})] = C_{-2}E(w_{i-2}) + C_{-1}E(w_{i-1}).$$
|
||||||
@ -81,9 +81,9 @@ $$\vec{y} = \operatorname{softmax}(C[E(w_{i-n+1}),\dots,E(w_{i-1})]),$$
|
|||||||
|
|
||||||
gdzie macierz $C$ ma rozmiar $|V| \times nm$ lub za pomocą wzoru:
|
gdzie macierz $C$ ma rozmiar $|V| \times nm$ lub za pomocą wzoru:
|
||||||
|
|
||||||
$$\vec{y} = \operatorname{softmax}(C_{-(i-n+1)}E(w_{i-n+1}) + \dots + C_{-1}E(w_{i-1}),$$
|
$$\vec{y} = \operatorname{softmax}(C_{-(n-1)}E(w_{i-n+1}) + \dots + C_{-1}E(w_{i-1}),$$
|
||||||
|
|
||||||
gdzie macierze $C_{-(i-n+1)$, \ldots, $C_{-1}$ mają rozmiary $|V| \times m$.
|
gdzie macierze $C_{-(n-1)}$, \dots, $C_{-1}$ mają rozmiary $|V| \times m$.
|
||||||
|
|
||||||
Por. diagram:
|
Por. diagram:
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ niż $nm$ (a może nawet od $m$).
|
|||||||
|
|
||||||
*** Funkcja aktywacji
|
*** Funkcja aktywacji
|
||||||
|
|
||||||
Aby warstwa ukryta wnosiła coś nowego, na wyjściu z tej funkcji musimy
|
Aby warstwa ukryta wnosiła coś nowego, na wyjściu z tej funkcji musimy (dlaczego?)
|
||||||
zastosować nieliniową *funkcji aktywacji*. Zazwyczaj jako funkcji
|
zastosować nieliniową *funkcji aktywacji*. Zazwyczaj jako funkcji
|
||||||
aktywacji w sieciach neuronowych używa się funkcji ReLU albo funkcji
|
aktywacji w sieciach neuronowych używa się funkcji ReLU albo funkcji
|
||||||
sigmoidalnej. W prostych neuronowych modelach języka sprawdza się też
|
sigmoidalnej. W prostych neuronowych modelach języka sprawdza się też
|
||||||
@ -114,7 +114,7 @@ sigmoidalnej. W prostych neuronowych modelach języka sprawdza się też
|
|||||||
|
|
||||||
$$\operatorname{tgh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}.$$
|
$$\operatorname{tgh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}.$$
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :results file
|
#+BEGIN_SRC ipython :session mysession :results file
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import torch
|
import torch
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
@ -138,7 +138,7 @@ fname
|
|||||||
Tangens hiperboliczny wektora będzie po prostu wektorem tangensów
|
Tangens hiperboliczny wektora będzie po prostu wektorem tangensów
|
||||||
hiperbolicznych poszczególnych wartości.
|
hiperbolicznych poszczególnych wartości.
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :results file
|
#+BEGIN_SRC ipython :session mysession :results file
|
||||||
import torch
|
import torch
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ gdzie:
|
|||||||
- $W$ jest wyuczalną macierzą wag o rozmiarze $h \times nm$,
|
- $W$ jest wyuczalną macierzą wag o rozmiarze $h \times nm$,
|
||||||
- $C$ będzie macierzą o rozmiarze $|V| \times h$.
|
- $C$ będzie macierzą o rozmiarze $|V| \times h$.
|
||||||
|
|
||||||
Zmodyfikowaną się można przedstawić za pomocą następującego schematu:
|
Zmodyfikowaną sieć można przedstawić za pomocą następującego schematu:
|
||||||
|
|
||||||
#+CAPTION: Dwuwarstwowy n-gramowy neuronowy model języka
|
#+CAPTION: Dwuwarstwowy n-gramowy neuronowy model języka
|
||||||
[[./08_Neuronowy_ngramowy_model/ngram-tgh.drawio.png]]
|
[[./08_Neuronowy_ngramowy_model/ngram-tgh.drawio.png]]
|
||||||
@ -183,17 +183,17 @@ $$O(m|V| + nm^2).$$
|
|||||||
|
|
||||||
Zauważmy, że względem $n$ oznacza to bardzo korzystną złożoność
|
Zauważmy, że względem $n$ oznacza to bardzo korzystną złożoność
|
||||||
$O(n)$! Oznacza to, że nasz model może działać dla dużo większych
|
$O(n)$! Oznacza to, że nasz model może działać dla dużo większych
|
||||||
wartości $n$ niż tradycyjny n-gramowy model języka (dla którego
|
wartości $n$ niż tradycyjny, statystyczny n-gramowy model języka (dla którego
|
||||||
wartości $n > 5$ zazwyczaj nie mają sensu).
|
wartości $n > 5$ zazwyczaj nie mają sensu).
|
||||||
|
|
||||||
** Model worka słów
|
** Model worka słów
|
||||||
|
|
||||||
Jak stwierdziliśmy przed chwilą, dwuwarstwowy n-gramowym modelu języka
|
Jak stwierdziliśmy przed chwilą, dwuwarstwowy n-gramowy model języka
|
||||||
może działać dla stosunkowo dużego $n$. Zauważmy jednak, że istnieje
|
może działać dla stosunkowo dużego $n$. Zauważmy jednak, że istnieje
|
||||||
pewna słabość tego modelu. Otóż o ile intuicyjnie ma sens odróżniać
|
pewna słabość tego modelu. Otóż o ile intuicyjnie ma sens odróżniać
|
||||||
słowo poprzedzające, słowo występujące dwie pozycje wstecz i zapewne
|
słowo poprzedzające, słowo występujące dwie pozycje wstecz i zapewne
|
||||||
trzy pozycje wstecz, a zatem uczyć się osobnych macierzy $C_{-1}$,
|
trzy pozycje wstecz, a zatem uczyć się osobnych macierzy $C_{-1}$,
|
||||||
$C_{-2}$, $C_{-3}$ to zapewne różnica między wpływem słowa
|
$C_{-2}$, $C_{-3}$ to różnica między wpływem słowa
|
||||||
występującego cztery pozycje wstecz i pięć pozycji wstecz jest już
|
występującego cztery pozycje wstecz i pięć pozycji wstecz jest już
|
||||||
raczej nieistotna; innymi słowy różnica między macierzami $C_{-4}$ i
|
raczej nieistotna; innymi słowy różnica między macierzami $C_{-4}$ i
|
||||||
$C_{-5}$ będzie raczej niewielka i sieć niepotrzebnie będzie uczyła
|
$C_{-5}$ będzie raczej niewielka i sieć niepotrzebnie będzie uczyła
|
||||||
@ -209,7 +209,7 @@ modelem $n$-gramowym.
|
|||||||
*** Agregacja wektorów
|
*** Agregacja wektorów
|
||||||
|
|
||||||
Zamiast patrzeć na kilka poprzedzających słów, można przewidywać na
|
Zamiast patrzeć na kilka poprzedzających słów, można przewidywać na
|
||||||
cały ciąg słów poprzedzających przewidywane słowo. Zauważmy jednak, że
|
podstawie *całego* ciągu słów poprzedzających odgadywane słowo. Zauważmy jednak, że
|
||||||
sieć neuronowa musi mieć ustaloną strukturę, nie możemy zmieniać jej
|
sieć neuronowa musi mieć ustaloną strukturę, nie możemy zmieniać jej
|
||||||
rozmiaru. Musimy zatem najpierw zagregować cały ciąg do wektora o
|
rozmiaru. Musimy zatem najpierw zagregować cały ciąg do wektora o
|
||||||
*stałej* długości. Potrzebujemy zatem pewnej funkcji agregującej $A$, takiej by
|
*stałej* długości. Potrzebujemy zatem pewnej funkcji agregującej $A$, takiej by
|
||||||
@ -228,7 +228,7 @@ Jeśli rozmiar zanurzenia (embeddingu) wynosi $m$, wówczas rozmiar
|
|||||||
wektora uzyskanego dla całego poprzedzającego tekstu wynosi również $m$.
|
wektora uzyskanego dla całego poprzedzającego tekstu wynosi również $m$.
|
||||||
|
|
||||||
Proste dodawanie wydaje się bardzo „prostacką” metodą, a jednak
|
Proste dodawanie wydaje się bardzo „prostacką” metodą, a jednak
|
||||||
dodawanie wektorów słów jest *zaskakująco skuteczną metodą zanurzenia
|
suma wektorów słów jest *zaskakująco skuteczną metodą zanurzenia
|
||||||
(embedowania) całych tekstów (doc2vec)*. Prostym wariantem dodawania jest obliczanie *średniej wektorów*:
|
(embedowania) całych tekstów (doc2vec)*. Prostym wariantem dodawania jest obliczanie *średniej wektorów*:
|
||||||
|
|
||||||
$$A(w_1,\dots,w_{i-1}) = \frac{E(w_1) + \dots + E(w_{i-1})}{i-1} = \frac{\sum_{j=1}^{i-1} E(w_j)}{i-1}.$$
|
$$A(w_1,\dots,w_{i-1}) = \frac{E(w_1) + \dots + E(w_{i-1})}{i-1} = \frac{\sum_{j=1}^{i-1} E(w_j)}{i-1}.$$
|
||||||
@ -255,12 +255,12 @@ $$y = \operatorname{softmax}(C\sum_{j=1}^{i-1} E(w_j)).$$
|
|||||||
|
|
||||||
Według wzoru podanego wyżej, jeśli słowo w poprzedzającym tekście
|
Według wzoru podanego wyżej, jeśli słowo w poprzedzającym tekście
|
||||||
pojawia się więcej niż raz, jego embedding zostanie zsumowany odpowiednią liczbę razy.
|
pojawia się więcej niż raz, jego embedding zostanie zsumowany odpowiednią liczbę razy.
|
||||||
Na przykład embedding tekstu _to be or not to be_ będzie wynosił:
|
Na przykład embedding tekstu /to be or not to be/ będzie wynosił:
|
||||||
|
|
||||||
$$E(\mathrm{to}) + E(\mathrm{be}) + E(\mathrm{or}) + E(\mathrm{not}) + E(\mathrm{to}) + E(\mathrm{be}) = 2E(\mathrm{to}) + 2E(\mathrm{be}) + E(\mathrm{or}) + E(\mathrm{not}).$$
|
$$E(\mathrm{to}) + E(\mathrm{be}) + E(\mathrm{or}) + E(\mathrm{not}) + E(\mathrm{to}) + E(\mathrm{be}) = 2E(\mathrm{to}) + 2E(\mathrm{be}) + E(\mathrm{or}) + E(\mathrm{not}).$$
|
||||||
|
|
||||||
Innymi słowy, choć w worku słów nie uwzględniamy kolejności słów, to
|
Innymi słowy, choć w worku słów nie uwzględniamy kolejności słów, to
|
||||||
*liczba wystąpień* ma dla nas znaczenie. Można powiedzieć, że
|
*liczba wystąpień* ma dla nas ciągle znaczenie. Można powiedzieć, że
|
||||||
traktujemy poprzedzający tekst jako *multizbiór* (struktura
|
traktujemy poprzedzający tekst jako *multizbiór* (struktura
|
||||||
matematyczna, w której nie uwzględnia się kolejności, choć zachowana
|
matematyczna, w której nie uwzględnia się kolejności, choć zachowana
|
||||||
jest informacja o liczbie wystąpień).
|
jest informacja o liczbie wystąpień).
|
||||||
@ -273,9 +273,9 @@ się słowa, a zatem zamiast multizbioru słów rozpatrywać po prostu ich zbió
|
|||||||
$$A(w_1,\dots,w_{i-1}) = \sum_{w \in \{w_1,\dots,w_{i-1}\}} E(w).$$
|
$$A(w_1,\dots,w_{i-1}) = \sum_{w \in \{w_1,\dots,w_{i-1}\}} E(w).$$
|
||||||
|
|
||||||
Jest kwestią dyskusyjną, czy to lepsze czy gorsze podejście — w końcu
|
Jest kwestią dyskusyjną, czy to lepsze czy gorsze podejście — w końcu
|
||||||
liczba wystąpień np. słów _Ukraina_ czy _Polska_ może wpływać w jakimś
|
liczba wystąpień np. słów /Ukraina/ czy /Polska/ może wpływać w jakimś
|
||||||
stopniu na prawdopodobieństwo kolejnego słowa (_Kijów_ czy
|
stopniu na prawdopodobieństwo kolejnego słowa (/Kijów/ czy
|
||||||
_Warszawa_?).
|
/Warszawa/?).
|
||||||
|
|
||||||
*** Worek słów a wektoryzacja tf
|
*** Worek słów a wektoryzacja tf
|
||||||
|
|
||||||
@ -284,23 +284,23 @@ sumować po wszystkich słowach ze słownika, zamiast po słowach rzeczywiście
|
|||||||
|
|
||||||
$$A(w_1,\dots,w_{i-1}) = \sum_{j=1}^{i-1} E(w_j) = \sum_{w \in V} \#wE(w)$$
|
$$A(w_1,\dots,w_{i-1}) = \sum_{j=1}^{i-1} E(w_j) = \sum_{w \in V} \#wE(w)$$
|
||||||
|
|
||||||
gdzie $\#w$ to liczba wystąpień słowa $w$ (w wielu przypadkach równa zero!).
|
gdzie $\#w$ to liczba wystąpień słowa $w$ w ciagu $w_1,\dots,w_{i-1}$ (w wielu przypadkach równa zero!).
|
||||||
|
|
||||||
Jeśli teraz zanurzenia będzie reprezentować jako macierz $E$ (por. poprzedni wykład),
|
Jeśli teraz zanurzenia będziemy reprezentować jako macierz $E$ (por. poprzedni wykład),
|
||||||
wówczas sumę można przedstawić jako iloczyn macierzy $E$ i pewnego wektora:
|
wówczas sumę można przedstawić jako iloczyn macierzy $E$ i pewnego wektora:
|
||||||
|
|
||||||
$$A(w_1,\dots,w_{i-1}) = E(w) [\#w^1,\dots,\#w^{|V|}]^T.$$
|
$$A(w_1,\dots,w_{i-1}) = E(w) [\#w^1,\dots,\#w^{|V|}]^T.$$
|
||||||
|
|
||||||
(Odróżniamy $w^i$ jako $i$-ty wyraz w słowniku $V$ od $w_i$ jako $i$-ty wyraz w ciągu).
|
(Odróżniamy $w^i$ jako $i$-ty wyraz w słowniku $V$ od $w_i$ jako $i$-tego wyraz w rozpatrywanym ciągu).
|
||||||
|
|
||||||
Zwróćmy uwagę, że wektor $[\#w_1,\dots,\#w_{|V|}]$ to po prostu
|
Zwróćmy uwagę, że wektor $[\#w_1,\dots,\#w_{|V|}]$ to po prostu
|
||||||
reprezentacja wektora poprzedzającego tekstu (tj. ciągu
|
reprezentacja wektora poprzedzającego tekstu (tj. ciągu
|
||||||
$(w_1,\dots,w_{i-1})$) przy użyciu schematu wektoryzacji tf (_term
|
$(w_1,\dots,w_{i-1})$) przy użyciu schematu wektoryzacji tf (/term
|
||||||
frequency_). Przypomnijmy, że tf to reprezentacja tekstu przy użyciu
|
frequency/). Przypomnijmy, że tf to reprezentacja tekstu przy użyciu
|
||||||
wektorów o rozmiarze $|V|$ — na każdej pozycji odnotowujemy liczbę wystąpień.
|
wektorów o rozmiarze $|V|$ — na każdej pozycji odnotowujemy liczbę wystąpień.
|
||||||
Wektory tf są *rzadkie*, tj. na wielu pozycjach zawierają zera.
|
Wektory tf są *rzadkie*, tj. na wielu pozycjach zawierają zera.
|
||||||
|
|
||||||
Innymi słowy, nasz model języka _bag of words_ można przedstawić za pomocą wzoru:
|
Innymi słowy, nasz model języka /bag of words/ można przedstawić za pomocą wzoru:
|
||||||
|
|
||||||
$$y = \operatorname{softmax}(C\operatorname{tf}(w_1,\dots,w_{i-1})),$$
|
$$y = \operatorname{softmax}(C\operatorname{tf}(w_1,\dots,w_{i-1})),$$
|
||||||
|
|
||||||
@ -320,15 +320,15 @@ Czy wszystkie słowa są tak samo istotne? Rzecz jasna, nie:
|
|||||||
poprzedzające odgadywany wyraz mają większy wpływ niż słowa wcześniejsze;
|
poprzedzające odgadywany wyraz mają większy wpływ niż słowa wcześniejsze;
|
||||||
intuicyjnie, wpływ słów stopniowo spada — tym bardziej, im bardziej słowo jest oddalone od słowa odgadywanego;
|
intuicyjnie, wpływ słów stopniowo spada — tym bardziej, im bardziej słowo jest oddalone od słowa odgadywanego;
|
||||||
- jak wiemy z wyszukiwania informacji, słowa, które występują w wielu tekstach czy dokumentach, powinny mieć
|
- jak wiemy z wyszukiwania informacji, słowa, które występują w wielu tekstach czy dokumentach, powinny mieć
|
||||||
mniejsze znaczenie, w skrajnym przypadku słowa występujące w prawie każdym tekście (_że_, _w_, _i_ itd.) powinny
|
mniejsze znaczenie, w skrajnym przypadku słowa występujące w prawie każdym tekście (/że/, /w/, /i/ itd.) powinny
|
||||||
być praktycznie pomijane jako stop words (jeśli rozpatrywać je w „masie” worka słów — oczywiście
|
być praktycznie pomijane jako /stop words/ (jeśli rozpatrywać je w „masie” worka słów — oczywiście
|
||||||
to, czy słowo poprzedzające odgadywane słowo to _że_, _w_ czy _i_ ma olbrzymie znaczenie!).
|
to, czy słowo poprzedzające odgadywane słowo to /że/, /w/ czy /i/ ma olbrzymie znaczenie!).
|
||||||
|
|
||||||
Zamiast po prostu dodawać zanurzenia, można operować na sumie (bądź średniej) ważonej:
|
Zamiast po prostu dodawać zanurzenia, można operować na sumie (bądź średniej) ważonej:
|
||||||
|
|
||||||
$$\sum_{j=1}^{i-1} \omega(j, w_j)E(w_j), gdzie$$
|
$$\sum_{j=1}^{i-1} \omega(j, w_j)E(w_j),$$
|
||||||
|
|
||||||
$\omega(j, w_j)$ jest pewną wagą, która może zależeć od pozycji $j$ lub samego słowa $w_j$.
|
gdzie $\omega(j, w_j)$ jest pewną wagą, która może zależeć od pozycji $j$ lub samego słowa $w_j$.
|
||||||
|
|
||||||
*** Uwzględnienie pozycji
|
*** Uwzględnienie pozycji
|
||||||
|
|
||||||
@ -338,14 +338,14 @@ uwzględnienie pozycji słowa, np. w taki sposób:
|
|||||||
$$\omega(j, w_j) = \beta^{i-j-1},$$
|
$$\omega(j, w_j) = \beta^{i-j-1},$$
|
||||||
|
|
||||||
dla pewnego hiperparametru $\beta$. Na przykład jeśli $\beta=0,9$,
|
dla pewnego hiperparametru $\beta$. Na przykład jeśli $\beta=0,9$,
|
||||||
wówczas słowo bezpośrednio poprzedzające dane słowo ma $1 / 0,9^9 \approx 2.58$
|
wówczas słowo bezpośrednio poprzedzające dane słowo ma $1 / 0,9^9 \approx 2,58$
|
||||||
większy wpływ niż słowo występujące 10 pozycji wstecz.
|
większy wpływ niż słowo występujące 10 pozycji wstecz.
|
||||||
|
|
||||||
*** Odwrócona częstość dokumentowa
|
*** Odwrócona częstość dokumentowa
|
||||||
|
|
||||||
Aby większą wagę przykładać do słów występujących w mniejszej liczbie
|
Aby większą wagę przykładać do słów występujących w mniejszej liczbie
|
||||||
dokumentów, możemy użyć, znanej w wyszukiwaniu informacji
|
dokumentów, możemy użyć, znanej z wyszukiwania informacji,
|
||||||
odwrotnej częstości dokumentowej (_inverted document frequency_, _idf_):
|
odwrotnej częstości dokumentowej (/inverted document frequency/, /idf/):
|
||||||
|
|
||||||
$$\omega(j, w_j) = \operatorname{idf}_S(w_j) = \operatorname{log}\frac{|S|}{\operatorname{df}_S(w_j)},$$
|
$$\omega(j, w_j) = \operatorname{idf}_S(w_j) = \operatorname{log}\frac{|S|}{\operatorname{df}_S(w_j)},$$
|
||||||
|
|
||||||
@ -356,7 +356,7 @@ gdzie:
|
|||||||
w ilu dokumentach występuje $w$.
|
w ilu dokumentach występuje $w$.
|
||||||
|
|
||||||
Rzecz jasna, ten sposób ważenia oznacza tak naprawdę zastosowanie wektoryzacji tf-idf zamiast tf,
|
Rzecz jasna, ten sposób ważenia oznacza tak naprawdę zastosowanie wektoryzacji tf-idf zamiast tf,
|
||||||
nasza sieć będzie dana wzorem:
|
nasza sieć będzie dana zatem wzorem:
|
||||||
|
|
||||||
$$y = \operatorname{softmax}(C\operatorname{tfidf}(w_1,\dots,w_{i-1})).$$
|
$$y = \operatorname{softmax}(C\operatorname{tfidf}(w_1,\dots,w_{i-1})).$$
|
||||||
|
|
||||||
@ -369,7 +369,7 @@ $$\omega(j, w_j) = \beta^{i-j-1}\operatorname{idf}_S(w_j).$$
|
|||||||
*Uwaga*: „wagi” $\omega(j, w_j)$ nie są tak naprawdę wyuczalnymi
|
*Uwaga*: „wagi” $\omega(j, w_j)$ nie są tak naprawdę wyuczalnymi
|
||||||
wagami (parametrami) naszej sieci neuronowej, terminologia może być
|
wagami (parametrami) naszej sieci neuronowej, terminologia może być
|
||||||
tutaj myląca. Z punktu widzenia sieci neuronowej $\omega(j, w_j)$ są
|
tutaj myląca. Z punktu widzenia sieci neuronowej $\omega(j, w_j)$ są
|
||||||
stałe i są optymalizowane w procesie propagacji wstecznej. Innymi
|
stałe i *nie* są optymalizowane w procesie propagacji wstecznej. Innymi
|
||||||
słowy, tak zdefiniowane $\omega(j, w_j)$ zależą tylko od:
|
słowy, tak zdefiniowane $\omega(j, w_j)$ zależą tylko od:
|
||||||
|
|
||||||
- hiperparametru $\beta$, który może być optymalizowany już poza siecią (w procesie *hiperoptymalizacji*),
|
- hiperparametru $\beta$, który może być optymalizowany już poza siecią (w procesie *hiperoptymalizacji*),
|
||||||
@ -378,11 +378,11 @@ słowy, tak zdefiniowane $\omega(j, w_j)$ zależą tylko od:
|
|||||||
*Pytanie*: czy wagi $\omega(j, w_j)$ mogłyby sensownie uwzględniać
|
*Pytanie*: czy wagi $\omega(j, w_j)$ mogłyby sensownie uwzględniać
|
||||||
jakieś parametry wyuczalne z całą siecią?
|
jakieś parametry wyuczalne z całą siecią?
|
||||||
|
|
||||||
** Modelowanie języka przy użyciu bardziej złożonych neuronowych sieci _feed-forward_
|
** Modelowanie języka przy użyciu bardziej złożonych neuronowych sieci /feed-forward/
|
||||||
|
|
||||||
Można połączyć zalety obu ogólnych podejść (n-gramowego modelu i worka
|
Można połączyć zalety obu ogólnych podejść (n-gramowego modelu i worka
|
||||||
słów) — można _równocześnie_ traktować w specjalny sposób (na
|
słów) — można *równocześnie* traktować w specjalny sposób (na
|
||||||
przykład) dwa poprzedzające wyrazy, zaś wszystkie inne wyrazy
|
przykład) dwa poprzedzające wyrazy, wszystkie zaś inne wyrazy
|
||||||
reprezentować jako „tło” modelowane za pomocą worka słów lub podobnej
|
reprezentować jako „tło” modelowane za pomocą worka słów lub podobnej
|
||||||
reprezentacji. Osiągamy to poprzez konkatenację wektora
|
reprezentacji. Osiągamy to poprzez konkatenację wektora
|
||||||
poprzedzającego słowa, słowa występującego dwie pozycje wstecz oraz
|
poprzedzającego słowa, słowa występującego dwie pozycje wstecz oraz
|
||||||
@ -390,13 +390,16 @@ zagregowanego zanurzenia całego wcześniejszego tekstu:
|
|||||||
|
|
||||||
$$y = \operatorname{softmax}(C[E(w_{i-1}),E(w_{i-2}),A(w_1,\dots,w_{i-3})]),$$
|
$$y = \operatorname{softmax}(C[E(w_{i-1}),E(w_{i-2}),A(w_1,\dots,w_{i-3})]),$$
|
||||||
|
|
||||||
lepiej z dodatkową warstwą ukrytą:
|
czy lepiej z dodatkową warstwą ukrytą:
|
||||||
|
|
||||||
$$y = \operatorname{softmax}(C\operatorname{tg}(W[E(w_{i-1}),E(w_{i-2}),A(w_1,\dots,w_{i-3})])),$$
|
$$y = \operatorname{softmax}(C\operatorname{tgh}(W[E(w_{i-1}),E(w_{i-2}),A(w_1,\dots,w_{i-3})])),$$
|
||||||
|
|
||||||
W tak uzyskanym dwuwarstwowym neuronowym modelu języka, łączącym model
|
W tak uzyskanym dwuwarstwowym neuronowym modelu języka, łączącym model
|
||||||
trigramowy z workiem słów, macierz $W$ ma rozmiar $h \times 3m$.
|
trigramowy z workiem słów, macierz $W$ ma rozmiar $h \times 3m$.
|
||||||
|
|
||||||
|
*Pytanie*: jakie mamy możliwości, jeśli zamiast przewidywać kolejne słowo, mamy za zadanie
|
||||||
|
odgadywać słowo w luce (jak w wyzwaniach typu /word gap/)?
|
||||||
|
|
||||||
** Literatura
|
** Literatura
|
||||||
|
|
||||||
Skuteczny n-gramowy neuronowy model języka opisano po raz pierwszy
|
Skuteczny n-gramowy neuronowy model języka opisano po raz pierwszy
|
||||||
|
BIN
wyk/08_Neuronowy_ngramowy_model/bow1.drawio.png
Normal file
BIN
wyk/08_Neuronowy_ngramowy_model/bow1.drawio.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 9.1 KiB |
Loading…
Reference in New Issue
Block a user