This commit is contained in:
Filip Gralinski 2022-04-23 12:37:17 +02:00
parent 219d0fc56b
commit 27a179cac9
3 changed files with 49 additions and 46 deletions

View File

@ -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ą si 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

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