From 219d0fc56b45d06d39947e2e31a33892f34ffed2 Mon Sep 17 00:00:00 2001 From: Filip Gralinski Date: Sat, 23 Apr 2022 11:52:15 +0200 Subject: [PATCH] 8 --- wyk/07_Zanurzenia_slow.org | 338 +++++++++++++++ wyk/08_Neuronowy_ngramowy_model.org | 403 ++++++++++++++++++ wyk/08_Neuronowy_ngramowy_model/bow1.drawio | 1 + wyk/08_Neuronowy_ngramowy_model/bow2.drawio | 1 + .../bow2.drawio.png | Bin 0 -> 29747 bytes .../ngram-tgh.drawio | 1 + .../ngram-tgh.drawio.png | Bin 0 -> 25606 bytes wyk/08_Neuronowy_ngramowy_model/ngram.drawio | 1 + .../ngram.drawio.png | Bin 0 -> 18102 bytes wyk/08_Neuronowy_ngramowy_model/tanh.png | Bin 0 -> 23989 bytes .../trigram1.drawio | 1 + .../trigram1.drawio.png | Bin 0 -> 20473 bytes 12 files changed, 746 insertions(+) create mode 100644 wyk/07_Zanurzenia_slow.org create mode 100644 wyk/08_Neuronowy_ngramowy_model.org create mode 100644 wyk/08_Neuronowy_ngramowy_model/bow1.drawio create mode 100644 wyk/08_Neuronowy_ngramowy_model/bow2.drawio create mode 100644 wyk/08_Neuronowy_ngramowy_model/bow2.drawio.png create mode 100644 wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio create mode 100644 wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio.png create mode 100644 wyk/08_Neuronowy_ngramowy_model/ngram.drawio create mode 100644 wyk/08_Neuronowy_ngramowy_model/ngram.drawio.png create mode 100644 wyk/08_Neuronowy_ngramowy_model/tanh.png create mode 100644 wyk/08_Neuronowy_ngramowy_model/trigram1.drawio create mode 100644 wyk/08_Neuronowy_ngramowy_model/trigram1.drawio.png diff --git a/wyk/07_Zanurzenia_slow.org b/wyk/07_Zanurzenia_slow.org new file mode 100644 index 0000000..f4c6a42 --- /dev/null +++ b/wyk/07_Zanurzenia_slow.org @@ -0,0 +1,338 @@ +* Zanurzenia słów + +W praktyce stosowalność słowosieci okazała się zaskakująco +ograniczona. Większy przełom w przetwarzaniu języka naturalnego przyniosły +wielowymiarowe reprezentacje słów, inaczej: zanurzenia słów. + +** „Wymiary” słów + +Moglibyśmy zanurzyć (ang. /embed/) w wielowymiarowej przestrzeni, tzn. zdefiniować odwzorowanie +$E \colon V \rightarrow \mathcal{R}^m$ dla pewnego $m$ i określić taki sposób estymowania +prawdopodobieństw $P(u|v)$, by dla par $E(v)$ i $E(v')$ oraz $E(u)$ i $E(u')$ znajdujących się w pobliżu +(według jakiejś metryki odległości, na przykład zwykłej odległości euklidesowej): + +$$P(u|v) \approx P(u'|v').$$ + +$E(u)$ nazywamy zanurzeniem (embeddingiem) słowa. + +*** Wymiary określone z góry? + +Można by sobie wyobrazić, że $m$ wymiarów mogłoby być z góry +określonych przez lingwistę. Wymiary te byłyby związane z typowymi +„osiami” rozpatrywanymi w językoznawstwie, na przykład: + +- czy słowo jest wulgarne, pospolite, potoczne, neutralne czy książkowe? +- czy słowo jest archaiczne, wychodzące z użycia czy jest neologizmem? +- czy słowo dotyczy kobiet, czy mężczyzn (w sensie rodzaju gramatycznego i/lub + socjolingwistycznym)? +- czy słowo jest w liczbie pojedynczej czy mnogiej? +- czy słowo jest rzeczownikiem czy czasownikiem? +- czy słowo jest rdzennym słowem czy zapożyczeniem? +- czy słowo jest nazwą czy słowem pospolitym? +- czy słowo opisuje konkretną rzecz czy pojęcie abstrakcyjne? +- … + +W praktyce okazało się jednak, że lepiej, żeby komputer uczył się sam +możliwych wymiarów — z góry określamy tylko $m$ (liczbę wymiarów). + +** Bigramowy model języka oparty na zanurzeniach + +Zbudujemy teraz najprostszy model język oparty na zanurzeniach. Będzie to właściwie najprostszy +*neuronowy model języka*, jako że zbudowany model można traktować jako prostą sieć neuronową. + +*** Słownik + +W typowym neuronowym modelu języka rozmiar słownika musi być z góry +ograniczony. Zazwyczaj jest to liczba rzędu kilkudziesięciu wyrazów — +po prostu będziemy rozpatrywać $|V|$ najczęstszych wyrazów, pozostałe zamienimy +na specjalny token ~~ reprezentujący nieznany (/unknown/) wyraz. + +Aby utworzyć taki słownik użyjemy gotowej klasy ~Vocab~ z pakietu torchtext: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + from itertools import islice + import regex as re + import sys + from torchtext.vocab import build_vocab_from_iterator + + + def get_words_from_line(line): + line = line.rstrip() + yield '' + for m in re.finditer(r'[\p{L}0-9\*]+|\p{P}+', line): + yield m.group(0).lower() + yield '' + + + def get_word_lines_from_file(file_name): + with open(file_name, 'r') as fh: + for line in fh: + yield get_words_from_line(line) + + vocab_size = 20000 + + vocab = build_vocab_from_iterator( + get_word_lines_from_file('opensubtitlesA.pl.txt'), + max_tokens = vocab_size, + specials = ['']) + + vocab['jest'] +#+END_SRC + +#+RESULTS: +:results: +16 +:end: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer +vocab.lookup_tokens([0, 1, 2, 10, 12345]) +#+END_SRC + +#+RESULTS: +:results: +['', '', '', 'w', 'wierzyli'] +:end: + +*** Definicja sieci + +Naszą prostą sieć neuronową zaimplementujemy używając frameworku PyTorch. + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + from torch import nn + import torch + + embed_size = 100 + + class SimpleBigramNeuralLanguageModel(nn.Module): + def __init__(self, vocabulary_size, embedding_size): + super(SimpleBigramNeuralLanguageModel, self).__init__() + self.model = nn.Sequential( + nn.Embedding(vocabulary_size, embedding_size), + nn.Linear(embedding_size, vocabulary_size), + nn.Softmax() + ) + + def forward(self, x): + return self.model(x) + + model = SimpleBigramNeuralLanguageModel(vocab_size, embed_size) + + vocab.set_default_index(vocab['']) + ixs = torch.tensor(vocab.forward(['pies'])) + out[0][vocab['jest']] +#+END_SRC + +#+RESULTS: +:results: +:end: + +Teraz wyuczmy model. Wpierw tylko potasujmy nasz plik: + +#+BEGIN_SRC +shuf < opensubtitlesA.pl.txt > opensubtitlesA.pl.shuf.txt +#+END_SRC + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + from torch.utils.data import IterableDataset + import itertools + + def look_ahead_iterator(gen): + prev = None + for item in gen: + if prev is not None: + yield (prev, item) + prev = item + + class Bigrams(IterableDataset): + def __init__(self, text_file, vocabulary_size): + self.vocab = build_vocab_from_iterator( + get_word_lines_from_file(text_file), + max_tokens = vocabulary_size, + specials = ['']) + self.vocab.set_default_index(self.vocab['']) + self.vocabulary_size = vocabulary_size + self.text_file = text_file + + def __iter__(self): + return look_ahead_iterator( + (self.vocab[t] for t in itertools.chain.from_iterable(get_word_lines_from_file(self.text_file)))) + + train_dataset = Bigrams('opensubtitlesA.pl.shuf.txt', vocab_size) +#+END_SRC + +#+RESULTS: +:results: +:end: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + from torch.utils.data import DataLoader + + next(iter(train_dataset)) +#+END_SRC + +#+RESULTS: +:results: +(2, 5) +:end: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + from torch.utils.data import DataLoader + + next(iter(DataLoader(train_dataset, batch_size=5))) +#+END_SRC + +#+RESULTS: +:results: +[tensor([ 2, 5, 51, 3481, 231]), tensor([ 5, 51, 3481, 231, 4])] +:end: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + device = 'cuda' + model = SimpleBigramNeuralLanguageModel(vocab_size, embed_size).to(device) + data = DataLoader(train_dataset, batch_size=5000) + optimizer = torch.optim.Adam(model.parameters()) + criterion = torch.nn.NLLLoss() + + model.train() + step = 0 + for x, y in data: + x = x.to(device) + y = y.to(device) + optimizer.zero_grad() + ypredicted = model(x) + loss = criterion(torch.log(ypredicted), y) + if step % 100 == 0: + print(step, loss) + step += 1 + loss.backward() + optimizer.step() + + torch.save(model.state_dict(), 'model1.bin') +#+END_SRC + +#+RESULTS: +:results: +None +:end: + +Policzmy najbardziej prawdopodobne kontynuację dla zadanego słowa: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + device = 'cuda' + model = SimpleBigramNeuralLanguageModel(vocab_size, embed_size).to(device) + model.load_state_dict(torch.load('model1.bin')) + model.eval() + + ixs = torch.tensor(vocab.forward(['dla'])).to(device) + + out = model(ixs) + top = torch.topk(out[0], 10) + top_indices = top.indices.tolist() + top_probs = top.values.tolist() + top_words = vocab.lookup_tokens(top_indices) + list(zip(top_words, top_indices, top_probs)) +#+END_SRC + +#+RESULTS: +:results: +[('ciebie', 73, 0.1580502986907959), ('mnie', 26, 0.15395283699035645), ('', 0, 0.12862136960029602), ('nas', 83, 0.0410110242664814), ('niego', 172, 0.03281523287296295), ('niej', 245, 0.02104802615940571), ('siebie', 181, 0.020788608118891716), ('którego', 365, 0.019379809498786926), ('was', 162, 0.013852755539119244), ('wszystkich', 235, 0.01381855271756649)] +:end: + +Teraz zbadajmy najbardziej podobne zanurzenia dla zadanego słowa: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + vocab = train_dataset.vocab + ixs = torch.tensor(vocab.forward(['kłopot'])).to(device) + + out = model(ixs) + top = torch.topk(out[0], 10) + top_indices = top.indices.tolist() + top_probs = top.values.tolist() + top_words = vocab.lookup_tokens(top_indices) + list(zip(top_words, top_indices, top_probs)) +#+END_SRC + +#+RESULTS: +:results: +[('.', 3, 0.404473215341568), (',', 4, 0.14222915470600128), ('z', 14, 0.10945753753185272), ('?', 6, 0.09583134204149246), ('w', 10, 0.050338443368673325), ('na', 12, 0.020703863352537155), ('i', 11, 0.016762692481279373), ('', 0, 0.014571071602404118), ('...', 15, 0.01453721895813942), ('', 1, 0.011769450269639492)] +:end: + +#+BEGIN_SRC python :session mysession :exports both :results raw drawer + cos = nn.CosineSimilarity(dim=1, eps=1e-6) + + embeddings = model.model[0].weight + + vec = embeddings[vocab['poszedł']] + + similarities = cos(vec, embeddings) + + top = torch.topk(similarities, 10) + + top_indices = top.indices.tolist() + top_probs = top.values.tolist() + top_words = vocab.lookup_tokens(top_indices) + list(zip(top_words, top_indices, top_probs)) +#+END_SRC + +#+RESULTS: +:results: +[('poszedł', 1087, 1.0), ('idziesz', 1050, 0.4907470941543579), ('przyjeżdża', 4920, 0.45242372155189514), ('pojechałam', 12784, 0.4342481195926666), ('wrócił', 1023, 0.431664377450943), ('dobrać', 10351, 0.4312002956867218), ('stałeś', 5738, 0.4258835017681122), ('poszła', 1563, 0.41979148983955383), ('trafiłam', 18857, 0.4109022617340088), ('jedzie', 1674, 0.4091658890247345)] +:end: + +*** Zapis przy użyciu wzoru matematycznego + +Powyżej zaprogramowaną sieć neuronową można opisać następującym wzorem: + +$$\vec{y} = \operatorname{softmax}(CE(w_{i-1}),$$ + +gdzie: + +- $w_{i-1}$ to pierwszy wyraz w bigramie (poprzedzający wyraz), +- $E(w)$ to zanurzenie (embedding) wyrazy $w$ — wektor o rozmiarze $m$, +- $C$ to macierz o rozmiarze $|V| \times m$, która rzutuje wektor zanurzenia w wektor o rozmiarze słownika, +- $\vec{y}$ to wyjściowy wektor prawdopodobieństw o rozmiarze $|V|$. + +**** Hiperparametry + +Zauważmy, że nasz model ma dwa hiperparametry: + +- $m$ — rozmiar zanurzenia, +- $|V|$ — rozmiar słownika, jeśli zakładamy, że możemy sterować + rozmiarem słownika (np. przez obcinanie słownika do zadanej liczby + najczęstszych wyrazów i zamiany pozostałych na specjalny token, powiedzmy, ~~. + +Oczywiście możemy próbować manipulować wartościami $m$ i $|V|$ w celu +polepszenia wyników naszego modelu. + +*Pytanie*: dlaczego nie ma sensu wartość $m \approx |V|$ ? dlaczego nie ma sensu wartość $m = 1$? + +*** Diagram sieci + +Jako że mnożenie przez macierz ($C$) oznacza po prostu zastosowanie +warstwy liniowej, naszą sieć możemy interpretować jako jednowarstwową +sieć neuronową, co można zilustrować za pomocą następującego diagramu: + +#+CAPTION: Diagram prostego bigramowego neuronowego modelu języka +[[./07_Zanurzenia_slow/bigram1.drawio.png]] + +*** Zanurzenie jako mnożenie przez macierz + +Uzyskanie zanurzenia ($E(w)$) zazwyczaj realizowane jest na zasadzie +odpytania (_look-up_). Co ciekawe, zanurzenie można intepretować jako +mnożenie przez macierz zanurzeń (embeddingów) $E$ o rozmiarze $m \times |V|$ — jeśli słowo będziemy na wejściu kodowali przy użyciu +wektora z gorącą jedynką (_one-hot encoding_), tzn. słowo $w$ zostanie +podane na wejściu jako wektor $\vec{1_V}(w) = [0,\ldots,0,1,0\ldots,0]$ o rozmiarze $|V|$ +złożony z samych zer z wyjątkiem jedynki na pozycji odpowiadającej indeksowi wyrazu $w$ w słowniku $V$. + +Wówczas wzór przyjmie postać: + +$$\vec{y} = \operatorname{softmax}(CE\vec{1_V}(w_{i-1})),$$ + +gdzie $E$ będzie tym razem macierzą $m \times |V|$. + +*Pytanie*: czy $\vec{1_V}(w)$ intepretujemy jako wektor wierszowy czy kolumnowy? + +W postaci diagramu można tę interpretację zilustrować w następujący sposób: + +#+CAPTION: Diagram prostego bigramowego neuronowego modelu języka z wejściem w postaci one-hot +[[./07_Zanurzenia_slow/bigram2.drawio.png]] diff --git a/wyk/08_Neuronowy_ngramowy_model.org b/wyk/08_Neuronowy_ngramowy_model.org new file mode 100644 index 0000000..2c95c29 --- /dev/null +++ b/wyk/08_Neuronowy_ngramowy_model.org @@ -0,0 +1,403 @@ +* Neuronowy n-gramowy model języka + +Omówiony w poprzedniej części neuronowy bigramowy model języka +warunkuje kolejny wyraz jedynie względem bezpośrednio poprzedzającego +— 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 +ograniczenie, w rzeczywiście bardzo często prawdopodobieństwo +kolejnego wyrazu zależy od wyrazu dwie, trzy, cztery itd. pozycje +wstecz czy w ogólności od wszystkich wyrazów poprzedzających (bez +względu na ich pozycje). + +*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 +szkła obywatele tej dzielnicy, jedni zakładali się o wygranę lub +przegranę Anglii, drudzy o bankructwo Wokulskiego; jedni nazywali +geniuszem Bismarcka, drudzy — awanturnikiem Wokulskiego; jedni +krytykowali postępowanie prezydenta MacMahona, inni twierdzili, że +Wokulski jest zdecydowanym wariatem, jeżeli nie czymś gorszym…_ + +** Trigramowy neuronowy model języka + +Spróbujmy najpierw rozszerzyć nasz model na trigramy, to znaczy +będziemy przewidywać słowo $w_i$ na podstawie słów $w_{i-2}$ i +$w_{i-1}$. + +Najprostsze rozwiązanie polegałoby na zanurzeniu pary $(w_{i-2}, +w_{i-1})$ w całości i postępowaniu jak w przypadku modelu bigramowego. +Byłoby to jednak zupełnie niepraktyczne, jako że: + +- liczba zanurzeń do wyuczenia byłaby olbrzymia ($|V|^2$ — byłoby to + ewentualnie akceptowalne dla modeli operujących na krótszych + jednostkach niż słowno, np. na znakach), +- w szczególności zanurzenia dla par $(v, u)$, $(u, v)$, $(u, u)$ i + $(v, v)$ nie miałyby ze sobą nic wspólnego. + +*** Konketanacja zanurzeń + +Właściwsze rozwiązanie polega na zanurzenia dalej pojedynczych słów i +następnie ich *konkatenowaniu*. + +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}$. +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]$ +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 +$|V| \times m$, lecz $|V| \times m+m$ = $|V| \times 2m$ i wyjście będę zdefiniowane za pomocą wzoru: + +$$\vec{y} = \operatorname{softmax}(C[E(w_{i-2}),E(w_{i-1})]),$$ + +co można przedstawić za pomocą następującego schematu: + +#+CAPTION: Diagram prostego bigramowego neuronowego modelu języka +[[./08_Neuronowy_ngramowy_model/trigram1.drawio.png]] + +**** Rozbicie macierzy $C$ + +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ć +je osobno przez odpowiadający im wektory i następnie _dodać_ macierze, +tak aby: + +$$C[E(w_{i-2}),E(w_{i-1})] = C_{-2}E(w_{i-2}) + C_{-1}E(w_{i-1}).$$ + +Macierze $C_{-2}$ i $C_{-1}$ będą miały rozmiar $|V| \times m$. + +Przy tym podejściu możemy powiedzieć, że ostatni i przedostatni wyraz +mają swoje osobne macierze o potencjalnie różnych wagach — co ma sens, +jako że na inne aspekty zwracamy uwagę przewidując kolejne słowo na +podstawie wyrazu bezpośrednio poprzedzającego, a na inne — na +podstawie słowa występującego dwie pozycje wcześniej. + +** Uogólnienie na $n$-gramowy model języka dla dowolnego $n$ + +Łatwo uogólnić opisany wyżej trigramowy model języka dla dowolnego $n$. +Uogólniony model można przedstawić za pomocą wzoru: + +$$\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: + +$$\vec{y} = \operatorname{softmax}(C_{-(i-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$. + +Por. diagram: + +#+CAPTION: Diagram prostego n-gramowego neuronowego modelu języka +[[./08_Neuronowy_ngramowy_model/ngram.drawio.png]] + +** Dodanie kolejnej warstwy + +W wypadku trigramowego czy — ogólniej — n-gramowego modelu języka dla +$n \geq 3$ warto dodać kolejną (*ukrytą*) warstwę, na którą będziemy rzutować +skonkatenowane embeddingi, zanim zrzutujemy je do długiego wektora +prawdopodobieństw. + +Zakładamy, że warstwa ukryta zawiera $h$ neuronów. Wartość $h$ powinna być mniejsza +niż $nm$ (a może nawet od $m$). + +*Pytanie*: Dlaczego wartość $h > nm$ nie jest racjonalnym wyborem? + +*Pytanie*: Dlaczego dodanie kolejnej warstwy nie ma sensu dla modelu bigramowego? + +*** Funkcja aktywacji + +Aby warstwa ukryta wnosiła coś nowego, na wyjściu z tej funkcji musimy +zastosować nieliniową *funkcji aktywacji*. Zazwyczaj jako funkcji +aktywacji w sieciach neuronowych używa się funkcji ReLU albo funkcji +sigmoidalnej. W prostych neuronowych modelach języka sprawdza się też +*tangens hiperboliczny* (tgh, w literaturze anglojęzycznej tanh): + +$$\operatorname{tgh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}.$$ + +#+BEGIN_SRC python :session mysession :results file +import matplotlib.pyplot as plt +import torch +import torch.nn as nn + +x = torch.linspace(-5,5,100) +plt.xlabel("x") +plt.ylabel("y") +a = torch.Tensor(x.size()[0]).fill_(2.) +m = torch.stack([x, a]) +plt.plot(x, nn.functional.tanh(m)[0]) +fname = '08_Neuronowy_ngramowy_model/tanh.png' +plt.savefig(fname) +fname +#+END_SRC + +#+RESULTS: +[[file:08_Neuronowy_ngramowy_model/tanh.png]] + +**** Tangens hiperboliczny zastosowany dla wektora + +Tangens hiperboliczny wektora będzie po prostu wektorem tangensów +hiperbolicznych poszczególnych wartości. + +#+BEGIN_SRC python :session mysession :results file + import torch + import torch.nn as nn + + v = torch.Tensor([-100, -2.0, 0.0, 0.5, 1000.0]) + nn.functional.tanh(v) +#+END_SRC + +#+RESULTS: +[[file:tensor([-1.0000, -0.9640, 0.0000, 0.4621, 1.0000])]] + +*** Wzór i schemat dwuwarstwowego n-gramowego neuronowego modelu języka + +Dwuwarstwowy model języka będzie określony następującym wzorem: + +$$\vec{y} = \operatorname{softmax}(C\operatorname{tgh}(W[E(w_{i-n+1}),\dots,E(w_{i-1})])),$$ + +gdzie: + +- $W$ jest wyuczalną macierzą wag o rozmiarze $h \times nm$, +- $C$ będzie macierzą o rozmiarze $|V| \times h$. + +Zmodyfikowaną się można przedstawić za pomocą następującego schematu: + +#+CAPTION: Dwuwarstwowy n-gramowy neuronowy model języka +[[./08_Neuronowy_ngramowy_model/ngram-tgh.drawio.png]] + +*** Liczba wag w modelu dwuwarstwowym + +Na wagi w modelu dwuwarstwowym składają się: + +- zanurzenia: $m|V|$, +- wagi warstwy ukrytej: $hnm$, +- wagi warstwy wyjściowej: $|V|h$, + +a zatem łącznie: + +$$m|V| + hnm + |V|h$$ + +Jeśli $h \approx m$ (co jest realistyczną opcją), wówczas otrzymamy oszacowanie: + +$$O(m|V| + nm^2).$$ + +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 +wartości $n$ niż tradycyjny n-gramowy model języka (dla którego +wartości $n > 5$ zazwyczaj nie mają sensu). + +** Model worka słów + +Jak stwierdziliśmy przed chwilą, dwuwarstwowy n-gramowym modelu języka +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ć +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}$, +$C_{-2}$, $C_{-3}$ to zapewne różnica między wpływem słowa +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 +$C_{-5}$ będzie raczej niewielka i sieć niepotrzebnie będzie uczyła +się dwukrotnie podobnych wag. Im dalej wstecz, tym różnica wpływu +będzie jeszcze mniej istotna, można np. przypuszczać, że różnica +między $C_{-10}$ i $C_{-13}$ nie powinna być duża. + +Spróbujmy najpierw zaproponować radykalne podejście, w którym nie +będziemy w ogóle uwzględniać pozycji słów (lub będziemy je uwzględniać +w niewielkim stopniu), później połączymy to z omówionym wcześniej +modelem $n$-gramowym. + +*** Agregacja wektorów + +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 +sieć neuronowa musi mieć ustaloną strukturę, nie możemy zmieniać jej +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 +$A(w_1,\dots,w_{i-1})$ było wektorem o stałej długości, niezależnie od $i$. + +*** Worek słów + +Najprostszą funkcją agregującą jest po prostu… suma. Dodajemy po +prostu zanurzenia słów: + +$$A(w_1,\dots,w_{i-1}) = E(w_1) + \dots + E(w_{i-1}) = \sum_{j=1}^{i-1} E(w_j).$$ + +*Uwaga*: zanurzenia słów nie zależą od pozycji słowa (podobnie było w wypadku n-gramowego modelu!). + +Jeśli rozmiar zanurzenia (embeddingu) wynosi $m$, wówczas rozmiar +wektora uzyskanego dla całego poprzedzającego tekstu wynosi również $m$. + +Proste dodawanie wydaje się bardzo „prostacką” metodą, a jednak +dodawanie wektorów słów jest *zaskakująco skuteczną metodą zanurzenia +(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}.$$ + +Tak czy siak uzyskany wektor *nie zależy od kolejności słów* +(dodawanie jest przemienne i łączne!). Mówimy więc o *worku słów* +(/bag of words/, /BoW/) — co ma symbolizować fakt, że słowa są +przemieszane, niczym produkty w torbie na zakupy. + +**** Schemat graficzny modelu typu worek słów + +Po zanurzeniu całego poprzedzającego tekstu postępujemy podobnie jak w +modelu bigramowym — rzutujemy embedding na długi wektor wartości, na +którym stosujemy funkcję softmax: + +#+CAPTION: Model typu worek słów +[[./08_Neuronowy_ngramowy_model/bow1.drawio.png]] + +Odpowiada to wzorowi: + +$$y = \operatorname{softmax}(C\sum_{j=1}^{i-1} E(w_j)).$$ + +*** Jak traktować powtarzające się słowa? + +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. +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}).$$ + +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 +traktujemy poprzedzający tekst jako *multizbiór* (struktura +matematyczna, w której nie uwzględnia się kolejności, choć zachowana +jest informacja o liczbie wystąpień). + +**** Zbiór słów + +Oczywiście moglibyśmy przy agregowaniu zanurzeń pomijać powtarzające +się słowa, a zatem zamiast multizbioru słów rozpatrywać po prostu ich zbiór: + +$$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 +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 +_Warszawa_?). + +*** Worek słów a wektoryzacja tf + +Wzór na sumę zanurzeń słów można przekształcić w taki sposób, by +sumować po wszystkich słowach ze słownika, zamiast po słowach rzeczywiście występujących w tekście: + +$$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!). + +Jeśli teraz zanurzenia będzie reprezentować jako macierz $E$ (por. poprzedni wykład), +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.$$ + +(Odróżniamy $w^i$ jako $i$-ty wyraz w słowniku $V$ od $w_i$ jako $i$-ty wyraz w ciągu). + +Zwróćmy uwagę, że wektor $[\#w_1,\dots,\#w_{|V|}]$ to po prostu +reprezentacja wektora poprzedzającego tekstu (tj. ciągu +$(w_1,\dots,w_{i-1})$) przy użyciu schematu wektoryzacji tf (_term +frequency_). Przypomnijmy, że tf to reprezentacja tekstu przy użyciu +wektorów o rozmiarze $|V|$ — na każdej pozycji odnotowujemy liczbę wystąpień. +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: + +$$y = \operatorname{softmax}(C\operatorname{tf}(w_1,\dots,w_{i-1})),$$ + +co można zilustrować w następujący sposób: + +#+CAPTION: Model typu worek słów — alternatywna reprezentacja +[[./08_Neuronowy_ngramowy_model/bow2.drawio.png]] + +Można stwierdzić, że zanurzenie tekstu przekształca rzadki, długi wektor +tf w gęsty, krótki wektor. + +** Ważenie słów + +Czy wszystkie słowa są tak samo istotne? Rzecz jasna, nie: + +- jak już wiemy z naszych rozważań dotyczących n-gramowych modeli języka, słowa bezpośrednio + 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; +- 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 + 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!). + +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$$ + +$\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 + +Można w pewnym stopniu złamać „workowatość” naszej sieci przez proste +uwzględnienie pozycji słowa, np. w taki sposób: + +$$\omega(j, w_j) = \beta^{i-j-1},$$ + +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$ +większy wpływ niż słowo występujące 10 pozycji wstecz. + +*** Odwrócona częstość dokumentowa + +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 +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)},$$ + +gdzie: + +- $S$ jest pewną kolekcją dokumentów czy tekstów, z którego pochodzi przedmiotowy ciąg słów, +- $\operatorname{df}_S(w)$ to częstość dokumentowa słowa $w$ w kolekcji $S$, tzn. odpowiedź na pytanie, + w ilu dokumentach występuje $w$. + +Rzecz jasna, ten sposób ważenia oznacza tak naprawdę zastosowanie wektoryzacji tf-idf zamiast tf, +nasza sieć będzie dana wzorem: + +$$y = \operatorname{softmax}(C\operatorname{tfidf}(w_1,\dots,w_{i-1})).$$ + +*** Bardziej skomplikowane sposoby ważenia słów + +Można oczywiście połączyć odwrotną częstość dokumentową z uwzględnieniem pozycji słowa: + +$$\omega(j, w_j) = \beta^{i-j-1}\operatorname{idf}_S(w_j).$$ + +*Uwaga*: „wagi” $\omega(j, w_j)$ nie są tak naprawdę wyuczalnymi +wagami (parametrami) naszej sieci neuronowej, terminologia może być +tutaj myląca. Z punktu widzenia sieci neuronowej $\omega(j, w_j)$ są +stałe i są optymalizowane w procesie propagacji wstecznej. Innymi +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*), +- wartości $\operatorname{idf}_S(w_j)$ wyliczanych wcześniej na podstawie kolekcji $S$. + +*Pytanie*: czy wagi $\omega(j, w_j)$ mogłyby sensownie uwzględniać +jakieś parametry wyuczalne z całą siecią? + +** 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 +słów) — można _równocześnie_ traktować w specjalny sposób (na +przykład) dwa poprzedzające wyrazy, zaś wszystkie inne wyrazy +reprezentować jako „tło” modelowane za pomocą worka słów lub podobnej +reprezentacji. Osiągamy to poprzez konkatenację wektora +poprzedzającego słowa, słowa występującego dwie pozycje wstecz oraz +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})]),$$ + +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})])),$$ + +W tak uzyskanym dwuwarstwowym neuronowym modelu języka, łączącym model +trigramowy z workiem słów, macierz $W$ ma rozmiar $h \times 3m$. + +** Literatura + +Skuteczny n-gramowy neuronowy model języka opisano po raz pierwszy +w pracy [[https://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf][A Neural Probabilistic Language Model]] autorstwa Yoshua Bengio i in. diff --git a/wyk/08_Neuronowy_ngramowy_model/bow1.drawio b/wyk/08_Neuronowy_ngramowy_model/bow1.drawio new file mode 100644 index 0000000..0d30d50 --- /dev/null +++ b/wyk/08_Neuronowy_ngramowy_model/bow1.drawio @@ -0,0 +1 @@ +7VpZd9o4GP01PJLjDWM/BgKZmaaTtjmnU+alR8XCVjCWI4sY8utHQjLexNKwk3kB6Wr/tvvJdsPsTmb3BMTBZ+zBsGFo3qxh3jUMw7V09suBuQB027UE4hPkSSwHntAblKAm0SnyYFLqSDEOKYrL4BBHERzSEgYIwWm52wiH5VVj4MMa8DQEYR39B3k0EKhjtHP8D4j8IFuZHVC0TEDWWU6RBMDDqYAWhzN7DbNLMKaiNJl1YciFl8lFSKC/onW5MQIjutWAbu/xCwqcTz//fvZerAc4TN6aUhkJnWcHhh47v6xiQgPs4wiEvRztEDyNPMhn1Vgt7/OAccxAnYHPkNK5VCaYUsyggE5C2QpniP7gw29asjaQk/Hy3axYmWeViJL5j2JlkM/Aq/mwRS0bN8IRlRvhIu+I8/JDrhRjpi88JUPZ6+vj5/Txfjy+f/gz+vbS96nuPDQNaY6A+JCukbG+VDbzEognkO2PjSMwBBS9lvcBpLn6y365RllBKlWt4HWbfAXhVK5U03iuT66cNEAUPsVgcfSUOXVZdyvF9QoJhbMCVD+xbDU06dsyJpiurKe5g+mmxIKCc2XY3oVkKoRkh2zVjodeWdGni5MzZ7HSn412BzGxtu8EkPVkC5c6V4TMZEPLkkwowWPYxSEmDIlwxH1rhMKwAoEQ+RGrDpnEIcM7XNKIRahb2TBBnrdwTJXqys66B+1ZFe1ZTl179jGV515KCHt/pLHrkUbZz1FGt1OFHvv8Qo/ulo1Xb9WNd2nQR7Fe/QIZOCfdQTbfGgZ+v9k7W5q9bp6V3Tvnb/enN3ttJeWijENDjMfNaVwgWHT99GrrFXq1Tkyvej2DTPCITsDsepVgVZSga4oMVTuqFrZKUQl+Gze6rYZjAI/LgIDUwzH+heACtRKaAn4ZD/nvGHCw0/Wgjxv87ijSW8TLrS6K2P/39SmuIkUW0C9SRT5Kdmw4BmPHou0sQ13Bdgy3dRjbUd4/zYvLMJYpxTHv+EPsPPe/uoM++itwv7eM3sTrZLI7mzv+uk2eU8LR0k94x1cK6ePm2ftLi+XQLxixJXJdt91yytKu6FB4mRxVfEK5aSKjMpFww9pEt4SAeaFbzDskv7FhS/u9fZX7s4LYQW6cS+G+315Vt+f1z6T0D/tMqmW1K6x7zKdSSkKoh+ArCzf7Id30SXvRSWwPevff/gWfsNW3ps3sPc+5kO66TZ4T6Zp22QmOSrpKIV1e6nkppGsZbjXkvZd2FVMdiHgVK22g3o0jdiZfpd3Wyffm5uZ6+dPcIls/FHsq5d9WBFeR6ehZhnOtujDM02UySl04/8fwA8XwpR53jeC1iQ4Uv2vrbIjeG/rvHLuVWWHrUux1Pxn0QTLjFWRsVmhC287M9qVZVcotLrpclCWd2y9TnDU0k4WQb1kHZuKzvDG/GBefU4u5VlyZ2S5RnKwig4JBgCQWn6ON0IwbVmcFDyj0u/VrCdOsU4OloAbrUJfc9qW42mkvuUrZbftNh72jK++k4MN8wrGTE1QvuUb7iJdcpZDq7/tTQOSrthBFCPPSGaeru8UkqxyTDMXrrn29KmXV/HNZQSr5R8dm7z8= \ No newline at end of file diff --git a/wyk/08_Neuronowy_ngramowy_model/bow2.drawio b/wyk/08_Neuronowy_ngramowy_model/bow2.drawio new file mode 100644 index 0000000..3d99bdb --- /dev/null +++ b/wyk/08_Neuronowy_ngramowy_model/bow2.drawio @@ -0,0 +1 @@ +5Vpdc+I2FP01nmkfkkGyAftxcYC2m22ym5lt05cdrS1sgbGIEDHw6ythGX/IEDYECOQBkI6vJOueo6srDYbpjud9hibhF+rjyIANf26YNwaEjgXEtwQWKQBajpUiASO+wnLggSyxAhsKnREfT0uGnNKIk0kZ9GgcY4+XMMQYTcpmAxqVR52gAGvAg4ciHf2H+DxMURu2c/wPTIIwG1lMMH0yRpmx6mIaIp8mKbSanNk1TJdRytPSeO7iSDov80vqgd6Gp+sXYzjmuzT4evclueuPRv3bP+NvT72AA/v2ykx7eUbRTE3YgK1I9NfxybMoBrJoQMGZlfww2h1yBY32TQpklmLIkvFqsnyReZDjucRDPo4EAERxyhkdYZdGlAkkprGw7AxIFFUgFJEgFlVPzBALvPOMGSeCm0/qwZj4vhymk4SE44cJ8uSYiVCiwBidxT6Wk2+sX6voLeVA2SeeFyDlvT6mY8zZQpiop1ZLaVJp2bJVPcmFkZmEBU2YCkNKisG655wtUVCE/QJ5juZr7AvxqiplPKQBjVHUzdGKV3KbW0onip4h5nyhViKacVomD88J/1c2v26q2qPqTJZv5sXK4iXnT+mMeXjLFFtqySMWYL7Fzk7t5Py3UslwhDh5Li/uNyemVbOqKkzlPIAN+i34/A3EC5yyeEFTF+9a0EdRL7DORb7C62xRaCSrj1l/spI3W9X2l729o+yB+a50b79/3Z9e9lBz0pQO+BjNL3jnBJXg09BZWGPHYWGnxIfR5chwm4YNkS99wFDi0wn9SfAKtaY8QTK5jeT3CEmw4/o4oIbMxdKkichy0yWx+P2+PXGqSbxS6CerIh8l5xKZtoi5Re1cAV070GkeRjsetYe9r85jj/wVOt+bsDv2O7W7+/acGXzYnLlptSv8HTNrTh4aT4BNWo/d/rf/0Gdq9axZduQ5q7TDcpxfSTxWtXvMiPCYFMF2NivJQzntAG737p6E9ucffw/9J+sWe9NlevDYI8lQTe8pEa+S7xLQqWqlXRFBmjipdsWz7stdwUpX6SS1rj4xhhYFs4k0mGqiW8/69TrUw8j19fXlRgKzkgOYzonjQLsmjKcxG2Sx+lK5gObpYnJtQGmeS0we0JirDqWDOxsi6AtnvmMGVbOy7Bq7xcGXO6qKYUNsfkW4rHVP+1wk8trbggNKa9dbtNaeEtwrBhzm0kwLijUe3LxntcpxErZrzq3mMQOlfsOSIKaOoRGJCV2VfnN/f9eb116kWFY5EMGaAyGAxyTF0UgRI7nFD6jU5QdusKmzPdQnG2uVebqNky+46m2dWZOYHOy6rpbbTFxnlKbvF/Iq2/zJU0MANAISPOKULZbIG8poxweXS4el35+YOiEHuzutZ0S/wV6ieMaWOCZY4EM0khegtRtT9wNtTGYNU/C4TOm33GyJ/JG8k04X0eWyUT2u1MSxIy8bSyMjMFzLcBzh/o9HSG0u/UaEiGr+v5r0AJr/O8ns/g8= \ No newline at end of file diff --git a/wyk/08_Neuronowy_ngramowy_model/bow2.drawio.png b/wyk/08_Neuronowy_ngramowy_model/bow2.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..4debc2e2959eb463c858c027a7d7a9c036f4c19c GIT binary patch literal 29747 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 Jz|gh7@L%v~WFr6o literal 0 HcmV?d00001 diff --git a/wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio b/wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio new file mode 100644 index 0000000..099793b --- /dev/null +++ b/wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio @@ -0,0 +1 @@ +7Vpbc5s4FP41PCZjxMXwWBzb6W4y3TQz3c2+dFSjgGoZUVkOdn99pSDMTb6kviVxZzKxdDi68J2PcxEYVm8yHzKYxrc0RMQAnXBuWFcGAKYNOuJHShZK4ttWLokYDpWsFNzjn0gJ1cBohkM0rSlySgnHaV04okmCRrwmg4zRrK72SEl91RRGqCW4H0HSlv6LQx7nUg90S/k1wlFcrGy6fn5lAgtlNcU0hiHNctHzzVl9w+oxSnnemsx7iEj0ClxyBAYrri43xlDCtxlw9+k2+zQcj4c3H5PPPwYRN72bC5DP8gTJTN2w2ixfFAgwOktCJCcxDSvIYszRfQpH8momjC5kMZ8Qdbm9KbXPJ8Q4mldEapNDRCeIs4VQUVeBpUyvKANs1c9K/M1CJ65gX8igMnm0nLpERTQUMC8AydKA5BKxahDiJ9GM+POd2+Iv+2p0Ayxg7V7lgkJTLFxTboAssOF1JKec0THqUUKZkCQ0EZrBIyakIYIER4nojgTiSMgDiTQWBP6gLkxwGMpltKYrjdvZj/WWT7yynmW1rece03h+C2sUiidcdSnjMY1oAkm/lDZQKXVuKE2Veb4jzhfKXcEZp3XjoTnm/8nhl47qPajJZPtqXu0sNoE/pTM2Qmtu0VV+EbII8TV6Xq4n73+tKRkikOOnugfcu2HcV+h6OnXyXjht8treMdlr2m+FvgJ1tqgMkt2HYj7ZKYc993anvbcl7U3rVfHeewO8N09P/M7KoIuLKEooHV/M0kqIxe8/wLp2Iz3yTxxgTbNlqQyyKc+gEBKcYCpb79UcdjNb7Wiy1c5R7dHO6af0kU/g/B1bATQd2OnNsFXVwOjPsdFzDA/AUILAYBbSlH7D6Flqq8coJPL/GEph0AtRRA15x3nFgWXb6eFE/H5ZX3VoqpZc9I01JedSsAAfiISlRp7l4UOFPMB3DkOeEfW+D+78hwH+K/a/OKA/CQNtxXniHMEx6ygdtSzXgnS+qfH+Mlk19B+KxRKlrb1GEQ8aNsxzczWqeua0YSLQbUyUJ++tiT4wBhcVtVQqTLffcJEUbb2vur5o5DsoybkE9/f5qit41x8jmWd7jOQ4DQYe8RiJumlggX7wlc5ur3vh3dXH61FxUHoqZwOO5W0armVjZZ7dd36YLHUf+sPP/8O/qT2wZxfFQX2lMteCeqw6fN0mX1OMtbwTxlgtSNafGHugGGvbfiPv/O0o257qUHFWs9KGSLtxxM6xVsvbdqy9vLx8v+HSah4KaRzHocKlFv/ui3MdUb0G55vvALfhC46Y72gN6P1x/Ady/MsD213dfnOiQzn91jobXP4G/Z0dvjaV7J4HX1+anq9Ou7dIz50d+b9TwXWY9LzlkTUIro6yTt1Jm5pzQrN7zKrUfSus3yN7nTZ7V39fcCr2Oi328ihuG4sQnE5XJRkVyOE0zT9ue8Rzabp9sLn5zkT3ylfDZftQXG6/F5+N2YLLFx9v633iblaxukW9VPUqzn68iuiWHxzmobf8btPq/wI= \ No newline at end of file diff --git a/wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio.png b/wyk/08_Neuronowy_ngramowy_model/ngram-tgh.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..c5407b2399e4792cf514ffa8279a743907b0e94c GIT binary patch literal 25606 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 \ No newline at end of file diff --git a/wyk/08_Neuronowy_ngramowy_model/ngram.drawio.png b/wyk/08_Neuronowy_ngramowy_model/ngram.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..3686ee8ec7b4e5f939d39627be445b492051e23b GIT binary patch literal 18102 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 wf=juP^{+vH{glRCJY#6m28_H*2}bMgRZ+ literal 0 HcmV?d00001 diff --git a/wyk/08_Neuronowy_ngramowy_model/tanh.png b/wyk/08_Neuronowy_ngramowy_model/tanh.png new file mode 100644 index 0000000000000000000000000000000000000000..9da75798a726b126e75357aae3da897c3232ab8b GIT binary patch literal 23989 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 \ No newline at end of file diff --git a/wyk/08_Neuronowy_ngramowy_model/trigram1.drawio.png b/wyk/08_Neuronowy_ngramowy_model/trigram1.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..13d6e9c5980bbf997103de124a97b8f4e573d2cf GIT binary patch literal 20473 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

  • I=^O-5yaD*;FO^D);u4^WEaP=I*fzImeq;uz6C zoiH=>a0eXR0zffU`neO?g+<#cAc;2}08I~b_|O5BM-#mZJNdCV)o7~;lE6iOXFIaN zBxh~3Kod~Fe{Y6463oiV`k$MfvK#}5H&uh;J&Hy)*+Db7W$qkvFzbqf6OfSjRYLGn z7#WZ7k5dD+zkEmIk3Risp2h+RTj{{;n#cr+)SGlS(0iXNN2wT;hDWO6)w?E*KB##q|tGw(aQqwA$Mp9Y^SG`z4LsNrU)&VZn~ z6zoUy;jl@eMPabHl4(r(%j<5jj0Y93o>l=kGir#`>`>_64g=3|a8q?%lobcrXrsYn z(*FF+fO?iL_~(j>lJ&i}=He%F0QQge_;3dS3Fj^F_l*f2y8WMXSK)wRTq33@6v6De- zw5Cg!?{>u-E`I)$-mA;=Zn2nO^2|#h44@lGEQ#(a z;{t_ipv(V?Lf}oMn%VcN$3#Tt;b6}JEDEGq_e`ahDljJs+`50NO8MK69JfBE+=Qrvwm!s=mF2j!eezKc2oRhwP}w&A#BYBY@il z>J^ms@1I!yKMZK4Is(3q;YHODjZ~0~k7Nwq5uED@ z7Ds`I1{Pyg%#I1L&&R&Yqh~G(`7*(+HL)3)nbXb_W9voX4az@8AM7DZIab)>z~PNW zUDia2|7L42rAxhz7OL=!lv_e691qz_nX?c}y`dZ!Tcj z=#3$k$#7P`$x2w8yAa-xa6ICX{Co#JsFQr^3~ufyQXODp1g-eKO7960wA} z`l*AAZyjJ?R@ZM~0-^RxUvuGTMX0f|%i8-KpBYpCm^murV^VmdtwGc_l`?mGchoGs z@=)G!hxhtM=XQhcWWZbyLg3qSbT2@~@m>+3(OlPPJqYsRxB~mH0Lyg*8<|eSBx)95 zUBc;~hSw{CfaV5Xw6(L|7$68K$uT<*xeU1sPDQ9o(J%{%#s8EB0vx_{=bv1P9VViF z8Z;QZ2a0qbX2En>{@Ge52H5?!YW#JOg7^TU^Z!=(f45;Vuzs`K|FOGP`U1duA2@x@ zZy}}*oGxJlww0Fv`N&Y9va^QaUC6m?tqmC#)pVb** zW&SPflgy%&r5UXUuKoM_Tl=A)AaJFM>f3U`Wx#1qt;9*!pOjlZ$p;=8B|7!CVp939 zFPUAPohL8<+_|;=`u~{@3dx$48-SY%UR_woe29Um4H#5B4~vf-HF_{bFLo9%hfS^M z-~f)r#)bM8bpY4ZtFNB_v|e(C*Ho>q{RJrvQ(ix@$@FL2vWH`)aR>Xk(+)?1l9t;p zIdR^?;Q$9P{R&p`?F?&iTP3wtYSMdu;2|O1t2&<4N9GGPPQ31#@<~ZAsP^Pnr359f zDAQ*GOB9QZ1vXxpb5Tyu>6whxHddekx`!kp)Ljgoa7O&g^uP5<*1E{!sB)9)Yf&Yy zPsMffrY*GI4 zM4!#dGLt|d$4h2z8B?d~GyN4mmiap5#$NF`E}SVkie3jh7v8OI)VOJTsP2oui<>b2 z&qytq+S0|GJ@4=9r#E#>k5N`q|F7Uv#}lUK`_p>bC0Q5EijSL%{eg=Y+|5ty>s)c7 zWFC*-&b8VnO)hOpJw0Vbr-E+eCY9^iO>g=Z?>_CXqgwZA>r0{P$jz7b&p&%n;Nc(G z3g#)oj5DPsDVsY^Dt_V_%Vzxcg8$3Lyce8L)Tar#{|(VilKk}}@+K2xzYBN`SsJjF zXU45@2fS%V8#F#)S+zkHH1C!JoKQ*G+;9lI*9X2yW?(h_sArkvX2&E@T*3eZp00i_ I>zopr0KG>e+W-In literal 0 HcmV?d00001