From 7b66c8c9dfc4af3aec147970857cf38fb8f3c4cd Mon Sep 17 00:00:00 2001 From: Filip Gralinski Date: Fri, 31 May 2024 10:22:06 +0200 Subject: [PATCH] =?UTF-8?q?up=20wyk=C5=82ady?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wyk/02_Jezyki.org | 7 +- wyk/08_Podobienstwo_slow.ipynb | 343 ++++++++++ wyk/08_Podobienstwo_slow/slowosiec.png | Bin 0 -> 78465 bytes wyk/08_Podobienstwo_slow/wilkins.png | Bin 0 -> 20252 bytes wyk/09_Zanurzenia_slow.ipynb | 647 ++++++++++++++++++ wyk/09_Zanurzenia_slow/bigram1.drawio | 1 + wyk/09_Zanurzenia_slow/bigram1.drawio.png | Bin 0 -> 19703 bytes wyk/09_Zanurzenia_slow/bigram2.drawio | 1 + wyk/09_Zanurzenia_slow/bigram2.drawio.png | Bin 0 -> 20720 bytes wyk/10_Neuronowy_ngramowy_model.ipynb | 369 ++++++++++ .../ngram-tgh.drawio | 1 + .../ngram-tgh.drawio.png | Bin 0 -> 25606 bytes wyk/10_Neuronowy_ngramowy_model/ngram.drawio | 1 + .../ngram.drawio.png | Bin 0 -> 18102 bytes wyk/10_Neuronowy_ngramowy_model/tanh.png | Bin 0 -> 9354 bytes .../trigram1.drawio | 1 + .../trigram1.drawio.png | Bin 0 -> 20473 bytes wyk/11_Worek_slow.ipynb | 414 +++++++++++ wyk/11_Worek_slow/bow1.drawio | 1 + wyk/11_Worek_slow/bow1.drawio.png | Bin 0 -> 23080 bytes wyk/11_Worek_slow/bow2.drawio | 1 + wyk/11_Worek_slow/bow2.drawio.png | Bin 0 -> 29747 bytes wyk/12_Rekurencyjny_model_jezyka.ipynb | 429 ++++++++++++ wyk/12_Rekurencyjny_model_jezyka/fold.png | Bin 0 -> 88384 bytes wyk/12_Rekurencyjny_model_jezyka/rnn.drawio | 1 + .../rnn.drawio.png | Bin 0 -> 31606 bytes wyk/13_Atencja.ipynb | 407 +++++++++++ wyk/13_Atencja/simple-attention.drawio | 1 + wyk/13_Atencja/simple-attention.drawio.png | Bin 0 -> 79930 bytes 29 files changed, 2623 insertions(+), 2 deletions(-) create mode 100644 wyk/08_Podobienstwo_slow.ipynb create mode 100644 wyk/08_Podobienstwo_slow/slowosiec.png create mode 100644 wyk/08_Podobienstwo_slow/wilkins.png create mode 100644 wyk/09_Zanurzenia_slow.ipynb create mode 100644 wyk/09_Zanurzenia_slow/bigram1.drawio create mode 100644 wyk/09_Zanurzenia_slow/bigram1.drawio.png create mode 100644 wyk/09_Zanurzenia_slow/bigram2.drawio create mode 100644 wyk/09_Zanurzenia_slow/bigram2.drawio.png create mode 100644 wyk/10_Neuronowy_ngramowy_model.ipynb create mode 100644 wyk/10_Neuronowy_ngramowy_model/ngram-tgh.drawio create mode 100644 wyk/10_Neuronowy_ngramowy_model/ngram-tgh.drawio.png create mode 100644 wyk/10_Neuronowy_ngramowy_model/ngram.drawio create mode 100644 wyk/10_Neuronowy_ngramowy_model/ngram.drawio.png create mode 100644 wyk/10_Neuronowy_ngramowy_model/tanh.png create mode 100644 wyk/10_Neuronowy_ngramowy_model/trigram1.drawio create mode 100644 wyk/10_Neuronowy_ngramowy_model/trigram1.drawio.png create mode 100644 wyk/11_Worek_slow.ipynb create mode 100644 wyk/11_Worek_slow/bow1.drawio create mode 100644 wyk/11_Worek_slow/bow1.drawio.png create mode 100644 wyk/11_Worek_slow/bow2.drawio create mode 100644 wyk/11_Worek_slow/bow2.drawio.png create mode 100644 wyk/12_Rekurencyjny_model_jezyka.ipynb create mode 100644 wyk/12_Rekurencyjny_model_jezyka/fold.png create mode 100644 wyk/12_Rekurencyjny_model_jezyka/rnn.drawio create mode 100644 wyk/12_Rekurencyjny_model_jezyka/rnn.drawio.png create mode 100644 wyk/13_Atencja.ipynb create mode 100644 wyk/13_Atencja/simple-attention.drawio create mode 100644 wyk/13_Atencja/simple-attention.drawio.png diff --git a/wyk/02_Jezyki.org b/wyk/02_Jezyki.org index 2d278ab..e0f79a8 100644 --- a/wyk/02_Jezyki.org +++ b/wyk/02_Jezyki.org @@ -9,16 +9,19 @@ Używać będziemy generatorów. *Pytanie* Dlaczego generatory zamiast list? -#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer +#+BEGIN_SRC python :session mysession :exports both :results raw drawer import requests url = 'https://wolnelektury.pl/media/book/txt/pan-tadeusz.txt' pan_tadeusz = requests.get(url).content.decode('utf-8') - pan_tadeusz[100:150] + pan_tadeusz[1000:1100] #+END_SRC #+RESULTS: +:results: +:end: + :results: Księga pierwsza diff --git a/wyk/08_Podobienstwo_slow.ipynb b/wyk/08_Podobienstwo_slow.ipynb new file mode 100644 index 0000000..5a3bd56 --- /dev/null +++ b/wyk/08_Podobienstwo_slow.ipynb @@ -0,0 +1,343 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Modelowanie języka

\n", + "

08. Podobieństwo słów [wykład]

\n", + "

Filip Graliński (2022)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Podobieństwo słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Słabości $n$-gramowych modeli języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Podstawowa słabość $n$-gramowych modeli języka polega na tym, że każde\n", + "słowo jest traktowane w izolacji. W, powiedzmy, bigramowym modelu\n", + "języka każda wartość $P(w_2|w_1)$ jest estymowana osobno, nawet dla —\n", + "w jakimś sensie podobnych słów. Na przykład:\n", + "\n", + "- $P(\\mathit{zaszczekał}|\\mathit{pies})$, $P(\\mathit{zaszczekał}|\\mathit{jamnik})$, $P(\\mathit{zaszczekał}|\\mathit{wilczur})$ są estymowane osobno,\n", + "- $P(\\mathit{zaszczekał}|\\mathit{pies})$, $P(\\mathit{zamerdał}|\\mathit{pies})$, $P(\\mathit{ugryzł}|\\mathit{pies})$ są estymowane osobno,\n", + "- dla każdej pary $u$, $v$, gdzie $u$ jest przyimkiem (np. *dla*), a $v$ — osobową formą czasownika (np. *napisał*) model musi się uczyć, że $P(v|u)$ powinno mieć bardzo niską wartość.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Podobieństwo słów jako sposób na słabości $n$-gramowych modeli języka?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Intuicyjnie wydaje się, że potrzebujemy jakiegoś sposobu określania podobieństwa słów, tak aby\n", + "w naturalny sposób, jeśli słowa $u$ i $u'$ oraz $v$ i $v'$ są bardzo podobne, wówczas\n", + "$P(u|v) \\approx P(u'|v')$.\n", + "\n", + "Można wskazać trzy sposoby określania podobieństwa słów: odległość\n", + "edycyjna Lewensztajna, hierarchie słów i odległość w przestrzeni wielowymiarowej.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Odległość Lewensztejna\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Słowo *dom* ma coś wspólnego z *domem*, *domkiem*, *domostwem*,\n", + " *domownikami*, *domowym* i *udomowieniem* (?? — tu już można mieć\n", + " wątpliwości). Więc może oprzeć podobieństwa na powierzchownym\n", + " podobieństwie?\n", + "\n", + "Możemy zastosować tutaj **odległość Lewensztejna**, czyli minimalną liczbę operacji edycyjnych, które\n", + "są potrzebne, aby przekształcić jedno słowo w drugie. Zazwyczaj jako elementarne operacje edycyjne\n", + "definiuje się:\n", + "\n", + "- usunięcie znaku,\n", + "- dodanie znaku,\n", + "- zamianu znaku.\n", + "\n", + "Na przykład odległość edycyjna między słowami *domkiem* i *domostwem*\n", + "wynosi 4: zamiana *k* na *o*, *i* na *s*, dodanie *t*, dodanie *w*.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4" + ] + } + ], + "source": [ + "import Levenshtein\n", + "Levenshtein.distance('domkiem', 'domostwem')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Niestety, to nie jest tak, że słowa są podobne wtedy i tylko wtedy, gdy *wyglądają* podobnie:\n", + "\n", + "- *tapet* nie ma nic wspólnego z *tapetą*,\n", + "- słowo *sowa* nie wygląda jak *ptak*, *puszczyk*, *jastrząb*, *kura* itd.\n", + "\n", + "Powierzchowne podobieństwo słów łączy się zazwyczaj z relacjami\n", + "**fleksyjnymi** i **słowotwórczymi** (choć też nie zawsze, por. np. pary\n", + "słów będące przykładem **supletywizmu**: *człowiek*-*ludzie*,\n", + "*brać*-*zwiąć*, *rok*-*lata*). A co z innymi własnościami wyrazów czy\n", + "raczej bytów przez nie denotowanych (słowa oznaczające zwierzęta\n", + "należące do gromady ptaków chcemy traktować jako, w jakiejś mierze przynajmnie, podobne)?\n", + "\n", + "Dodajmy jeszcze, że w miejsce odległości Lewensztejna warto czasami\n", + "używać podobieństwa Jaro-Winklera, które mniejszą wagę przywiązuje do zmian w końcówkach wyrazów:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.6626984126984127" + ] + } + ], + "source": [ + "import Levenshtein\n", + "Levenshtein.jaro_winkler('domu', 'domowy')\n", + "Levenshtein.jaro_winkler('domowy', 'maskowy')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Klasy i hierarchie słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Innym sposobem określania podobieństwa między słowami jest zdefiniowanie klas słów.\n", + "Słowa należące do jednej klasy będą podobne, do różnych klas — niepodobne.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Klasy gramatyczne\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Klasy mogą odpowiadać standardowym kategoriom gramatycznym znanym z\n", + "językoznawstwa, na przykład **częściom mowy** (rzeczownik, przymiotnik,\n", + "czasownik itd.). Wiele jest niejednoznacznych jeśli chodzi o kategorię części mowy:\n", + "\n", + "- *powieść* — rzeczownik czy czasownik?\n", + "- *komputerowi* — rzeczownik czy przymiotnik?\n", + "- *lecz* — spójnik, czasownik (!) czy rzeczownik (!!)?\n", + "\n", + "Oznacza to, że musimy dysponować narzędziem, które pozwala\n", + "automatycznie, na podstawie kontekstu, tagować tekst częściami mowy\n", + "(ang. *POS tagger*). Takie narzędzia pozwalają na osiągnięcie wysokiej\n", + "dokładności, niestety zawsze wprowadzają jakieś błędy, które mogą\n", + "propagować się dalej.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Klasy indukowane automatycznie\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zamiast z góry zakładać klasy wyrazów można zastosować metody uczenia\n", + "nienadzorowanego (podobne do analizy skupień) w celu **wyindukowanie**\n", + "automatycznie klas (tagów) z korpusu.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Użycie klas słów w modelu języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Najprostszy sposób uwzględnienia klas słów w $n$-gramowym modelowaniu\n", + "języka polega stworzeniu dwóch osobnych modeli:\n", + "\n", + "- tradycyjnego modelu języka $M_W$ operującego na słowach,\n", + "- modelu języka $M_T$ wyuczonego na klasach słów (czy to częściach\n", + " mowy, czy klasach wyindukowanych automatycznie).\n", + "\n", + "Zauważmy, że rząd modelu $M_T$ ($n_T$) może dużo większy niż rząd modelu $M_W$ ($n_W$) — klas będzie\n", + "dużo mniej niż wyrazów, więc problem rzadkości danych jest dużo mniejszy i można rozpatrywać dłuższe\n", + "$n$-gramy.\n", + "\n", + "Dwa modele możemy połączyć za pomocą prostej kombinacji liniowej sterowanej hiperparametrem $\\lambda$:\n", + "\n", + "$$P(w_i|w_{i-n_T}+1\\ldots w_{i-1}) = \\lambda P_{M_T}(w_i|w_{i-n_W}+1\\ldots w_{i-1}) + (1 - \\lambda) P_{M_W}(w_i|w_{i-n_T}+1\\ldots w_{i-1}).$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Hierarchie słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zamiast płaskiej klasyfikacji słów można zbudować hierarchię słów czy\n", + "pojęć. Taka hierarchia może dotyczyć właściwości gramatycznych\n", + "(na przykład rzeczownik w liczbie pojedynczej w dopełniaczu będzie podklasą\n", + "rzeczownika) lub własności denotowanych bytów.\n", + "\n", + "Niekiedy dość łatwo stworzyć hierarchie (taksonomię) pojęć. Na\n", + "przykład jamnik jest rodzajem psa (słowo *jamnik* jest **hiponimem**\n", + "słowa *pies*, zaś słowo *pies* hiperonimem słowa *jamnik*), pies —\n", + "ssaka, ssak — zwierzęcia, zwierzę — organizmu żywego, organizm — bytu\n", + "materialnego.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Analityczny język Johna Wilkinsa\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Już od dawna filozofowie myśleli o stworzenie języka uniwersalnego, w\n", + "którym hierarchia bytów jest ułożona w „naturalny” sposób.\n", + "\n", + "Przykładem jest angielski uczony John Wilkins (1614-1672). W dziele\n", + "*An Essay towards a Real Character and a Philosophical Language*\n", + "zaproponował on rozbudowaną hierarchię bytów.\n", + "\n", + "![img](./08_Podobienstwo_slow/wilkins.png \"Fragment dzieła Johna Wilkinsa\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Słowosieci\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Współczesnym odpowiednik hierarchii Wilkinsa są **słowosieci** (ang. /wordnets).\n", + "Przykłady:\n", + "\n", + "- dla języka polskiego: [Słowosieć](http://plwordnet.pwr.wroc.pl),\n", + "- dla języka angielskiego: [Princeton Wordnet](https://wordnet.princeton.edu/) (i Słowosieć!)\n", + "\n", + "![img](./08_Podobienstwo_slow/slowosiec.png \"Fragment Słowosieci\")\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + }, + "org": null + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/wyk/08_Podobienstwo_slow/slowosiec.png b/wyk/08_Podobienstwo_slow/slowosiec.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d44cc7cdc0332b771a72416a44a7acc1cc166e GIT binary patch literal 78465 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 I6N{k#2XxJ@F#rGn literal 0 HcmV?d00001 diff --git a/wyk/08_Podobienstwo_slow/wilkins.png b/wyk/08_Podobienstwo_slow/wilkins.png new file mode 100644 index 0000000000000000000000000000000000000000..2ddc63e2c70ee7487e6b8302f8b1112bbbc38666 GIT binary patch literal 20252 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≈Dz$1wt}u^i2ALzam|iMRQkYsRDpZ72L_YaOPK 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 literal 0 HcmV?d00001 diff --git a/wyk/09_Zanurzenia_slow.ipynb b/wyk/09_Zanurzenia_slow.ipynb new file mode 100644 index 0000000..aa9abcc --- /dev/null +++ b/wyk/09_Zanurzenia_slow.ipynb @@ -0,0 +1,647 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Modelowanie języka

\n", + "

09. Zanurzenia słów (Word2vec) [wykład]

\n", + "

Filip Graliński (2022)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zanurzenia słów (Word2vec)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "W praktyce stosowalność słowosieci okazała się zaskakująco\n", + "ograniczona. Większy przełom w przetwarzaniu języka naturalnego przyniosły\n", + "wielowymiarowe reprezentacje słów, inaczej: zanurzenia słów.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### „Wymiary” słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Moglibyśmy zanurzyć (ang. *embed*) w wielowymiarowej przestrzeni, tzn. zdefiniować odwzorowanie\n", + "$E \\colon V \\rightarrow \\mathcal{R}^m$ dla pewnego $m$ i określić taki sposób estymowania\n", + "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\n", + "(według jakiejś metryki odległości, na przykład zwykłej odległości euklidesowej):\n", + "\n", + "$$P(u|v) \\approx P(u'|v').$$\n", + "\n", + "$E(u)$ nazywamy zanurzeniem (embeddingiem) słowa.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wymiary określone z góry?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Można by sobie wyobrazić, że $m$ wymiarów mogłoby być z góry\n", + "określonych przez lingwistę. Wymiary te byłyby związane z typowymi\n", + "„osiami” rozpatrywanymi w językoznawstwie, na przykład:\n", + "\n", + "- czy słowo jest wulgarne, pospolite, potoczne, neutralne czy książkowe?\n", + "- czy słowo jest archaiczne, wychodzące z użycia czy jest neologizmem?\n", + "- czy słowo dotyczy kobiet, czy mężczyzn (w sensie rodzaju gramatycznego i/lub\n", + " socjolingwistycznym)?\n", + "- czy słowo jest w liczbie pojedynczej czy mnogiej?\n", + "- czy słowo jest rzeczownikiem czy czasownikiem?\n", + "- czy słowo jest rdzennym słowem czy zapożyczeniem?\n", + "- czy słowo jest nazwą czy słowem pospolitym?\n", + "- czy słowo opisuje konkretną rzecz czy pojęcie abstrakcyjne?\n", + "- …\n", + "\n", + "W praktyce okazało się jednak, że lepiej, żeby komputer uczył się sam\n", + "możliwych wymiarów — z góry określamy tylko $m$ (liczbę wymiarów).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Bigramowy model języka oparty na zanurzeniach\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zbudujemy teraz najprostszy model język oparty na zanurzeniach. Będzie to właściwie najprostszy\n", + "**neuronowy model języka**, jako że zbudowany model można traktować jako prostą sieć neuronową.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Słownik\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "W typowym neuronowym modelu języka rozmiar słownika musi być z góry\n", + "ograniczony. Zazwyczaj jest to liczba rzędu kilkudziesięciu wyrazów —\n", + "po prostu będziemy rozpatrywać $|V|$ najczęstszych wyrazów, pozostałe zamienimy\n", + "na specjalny token `` reprezentujący nieznany (*unknown*) wyraz.\n", + "\n", + "Aby utworzyć taki słownik, użyjemy gotowej klasy `Vocab` z pakietu torchtext:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10518" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from itertools import islice\n", + "import regex as re\n", + "import sys\n", + "from torchtext.vocab import build_vocab_from_iterator\n", + "\n", + "\n", + "def get_words_from_line(line):\n", + " line = line.rstrip()\n", + " yield ''\n", + " for m in re.finditer(r'[\\p{L}0-9\\*]+|\\p{P}+', line):\n", + " yield m.group(0).lower()\n", + " yield ''\n", + "\n", + "\n", + "def get_word_lines_from_file(file_name):\n", + " with open(file_name, 'r') as fh:\n", + " for line in fh:\n", + " yield get_words_from_line(line)\n", + "\n", + "vocab_size = 20000\n", + "\n", + "vocab = build_vocab_from_iterator(\n", + " get_word_lines_from_file('/home/filipg/in.txt'),\n", + " max_tokens = vocab_size,\n", + " specials = [''])\n", + "\n", + "vocab['jest']" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['', 'the', ',', 'that', 'dividual']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vocab.lookup_tokens([0, 1, 2, 10, 12345])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Definicja sieci\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Naszą prostą sieć neuronową zaimplementujemy używając frameworku PyTorch.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/filipg/.local/lib/python3.10/site-packages/torch/nn/modules/container.py:217: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n", + " input = module(input)\n" + ] + }, + { + "data": { + "text/plain": [ + "tensor(2.9242e-05, grad_fn=)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torch import nn\n", + "import torch\n", + "\n", + "embed_size = 100\n", + "\n", + "class SimpleBigramNeuralLanguageModel(nn.Module):\n", + " def __init__(self, vocabulary_size, embedding_size):\n", + " super(SimpleBigramNeuralLanguageModel, self).__init__()\n", + " self.model = nn.Sequential(\n", + " nn.Embedding(vocabulary_size, embedding_size),\n", + " nn.Linear(embedding_size, vocabulary_size),\n", + " nn.Softmax()\n", + " )\n", + "\n", + " def forward(self, x):\n", + " return self.model(x)\n", + "\n", + "model = SimpleBigramNeuralLanguageModel(vocab_size, embed_size)\n", + "\n", + "vocab.set_default_index(vocab[''])\n", + "ixs = torch.tensor(vocab.forward(['dog']))\n", + "out = model(ixs)\n", + "out[0][vocab['jest']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Teraz wyuczmy model. Wpierw tylko potasujmy nasz plik:\n", + "\n", + " shuf < opensubtitlesA.pl.txt > opensubtitlesA.pl.shuf.txt\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from torch.utils.data import IterableDataset\n", + "import itertools\n", + "\n", + "def look_ahead_iterator(gen):\n", + " prev = None\n", + " for item in gen:\n", + " if prev is not None:\n", + " yield (prev, item)\n", + " prev = item\n", + "\n", + "class Bigrams(IterableDataset):\n", + " def __init__(self, text_file, vocabulary_size):\n", + " self.vocab = build_vocab_from_iterator(\n", + " get_word_lines_from_file(text_file),\n", + " max_tokens = vocabulary_size,\n", + " specials = [''])\n", + " self.vocab.set_default_index(self.vocab[''])\n", + " self.vocabulary_size = vocabulary_size\n", + " self.text_file = text_file\n", + "\n", + " def __iter__(self):\n", + " return look_ahead_iterator(\n", + " (self.vocab[t] for t in itertools.chain.from_iterable(get_word_lines_from_file(self.text_file))))\n", + "\n", + "train_dataset = Bigrams('/home/filipg/in.txt', vocab_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(19, 236)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torch.utils.data import DataLoader\n", + "\n", + "next(iter(train_dataset))" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[tensor([ 2, 5, 51, 3481, 231]), tensor([ 5, 51, 3481, 231, 4])]" + ] + } + ], + "source": [ + "from torch.utils.data import DataLoader\n", + "\n", + "next(iter(DataLoader(train_dataset, batch_size=5)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 tensor(10.1095, device='cuda:0', grad_fn=)\n", + "100 tensor(8.4894, device='cuda:0', grad_fn=)\n", + "200 tensor(7.6437, device='cuda:0', grad_fn=)\n", + "300 tensor(7.0887, device='cuda:0', grad_fn=)\n", + "400 tensor(6.7963, device='cuda:0', grad_fn=)\n", + "500 tensor(6.3892, device='cuda:0', grad_fn=)\n", + "600 tensor(6.1413, device='cuda:0', grad_fn=)\n", + "700 tensor(6.1875, device='cuda:0', grad_fn=)\n", + "800 tensor(6.1369, device='cuda:0', grad_fn=)\n", + "900 tensor(5.9865, device='cuda:0', grad_fn=)\n", + "1000 tensor(5.9185, device='cuda:0', grad_fn=)\n", + "1100 tensor(5.9149, device='cuda:0', grad_fn=)\n", + "1200 tensor(5.8374, device='cuda:0', grad_fn=)\n", + "1300 tensor(5.7507, device='cuda:0', grad_fn=)\n", + "1400 tensor(5.7998, device='cuda:0', grad_fn=)\n", + "1500 tensor(5.7555, device='cuda:0', grad_fn=)\n", + "1600 tensor(5.7237, device='cuda:0', grad_fn=)\n", + "1700 tensor(5.6886, device='cuda:0', grad_fn=)\n", + "1800 tensor(5.7297, device='cuda:0', grad_fn=)\n", + "1900 tensor(5.7816, device='cuda:0', grad_fn=)\n", + "2000 tensor(5.7083, device='cuda:0', grad_fn=)\n", + "2100 tensor(5.7132, device='cuda:0', grad_fn=)\n", + "2200 tensor(5.8103, device='cuda:0', grad_fn=)\n", + "2300 tensor(5.7318, device='cuda:0', grad_fn=)\n", + "2400 tensor(5.6933, device='cuda:0', grad_fn=)\n", + "2500 tensor(5.5518, device='cuda:0', grad_fn=)\n", + "2600 tensor(5.5967, device='cuda:0', grad_fn=)\n", + "2700 tensor(5.7234, device='cuda:0', grad_fn=)\n", + "2800 tensor(5.5497, device='cuda:0', grad_fn=)\n", + "2900 tensor(5.6449, device='cuda:0', grad_fn=)\n", + "3000 tensor(5.6020, device='cuda:0', grad_fn=)\n", + "3100 tensor(5.6002, device='cuda:0', grad_fn=)\n", + "3200 tensor(5.5400, device='cuda:0', grad_fn=)\n", + "3300 tensor(5.5242, device='cuda:0', grad_fn=)\n", + "3400 tensor(5.6654, device='cuda:0', grad_fn=)\n", + "3500 tensor(5.7363, device='cuda:0', grad_fn=)\n", + "3600 tensor(5.4690, device='cuda:0', grad_fn=)\n", + "3700 tensor(5.6095, device='cuda:0', grad_fn=)\n", + "3800 tensor(5.6472, device='cuda:0', grad_fn=)\n" + ] + } + ], + "source": [ + "device = 'cuda'\n", + "model = SimpleBigramNeuralLanguageModel(vocab_size, embed_size).to(device)\n", + "data = DataLoader(train_dataset, batch_size=5000)\n", + "optimizer = torch.optim.Adam(model.parameters())\n", + "criterion = torch.nn.NLLLoss()\n", + "\n", + "model.train()\n", + "step = 0\n", + "for x, y in data:\n", + " x = x.to(device)\n", + " y = y.to(device)\n", + " optimizer.zero_grad()\n", + " ypredicted = model(x)\n", + " loss = criterion(torch.log(ypredicted), y)\n", + " if step % 100 == 0:\n", + " print(step, loss)\n", + " step += 1\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + "torch.save(model.state_dict(), 'model1.bin')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Policzmy najbardziej prawdopodobne kontynuacje dla zadanego słowa:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[('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)]" + ] + } + ], + "source": [ + "device = 'cuda'\n", + "model = SimpleBigramNeuralLanguageModel(vocab_size, embed_size).to(device)\n", + "model.load_state_dict(torch.load('model1.bin'))\n", + "model.eval()\n", + "\n", + "ixs = torch.tensor(vocab.forward(['dla'])).to(device)\n", + "\n", + "out = model(ixs)\n", + "top = torch.topk(out[0], 10)\n", + "top_indices = top.indices.tolist()\n", + "top_probs = top.values.tolist()\n", + "top_words = vocab.lookup_tokens(top_indices)\n", + "list(zip(top_words, top_indices, top_probs))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Teraz zbadajmy najbardziej podobne zanurzenia dla zadanego słowa:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[('.', 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)]" + ] + } + ], + "source": [ + "vocab = train_dataset.vocab\n", + "ixs = torch.tensor(vocab.forward(['kłopot'])).to(device)\n", + "\n", + "out = model(ixs)\n", + "top = torch.topk(out[0], 10)\n", + "top_indices = top.indices.tolist()\n", + "top_probs = top.values.tolist()\n", + "top_words = vocab.lookup_tokens(top_indices)\n", + "list(zip(top_words, top_indices, top_probs))" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[('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)]" + ] + } + ], + "source": [ + "cos = nn.CosineSimilarity(dim=1, eps=1e-6)\n", + "\n", + "embeddings = model.model[0].weight\n", + "\n", + "vec = embeddings[vocab['poszedł']]\n", + "\n", + "similarities = cos(vec, embeddings)\n", + "\n", + "top = torch.topk(similarities, 10)\n", + "\n", + "top_indices = top.indices.tolist()\n", + "top_probs = top.values.tolist()\n", + "top_words = vocab.lookup_tokens(top_indices)\n", + "list(zip(top_words, top_indices, top_probs))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Zapis przy użyciu wzoru matematycznego\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Powyżej zaprogramowaną sieć neuronową można opisać następującym wzorem:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(CE(w_{i-1}),$$\n", + "\n", + "gdzie:\n", + "\n", + "- $w_{i-1}$ to pierwszy wyraz w bigramie (poprzedzający wyraz),\n", + "- $E(w)$ to zanurzenie (embedding) wyrazy $w$ — wektor o rozmiarze $m$,\n", + "- $C$ to macierz o rozmiarze $|V| \\times m$, która rzutuje wektor zanurzenia w wektor o rozmiarze słownika,\n", + "- $\\vec{y}$ to wyjściowy wektor prawdopodobieństw o rozmiarze $|V|$.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Hiperparametry\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zauważmy, że nasz model ma dwa hiperparametry:\n", + "\n", + "- $m$ — rozmiar zanurzenia,\n", + "- $|V|$ — rozmiar słownika, jeśli zakładamy, że możemy sterować\n", + " rozmiarem słownika (np. przez obcinanie słownika do zadanej liczby\n", + " najczęstszych wyrazów i zamiany pozostałych na specjalny token, powiedzmy, ``.\n", + "\n", + "Oczywiście możemy próbować manipulować wartościami $m$ i $|V|$ w celu\n", + "polepszenia wyników naszego modelu.\n", + "\n", + "**Pytanie**: dlaczego nie ma sensu wartość $m \\approx |V|$ ? dlaczego nie ma sensu wartość $m = 1$?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Diagram sieci\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jako że mnożenie przez macierz ($C$) oznacza po prostu zastosowanie\n", + "warstwy liniowej, naszą sieć możemy interpretować jako jednowarstwową\n", + "sieć neuronową, co można zilustrować za pomocą następującego diagramu:\n", + "\n", + "![img](./09_Zanurzenia_slow/bigram1.drawio.png \"Diagram prostego bigramowego neuronowego modelu języka\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Zanurzenie jako mnożenie przez macierz\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Uzyskanie zanurzenia ($E(w)$) zazwyczaj realizowane jest na zasadzie\n", + "odpytania (look-up\\_). Co ciekawe, zanurzenie można intepretować jako\n", + "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\n", + "wektora z gorącą jedynką (one-hot encoding\\_), tzn. słowo $w$ zostanie\n", + "podane na wejściu jako wektor $\\vec{1_V}(w) = [0,\\ldots,0,1,0\\ldots,0]$ o rozmiarze $|V|$\n", + "złożony z samych zer z wyjątkiem jedynki na pozycji odpowiadającej indeksowi wyrazu $w$ w słowniku $V$.\n", + "\n", + "Wówczas wzór przyjmie postać:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(CE\\vec{1_V}(w_{i-1})),$$\n", + "\n", + "gdzie $E$ będzie tym razem macierzą $m \\times |V|$.\n", + "\n", + "**Pytanie**: czy $\\vec{1_V}(w)$ intepretujemy jako wektor wierszowy czy kolumnowy?\n", + "\n", + "W postaci diagramu można tę interpretację zilustrować w następujący sposób:\n", + "\n", + "![img](./09_Zanurzenia_slow/bigram2.drawio.png \"Diagram prostego bigramowego neuronowego modelu języka z wejściem w postaci one-hot\")\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + }, + "org": null + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/wyk/09_Zanurzenia_slow/bigram1.drawio b/wyk/09_Zanurzenia_slow/bigram1.drawio new file mode 100644 index 0000000..094bc2b --- /dev/null +++ b/wyk/09_Zanurzenia_slow/bigram1.drawio @@ -0,0 +1 @@ +5VhNc9owEP01PiaDZGPMsZgk7UwymTYzbXPqKEixVWSvK0Rs8usr2TJGmDB0moYkvRjt04e1+96yLJ4fZ9WFJEV6BZQJDw9o5flTD+NxgPTTAKsGQOE4aJBEcmqxDrjhj8yCA4suOWULZ6ECEIoXLjiDPGcz5WBESijdZfcg3LcWJGE94GZGRB/9xqlKGzTCow7/yHiStm/WDjYzGWkX2yMWKaFQNlDtnH/m+bEEUM0oq2ImTPDauDQROH9idn0xyXJ1yIbP11fl9cV8fnH5Kf/y6zxRKLo8sW4s1Kp1mFHtvzVBqhQSyIk469CJhGVOmTl1oK1uzSVAoUGkwZ9MqZUlkywVaChVmbCzrOLqu9l+OrTWrT3MjKfVprGyRnNPc7kn3W/jDEs5Y3t8xlZGRCZM7VkXrknS6maQMSVXep9kgij+4N6DWJkl63UdE3pgyfgDYuwlH4hY2jf1mOp4MEEtU67YTUFq10udjG7M7XFMKlbtj2DfY7vBD21O2lzGgbXLLjGQb7F0Iyla7NmDNHwr6tURlquNTca8bc8zRrettv6B6v0DVY+PqXp/h+pDoa87ofxBDxNVB0WXkKD84Y0m/AR5o2kDtCv1i53FWwrR+lcuoQslYc5iECA1kkNuZHLPhdiCiOBJrs2Zjj3T+MRkE9el4oOdyDiltcZ25aKru+dIx/HQSUcf99MxfMlsHL+VbHzGrAoPzKromFkVvr5agpErXjTsizfAL6leFLwV+b6CYhIdKHvkH1P30evX/fFlP3iy5PK2hgqA+cmy2Ciw/P2X1zUN7a/d6MjlFaEeUyWRC1USDQqeczCjd0uHv0XHYEfzMXhRPvot2gLuVUaqd8wCcllAx2fhoJZBwuPci4dehAk1DktSUijgjrMaDWwWUWGec2LASUxZAp75FmjaDW7Gw5jn+vPr/pZjR8vSQHdyG/lfuhU8Gp26pW9deja0g9ue5i+1o83uj7V6buPvSf/sNw== \ No newline at end of file diff --git a/wyk/09_Zanurzenia_slow/bigram1.drawio.png b/wyk/09_Zanurzenia_slow/bigram1.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5661a76a6dd3f1c175a349aa0b5b1743c07831 GIT binary patch literal 19703 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 R1|Dd};OXk;vd$@?2>=mGv9ACC literal 0 HcmV?d00001 diff --git a/wyk/09_Zanurzenia_slow/bigram2.drawio b/wyk/09_Zanurzenia_slow/bigram2.drawio new file mode 100644 index 0000000..1e5eb9b --- /dev/null +++ b/wyk/09_Zanurzenia_slow/bigram2.drawio @@ -0,0 +1 @@ +5Vlbc+IgFP41mdl90Akk3h7XaN2d6WV3O7NtnzpUaELF4CIa7a9fSIgRE7v2Zm37oHK+AIHzfYcD6HjBeDEQaBKdcEyYA128cLyeA2HHB+pbA8sMAM2OnyGhoNhgBXBO74kBXYPOKCZTq6LknEk6scEhj2MylBaGhOCJXe2WM/utExSSEnA+RKyMXlAsowxtw1aBfyc0jPI3qwlmT8Yor2y6mEYI8ySD0sl5fccLBOcyK40XAWHaeblfMg8cbXm6GpggsdylAYbXtX7v+uLmQpyC+PTyTgS0Bs3Y5DKfMMFq/sbkQkY85DFi/QLtCj6LMdG9usoq6hxzPlEgUOAdkXJpyEQzyRUUyTEzT8mCykvdvN4w1pXpTJd7i3VjaYxsnHpwW6ef+5nPxNDU+nV2kpwNRqPB8Y/499+jUIL2cTZn46MB4WMixVK1E4QhSed2/8jIJ1zVWzX9yal6M3SN1H3YyJoYpXuua3chkQiJNK0KnlRhbRgFlLJXzeT2WUF3jtiMrOQQbH5ABbbPT72eFTZEV0hK6yOJqCTnE5SymKh1xZbPVubnREiyWIPKJJuneaysyGoZOyli3M+XoGgtvj13uy4sRh9LX+O9BKJyuliuNdLmVd6fNopmqWUH8FPi1TPLfho//4+AjTXiGYH+LEK9Ujw6sMnU+LuYzlUxlKlTVDb0k2un1aU14LR6GZDXVC+2Km8oRIld2oROpeAjEnDGhUJiHmuZ3FLGNiDEaBgrc6jIIArv6tChKut9Mw/GFONUY1WxaOvuBcLR69hrp98oh2Nzn9HYeS/R+PSoau4YVe2DiqpmRVS9dS4BtnhBhXh9uE/1Av+9yHf/yaS9o+yBd1C6bx++7t9e9u7WlEvzHKrSXy1SJ64iwdKPn179jd3uamf7VukVgBJTCRJTmSAFMhpTnpa+BF8/MCmeTQp0y6QAb6+slI+QU34rx2jxgVkANgugigV3ryzsdHAQ/H7kBA2nDRHWPhAowXzCbyhJUd/EEmb6e4Q02A0wCbmj14Ls0EF1uRHQWP3+efjgUXFwyaAbsYl8ljMLbLXqdgKsVSyrMD/ZvLR2Km/zPsklwmNvASt9teutQnNP276HBvnC276SyCs8uP2s7tmqX+0c1lfM9iutmJVO8nfbTPQPezPxLFI2d3gefL3NhDKLPy2y2+virx+v/w8= \ No newline at end of file diff --git a/wyk/09_Zanurzenia_slow/bigram2.drawio.png b/wyk/09_Zanurzenia_slow/bigram2.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..ba970f02d9a0b88d11bcc88d6d85da749cbf97fe GIT binary patch literal 20720 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 TE!SZc0}yz+`njxgN@xNATeteK literal 0 HcmV?d00001 diff --git a/wyk/10_Neuronowy_ngramowy_model.ipynb b/wyk/10_Neuronowy_ngramowy_model.ipynb new file mode 100644 index 0000000..c9416d6 --- /dev/null +++ b/wyk/10_Neuronowy_ngramowy_model.ipynb @@ -0,0 +1,369 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Modelowanie języka

\n", + "

10. Neuronowy n-gramowy model języka [wykład]

\n", + "

Filip Graliński (2022)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Neuronowy n-gramowy model języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Omówiony w poprzedniej części neuronowy bigramowy model języka\n", + "warunkuje kolejny wyraz jedynie względem bezpośrednio poprzedzającego\n", + "— jak w każdym bigramowym modelu przyjmujemy założenie, że $w_i$\n", + "zależy tylko od $w_{i-1}$. Rzecz jasna jest to bardzo duże\n", + "ograniczenie, w rzeczywistości bardzo często prawdopodobieństwo\n", + "kolejnego wyrazu zależy od wyrazu dwie, trzy, cztery itd. pozycje\n", + "wstecz czy w ogólności od wszystkich wyrazów poprzedzających (bez\n", + "względu na ich pozycje).\n", + "\n", + "**Pytanie**: Wskaż zależności o zasięgu większym niż 1 wyraz w zdaniu\n", + "/Zatopieni w kłębach dymu cygar i pochyleni nad butelkami z ciemnego\n", + "szkła obywatele tej dzielnicy, jedni zakładali się o wygranę lub\n", + "przegranę Anglii, drudzy o bankructwo Wokulskiego; jedni nazywali\n", + "geniuszem Bismarcka, drudzy — awanturnikiem Wokulskiego; jedni\n", + "krytykowali postępowanie prezydenta MacMahona, inni twierdzili, że\n", + "Wokulski jest zdecydowanym wariatem, jeżeli nie czymś gorszym…/\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Trigramowy neuronowy model języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Spróbujmy najpierw rozszerzyć nasz model na trigramy, to znaczy\n", + "będziemy przewidywać słowo $w_i$ na podstawie słów $w_{i-2}$ i\n", + "$w_{i-1}$.\n", + "\n", + "Najprostsze rozwiązanie polegałoby na zanurzeniu pary $(w_{i-2},\n", + "w_{i-1})$ w całości i postępowaniu jak w przypadku modelu bigramowego.\n", + "Byłoby to jednak zupełnie niepraktyczne, jako że:\n", + "\n", + "- liczba zanurzeń do wyuczenia byłaby olbrzymia ($|V|^2$ — byłoby to\n", + " ewentualnie akceptowalne dla modeli operujących na krótszych\n", + " jednostkach niż słowa, np. na znakach),\n", + "- w szczególności zanurzenia dla par $(v, u)$, $(u, v)$, $(u, u)$ i\n", + " $(v, v)$ nie miałyby ze sobą nic wspólnego.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Konketanacja zanurzeń\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Właściwsze rozwiązanie polega na zanurzeniu dalej pojedynczych słów i\n", + "następnie ich **konkatenowaniu**.\n", + "\n", + "Przypomnijmy, że konkatenacja wektorów $\\vec{x_1}$ i $\\vec{x_2}$ to wektor o rozmiarze\n", + "$|\\vec{x_1}| + |\\vec{x_2}|$ powstały ze „sklejania” wektorów $\\vec{x_1}$ i $\\vec{x_2}$.\n", + "Konkatenację wektorów $\\vec{x_1}$ i $\\vec{x_2}$ będziemy oznaczać za pomocą $[\\vec{x_1}, \\vec{x_2}]$.\n", + "\n", + "Przykład: jeśli $\\vec{x_1} = [-1, 2, 0]$ i $\\vec{x_2} = [3, -3]$,\n", + "wówczas $[\\vec{x_1}, \\vec{x_2}] = [-1, 2, 0, 3, -3]$\n", + "\n", + "Oznacza to, że nasza macierz „kontekstowa” $C$ powinna mieć w modelu trigramowym rozmiar nie\n", + "$|V| \\times m$, lecz $|V| \\times (m+m)$ = $|V| \\times 2m$ i wyjście będzie zdefiniowane za pomocą wzoru:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(C[E(w_{i-2}),E(w_{i-1})]),$$\n", + "\n", + "co można przedstawić za pomocą następującego schematu:\n", + "\n", + "![img](./10_Neuronowy_ngramowy_model/trigram1.drawio.png \"Diagram prostego bigramowego neuronowego modelu języka\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Rozbicie macierzy $C$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zamiast mnożyć macierz $C$ przez konkatenację dwóch wektorów, można\n", + "rozbić macierz $C$ na dwie, powiedzmy $C_{-2}$ i $C_{-1}$, przemnażać\n", + "je osobno przez odpowiadające im wektory i następnie **dodać** macierze,\n", + "tak aby:\n", + "\n", + "$$C[E(w_{i-2}),E(w_{i-1})] = C_{-2}E(w_{i-2}) + C_{-1}E(w_{i-1}).$$\n", + "\n", + "Macierze $C_{-2}$ i $C_{-1}$ będą miały rozmiar $|V| \\times m$.\n", + "\n", + "Przy tym podejściu możemy powiedzieć, że ostatni i przedostatni wyraz\n", + "mają swoje osobne macierze o potencjalnie różnych wagach — co ma sens,\n", + "jako że na inne aspekty zwracamy uwagę przewidując kolejne słowo na\n", + "podstawie wyrazu bezpośrednio poprzedzającego, a na inne — na\n", + "podstawie słowa występującego dwie pozycje wcześniej.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Uogólnienie na $n$-gramowy model języka dla dowolnego $n$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Łatwo uogólnić opisany wyżej trigramowy model języka dla dowolnego $n$.\n", + "Uogólniony model można przedstawić za pomocą wzoru:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(C[E(w_{i-n+1}),\\dots,E(w_{i-1})]),$$\n", + "\n", + "gdzie macierz $C$ ma rozmiar $|V| \\times nm$ lub za pomocą wzoru:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(C_{-(n-1)}E(w_{i-n+1}) + \\dots + C_{-1}E(w_{i-1}),$$\n", + "\n", + "gdzie macierze $C_{-(n-1)}$, …, $C_{-1}$ mają rozmiary $|V| \\times m$.\n", + "\n", + "Por. diagram:\n", + "\n", + "![img](./10_Neuronowy_ngramowy_model/ngram.drawio.png \"Diagram prostego n-gramowego neuronowego modelu języka\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dodanie kolejnej warstwy\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "W wypadku trigramowego czy — ogólniej — n-gramowego modelu języka dla\n", + "$n \\geq 3$ warto dodać kolejną (**ukrytą**) warstwę, na którą będziemy rzutować\n", + "skonkatenowane embeddingi, zanim zrzutujemy je do długiego wektora\n", + "prawdopodobieństw.\n", + "\n", + "Zakładamy, że warstwa ukryta zawiera $h$ neuronów. Wartość $h$ powinna być mniejsza\n", + "niż $nm$ (a może nawet od $m$).\n", + "\n", + "**Pytanie**: Dlaczego wartość $h > nm$ nie jest racjonalnym wyborem?\n", + "\n", + "**Pytanie**: Dlaczego dodanie kolejnej warstwy nie ma sensu dla modelu bigramowego?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Funkcja aktywacji\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aby warstwa ukryta wnosiła coś nowego, na wyjściu z tej funkcji musimy (dlaczego?)\n", + "zastosować nieliniową **funkcji aktywacji**. Zazwyczaj jako funkcji\n", + "aktywacji w sieciach neuronowych używa się funkcji ReLU albo funkcji\n", + "sigmoidalnej. W prostych neuronowych modelach języka sprawdza się też\n", + "**tangens hiperboliczny** (tgh, w literaturze anglojęzycznej tanh):\n", + "\n", + "$$\\operatorname{tgh}(x) = \\frac{e^x - e^{-x}}{e^x + e^{-x}}.$$\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import torch.nn as nn\n", + "\n", + "x = torch.linspace(-5,5,100)\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"y\")\n", + "a = torch.Tensor(x.size()[0]).fill_(2.)\n", + "m = torch.stack([x, a])\n", + "plt.plot(x, nn.functional.tanh(m)[0])\n", + "fname = '10_Neuronowy_ngramowy_model/tanh.png'\n", + "plt.savefig(fname)\n", + "fname" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Tangens hiperboliczny zastosowany dla wektora\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tangens hiperboliczny wektora będzie po prostu wektorem tangensów\n", + "hiperbolicznych poszczególnych wartości.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "\n", + "v = torch.Tensor([-100, -2.0, 0.0, 0.5, 1000.0])\n", + "nn.functional.tanh(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[[tensor](tensor)([-1.0000, -0.9640, 0.0000, 0.4621, 1.0000])]]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wzór i schemat dwuwarstwowego n-gramowego neuronowego modelu języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Dwuwarstwowy model języka będzie określony następującym wzorem:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(C\\operatorname{tgh}(W[E(w_{i-n+1}),\\dots,E(w_{i-1})])),$$\n", + "\n", + "gdzie:\n", + "\n", + "- $W$ jest wyuczalną macierzą wag o rozmiarze $h \\times nm$,\n", + "- $C$ będzie macierzą o rozmiarze $|V| \\times h$.\n", + "\n", + "Zmodyfikowaną sieć można przedstawić za pomocą następującego schematu:\n", + "\n", + "![img](./10_Neuronowy_ngramowy_model/ngram-tgh.drawio.png \"Dwuwarstwowy n-gramowy neuronowy model języka\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Liczba wag w modelu dwuwarstwowym\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Na wagi w modelu dwuwarstwowym składają się:\n", + "\n", + "- zanurzenia: $m|V|$,\n", + "- wagi warstwy ukrytej: $hnm$,\n", + "- wagi warstwy wyjściowej: $|V|h$,\n", + "\n", + "a zatem łącznie:\n", + "\n", + "$$m|V| + hnm + |V|h$$\n", + "\n", + "Jeśli $h \\approx m$ (co jest realistyczną opcją), wówczas otrzymamy oszacowanie:\n", + "\n", + "$$O(m|V| + nm^2).$$\n", + "\n", + "Zauważmy, że względem $n$ oznacza to bardzo korzystną złożoność\n", + "$O(n)$! Oznacza to, że nasz model może działać dla dużo większych\n", + "wartości $n$ niż tradycyjny, statystyczny n-gramowy model języka (dla którego\n", + "wartości $n > 5$ zazwyczaj nie mają sensu).\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + }, + "org": null + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/wyk/10_Neuronowy_ngramowy_model/ngram-tgh.drawio b/wyk/10_Neuronowy_ngramowy_model/ngram-tgh.drawio new file mode 100644 index 0000000..099793b --- /dev/null +++ b/wyk/10_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/10_Neuronowy_ngramowy_model/ngram-tgh.drawio.png b/wyk/10_Neuronowy_ngramowy_model/ngram-tgh.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..c5407b2399e4792cf514ffa8279a743907b0e94c GIT binary patch literal 25606 zcmeFZ2{e`M+c(T^m#vhIBo($PQZi4Owt1d5+dO2p&C@n)kzI-gb0x`Ch7gijL>i6 zU?&X?&2AlSbpj0y?J^Aw$`G>yj+B*VouHwiO9|Gn4E70gBYC^h@Jp!u{*7N;)Wa_* zm|sGjUtHYL-~YG^$zW&T8mW;(h}iFILR1C-H5NF&)Qh2P#@ye@St>|U(^yi>Sk2lq z%)m0#LY3kqZ6O&hVP-;+aE6&sbiq3NupqGx4jMAp?d^|02H3=X!? z_w%w+_qPbrG^BX?in{BHIjj14co~QWntF$uy8CK7nu|*MdHJXj0z-Y=B`JhJJsELR z4R1Ly0zoT4%|cRJRNK@$L|We@Ovab!E+=ZrFRtk&7V53(9HPZ+ZRkuC z^&n{*ItOc0DCXXBq3|?*VWz&mu0BCwG9(R8Q8n+da8(tnz(A6uM3}d_T5y9x6@>bJJ9D4>j@%R?}5;4pTP` z(Xk4m5Zp}swPk($d_2{pybP>mO|Q;|~D3v={P zC+W&*8Ne8gja-nS>V&`#aeq;j@Gy57a~W@UFI_Wz%`h`3Kb4>$BTX?~Jy&N@GwlE( zQP0{-%|ukgI#5+7+|f(NN=Jhr>Fej|ZbmXSa91apnOLYAOS|iPg@tMv_VwBeM6j_y=90Jf#z=7uCAd* zvWB8^#?ZBajGmtkSzk}X&rchg)ieMcl~O zFi6wVJk-e3ILJklqOJnxRERqIDpsmarrz2z>e8Ct0Rghke!9l`a7s(V-$PU-m_Sew zlM0jY)pWP8bdq+}M5anx%Gy%G+%Lf2+F4FVR7}^^#WYAo#f_w6>P_&M@s=bSX&M`- zN~n7oxoWssz+l1JsmjQDglfaT$Wn8Jzeak<0MtwjgTpL+N!kV)VbbC5F2SZ0OLt$` zRjL7Q$khhkUSe{p$ZcT+J?}s#F)a-fSx3X5Fp4w9BEXgGC~9S@Z{kD@C+fmQ@F$pL zCK;;g;cOmkZW3Uo@8;&Lt3h;f5)UB0=-m}VGJ+b_U6)W}H6Lew$P$K2D} zTE@jiLfT4Sn+VoUHOLrwm$F9iBfv~N)EYLaiKV!=L9nZuYe1;9o1v(WrI?XHuv4g6 zn74bdsiC8rmNwa4ODn|5jbse_NYhBvPh3hSfT*o$5hSOlWvU+>7G@wFW*!vcu<(>Nyf9+J4S@-kQjrWRiq|3(-kbOG+vvL`C1tLrqfJN=Dq>P}*25 z49=^#gu_pRAa!vu2^TkCBa#WlS5C~+53GZv7M!sbbqVowG?&qp)V2g0t?K9-AZJ9D zanYejiMqi5o#f0yEiJ6%^eNt6W<;GpKk0C@U@=`EDSwJdprH&!FOcYFN)D0;H|FY|CC4N;1j92usX;^^cr7o_hiMe#C| z2={hVw{{CQvDA`=0clD>uZH4Q`e01tLZl@mNKW34VPr20IdfxT0L52YmP965XopdJ z{G8lmoq~-6;HFR=#9v9M!LNUO)L#w@{{Of8mC)Fq6g5RdgQL+=S1}8-pUb4bnJ}@r z)hsl0B$t((!khcHNP?v0s%MgESkx<9l_{Nf?s=f9*+psc3qtY_4;HH-JszFCuZtd$ z_=VLwn!A?QlovB3owLHTCf|QpnVmS7zW%UmVR_R&sJVQB{6WGr_iOEASsV>522X>+ z#wk#DYAb%1V_2p+Y?S3a{w%(-Fgt23G@vtGqHPDm{*#q%9YPkr6e&yhB7eMVJKnVP zCeUv3ZTsnsSqGnAtKVw2HrFSsF6}yA*Rn_Xm;dZw^(@z*&rnUNUC2AvzB0Q9;_JU= zO3J@HVKJ(5e0<*O(mvrD%I1>`EOY%1r>lcH+Qhc5KMrPnt7?AdR@4d0U zA~M^1SBWd8_v*ULhf_VmS9CKTYb%yi1qNtiaLY-2Ja-*0ACh}xUT*IL!w$UKxm#xV z}4+q)i5LO8O4oWW%UIf`%BDA1K-wX&F2X%Gb*jNSl9ac7%BbC^BK68 zdxy~9TwXV}Gvaf)`*53)>_>FORBr5D&$q=tK5T9FHv~^RElzgTHgC-N)$|z3zk994 zwGpe^q;hsg$TN2Lfzz9dTqTwjx7JT(D@A^3T6teNKk{J6M2o{!55Bb{ zAsLYy%l$PUqSoJSV^lb)ckNikLBGb=Bdf&HzB?w5%bI>z_n!}8IsS0f$)+K=XnkcO z&B50p>Sumt)Y^0bN30fCWbXkP-!Cq*Azv)pa!d;i59|0on5!|j_C8@`E7CB}>Ltr>s7)mrclf$hV)O824f6EEjh#}h-HO>G6TPu;(yb#=`>JMwd9ri@<}$EmN6 zd>O*S!$bP*Lf@?~G%q~cY8S|sO`mp7SuZJn=$U34c%js?qV<53rwhzlPEkrnS667o z%KXUChQs%RCxY)d7f6#cWj$|t_1zWgh=23l{FGAR_mZE+4?=u;49_|Z-Y1A05pg2? z5`3tAOey<@w2!ruJ-NxrqVdGTt<8uMSV&Fl^ABt?ZSn(%2XD;6I5K@IJEVQ*k7|`S ze!m#GK3B^hXlzt32XPzVv2X!g__!!G|;$7p9 zK`+BSMb2;Xbmj{LUh8K_cj#;+$j{$%PLO*x-?(Tfz}s#dXg2gAawRi+o!=KNfDcS!1?5$su zJWM+C*4~1B^+A&--px2$hj~O;_v5DD4ZSg~3E zF*gT`sn+I`_ABP>eLLa(k)4z3jyHZ)6&QZwAZTHAN46&%Q|)s$03n;yP@wFwT6a98pxHkAEJhYZ4Kq;B;}X7 z)$AJS4*5sVnx3lme~r?ZWGnB@j+mDd2)*wnMSX70CMe|dr0?tb9 z=PwMvjtukMuIueDv$Jusm+aC_S-ZBVb15n1yY;U%gAD2PFw%VR{BU?lP>E#OMTcxt z`;ZZ`h0GT89U-s`TOivt%IDLUU8(1B#ye^AI(r9%Xm#w~7O9syw{e696J0&!Exsqq z5=W*51qJ=DzTPF$c+%j8WWdluN@mvF%y^NmxeTR!GhXKXJ&urpN5nQtS#d^X)-)K2 z`Z8v7<%Z;9&;HlbuqpQ&5!v+?=Zdagj2sHkVYReU#U^QU_%K4i#8 zroU_~sn;yBXfSm+P1xr1vpYM@vwKv>el2!|eoxakOP}t(Hs2|~;O*D6d~JE=?aK=m ztPKfmoDr`y6FKMjM2gb(X6%z{(A>!1LvPt1&o1$7PFIkVqxe{L(kirZDX(lhwU|Q8 zJ)%^sAIr!!FYB57b#1o%!R*4rb>CWy=`U+RcnU|uFHdW~Ueb%)SX(YD-X{}pw`G3Q zNa0(|CA|l9#h>(EWQ1^DK8%7qD2rzwg+OCRsho#BdHN-n{k zUj0ZHI{qf8e~X$jB?2b6(CY zHUk%9Z}I4;(OTU;#~F*(rs;x=;r+Fz3d$~;W%sv2eTB~iW?JqKxRsF20Zk(Y!6)CgUpJF=yS&bB=C(jP^dg|>N(dxLj zW5h&-E9Iq;K2Ij1T4Y;|Xo_N$wWykcMJ1}K48dk4<{cNp6BU2>Z&_3y(eZjkwybI)#Px^~Q^L+9f&>92jrB91I}jKddf~$2Z4KE0~~@D7W6&Z9ein zLT=K}XM4@Jt4S76#mEwQF)cWFG3}G7);G2cLRTeu+ZC*7mvwc=amT5j4TJhkm-Dxu zt?A?sQ|!8COMXn$=hta6%sf%x{)pnJ)32kz><~~iTX0v%BSJi3C8{pfc zNY^)}GO6_aIqy7sEnj)&PDS4S>*Uf;BAPQ2{A6P4V0CwW(Tu$_@oHJxmTpSJ!1Q*7 zc$GPiqt;z7sx6axmwD3Hx^o+64k_+@{iDgHRLDlWZ?)!H?U;l?_*)*s2LhDSste{G z0p_+d*0xu#r3vR}QNG<@J@w|M&>SV8&q-(eXw((y+AEcB>MoXk&iQ_8dnP9x>0{xh z-uj^NL>Db>GX_U)*4C=Z7S1o*spV%sd%oO#l)_@oBe&4FIBZb8Dq&5pdq!k4a;D+Y z?0LcDyu7j*0&Cg69fM<6dx_Q4;SaK$OT_yZ14cZEjx*;fQu3nutlZ_M?{Ls-S4=mI z5z?;n-|nrc^Btu~;z*g4nWFjgP5t%}^}1Fv{u?%LYkc3IFzc9&_ft%LyUVj!w)$Mz z8TK@1-mg-FXsaAi{VJtMxt-q7|YIgL)Y+DhP>G-erI2;p%z3;}+ zp|H;rXb4>iTo!78_M>Ugs%l_z4zr?Bzw!V7sIv?7cOiIa2wm`b9$vB?l$)+3?EFrk?jk1|0Fcu=*s(ut{YNb=6lb(G{Wy0N`3U#v-BWeJq zw6Co!EEF#UGcM;ULkxDbL7mvJk50<7SG$(I^DMkIO?Yd^xMNrxP|P)XN5Z)PSohu5 zVq7`&Abj!jyz{ml4EK_GwFUt#W$Z)S-7ft;=43eA`oWNpeWFURJGV4U_?V&Ma&K_P zr~(F$ivb&nNmbSU#)qTT8)o*Lc~`wDQc*H^EpJ(F!y#6wz|;D^@brH9kh|3$uW$8s z`NiLIN>>QKk3e-{o~oATE&Zux9j71#HtVdHMAid0> zfI%@=*NmFJt+ThxP(J;zOaxyVmgk2o~QY}EAh`1I_DBKPU)cFIW?-)h)IJuc>z(X?8**n271 zCaSUOqMgXw{F*PspJ~hbc5`<==-13U-(Wt!ooWf&yh5AzY}`TGcJrZc%*rD7o(ey> zOow{Ugr9j|k?)Fe(Z^-7O^Ey6+{H~p9e|BqVIaH>76gulng`eDyp$b3_t*dazdIMd zn+kZHbz^h+BJ0s-Zng|)Ffup6$lTDCqfxl%-fhu_Y1rrITe@@A46fGKye}b^xXt#L zhuVBC9*$U<&ot<<-9?L0hcPCGq3D&v(R^QL-j>+p>t4N^lhZQOTjZP}<5yGd)qmo3 z5RfA6{L#Is84;SCDky+`wGg-s#xe2Ug^0==Y{=1L$Ev=Kx7k39>NED_Lf?JYmzadh zN$`4X;ceFEXdlF4;_$jNv}B`Nc<$#2mB1h4k2B^(X*VfU$+Dro2}JjfXFF@|cLp2u ztliZE`#c(^kLExc9(N3Orlq*bAuNWDHjgtw0lOV7&J*1$(fUjS8z&5hhI+;C@j*vA z&&8c%@N01S+Fe-|R4y!iwKQhb8GH^L%2}O0gn9?_`R?1eC+0~!Jh+V}yU{Hei+X;> zBh?&z7>hnk2=yy0sgE7IlT~mS7z}1+iJp20?vq35NMPgWp}$mh@yjl7QTr?T+vo8l zFor>33=c>5^4?TXjg6*5CpFL+lbBIaa931v0T)L7EcB+C6~~O?huicSF!&r4*{n7e! zak6qE%k-|~j^7?yFteqYSaM86q-*ESoq-pNTK!6=D=3Bs^Tqxm@L+f~hAo#C>{Vu7 zo%nqOPXkMUrhA(CufgL+x5I32Cl1CSc7hgz#?uth(PSRy{ykcIm{fb?e1rdg-1=30 z1{T2ao4`$N{HSFU>pA@At=V8Lt39tyOiWm*sHhmeGkf0ECGu-75&R!d;qIROe=g%^ zxvmu1U~p6RH7u1(Q*~CQwW-^!eWf--Kz^n4oF_5-o^%>&3jLSretT*6&O<;#*&8wu z1%J(10`XQ&>UlQbycOj&Tvze7$W)*(v-|JXantCkiHBj|oRC#kMDXj*QRz&UEh>3C z@iJ{FN98QCoC^}<{!q8iIcQm50o7Wq6uI`PQPoJpif?)NoPi!TI+_bD?K9|-DIZ!B zF#gQy=|$F!sT3tJu}Lg|6pgSSRdOW%qnVCA1Iy#2cBT#uHIDfXA^)P!aNTPmi!$$n z(%x}Xf|!F~IG=(m_XF9n1BjUXIz%q1JsU%C|U@Rh0FHP}kxi$cTz;sde;NGCoXTZRo&i(qgr#HYHk}2$m&@T*Viqa0Uv*B?H&_Yw8tt;G^MC^w;SFsCO`| zcg&wCm?xK@9}6XRgH|w!G5j|_s^&1Dv@?&Os2CU~lOboWTFW++_QFlPQLK!N`VJ}%hJm}&BY+N6Z#i024#3e+Zep+e z&rhj7u&yC9ARn>$b24bJR0numdvG51$@zAeRXkjbz-*uOz~fH2$wL{U zj%SDn4+EKvg<6FAOpyD$KSMU)7Q!1#2YuFm@cqS6pP%0+YJih^5CvfOFS30+LB8|- z>8;42@X1U&uB$@C`x$-@qqIP_4|xL`seym3hiZK0T6c+5A(<8Wu#Ov28n=Y)ixwJY%Y145XG?1bi57Mf zn|)_;A*&MdoI7@4>h=#AJ2Ic>wHep+i87x7&-S+q`68@q^TF; z05h99|6HHujUV)#d}^_HUwBu;{&}nzv?`9Hh;hGY%llJ{1{Nj@4;CJ31k8lj3kA|! zw>c*&evUcTp2oin4Bu0PvF|A`sD$LlvwaX>4ax#B@C8W($Zy-eeY<&~A;-`?$Fqv? z!b6tdT4aRm4*mtHoRCo}UBk}EfqRbg?-c1E4pW5vrKn~djX#Ngle`9b80RL+a-dVG z$?fwcWn0VTr>*Smvr<7?1n}M zJr@QlZbvAUsl922P|a>Rv$WTy+S7G;wm-CM6cSEfoE{QrIV`MSr%cg0tRsz}aYphM0G z>&$#Oz12i4vwgRu-*i`Zqg#!UEYdN}Uyoo^pit*>V>$1aH*XGB%z$4=-JCAWo)6i% zH*s(R=@D>W<#^j$EanRIm=;|v{4jW$fJC#)kV8R|Ju5#RsF$;S4!#N5DruMJ*da*j zY~sjGuYLe7k<}?_IIcG{7}akxM^TIFQe3GzT2|LO-!OaJ>-DX35!;liJIdW>D2KP+ zS~$GBF6NAK)tSV`A!aM~nE3f8%-UKr7tTFy;ZDMX38d<{KmW!J;5JoH6ZNlfn1;ZJ zQ5aFh<$+PrW>K@mYR3Xzi)Eg~^Dg{kLD zX5dYSBjSslcesrYfYToSZzA?T3<*}ykfun23x{=tnQCq44aS54)Qq6HdYF5Z4In5R zX^o1PgxT=;bU~22<%fI_pliWYd~$EvaXU}7^9&WFo`QEkk-TV3V)+Adw6pPZgVm*A zkoyXaxV*r1tg&4i*B4lRdWj9mdHF0&z3#i`s0JaQx!jFWvp<;l19Wsyj`0MB5yTGm^<_G=?%xN)K3{So- zCSFTRa|cT(_Y`n_-;$+bVf>qaV5E(}=+oLf9<G7mZh^H!C7MmG&L>xO&v02BKN@;Jq=sp~Dm~N&E(bXQGYJX89|C z-?e9eH_WkKxu7_L$Gw8hf4x!-?C3d!V2QlpnOOuRF@)OgoOqlQ`urXa&*E3r%l4(# zQZ~&|O+#laCf+{?U5JZ6?~jllU~1~~bZoF+snKZrCJMR4tSDujDRoUcy(2?r2wq#} z6of9+PjFp(haztxj&`Hv;=gb!*VfKq$J-KXLEG?vOa9$|NvlM&HBTJL$?X;f-~eD& zkq%2jp;Q1osw5XWU}As-V05>S+leBWb6To@AjK91K zhXo=>QK25kjESK_hid!cXi@C&RP1NQ#W7F7$|sVX*v-Yk(7Aj{H&Mme!R2;@n{?Da zJiQ7IahCYi;N4Vj7=t%`pdxxq1Nu3defh8>bll3^>CbHp#=LVc^}olO{J*rp5VWu` z3E**!=sUfSGY;~c#baR@*xqRtlpIfzSJBGU>&HLdNBF@;v3bUXSkSD~n?Em?ugtVw zU=bJuaN;?6Gsw{J!G5{GJVd|)7(=?my1FcdybEXywf-V}xv=@HryB zR3ISv+F%>7!=4u_5h5r4>@#qq>D#bzvQ+)N%|Wknt8)9MFIO$>18$!N!2G4Sq%3et z#J(tzOZokd-3MICAFdS}To--xkG|(uqVlE(9Y=5ydExy?_3K(chjqYOU&a%aYe3P` zw?}rA21b(g;Kz%j1`XqU#w?glD{S))M zmX7fUr0&yko$BU$^Xu2Ce!qqHO(R>C)0L|<7xj?%`M5oCp3N>e88lJ-h}$~-^QD9L z^Ca%RTN=CC@Q{XJGs>(5Ccz8TN6^%ZZ{R_%{iP3jyhnZj((W$S+6ZX&{Q}l4)EWGw zPP#X*QWL%MHk8>6JAND%_qk{b!UwA*WM1Xf-54Gu|K;A}o5w;S61-J*QBQG5sV8|2GUWs_ zAH7y2LT!TBQ-jcdOO30?(lmCTDLAW;o7KBs16?E#pkv3CeS%z!ghC;pUXp+BTG8<{ z=Jum*fU&toOth*w!KnJAHHbc^T`~rv(iHeQKt8nT>ySg?|;cWM`D3KKLbGhGP>ufK%BUy`+Br_76ia0bM3$I;KFRmOZJCg~C znaFQX*$jOL-+X|LF^s}T7Uo5P7H&v+^BZG-^OGXsAL$bA4IJp|qtkvr^%XOa=L2!l z$}PJK2sI14YE!<*>sxNIT|hws_`rs9@ipIAYdP6Zft+GKAa=EBb?j2Y1y0Ajm)FX( zUBH^RzmT~d&ra3PFB3BF>LXu1DAP%#9x0lA7mA2Xq-$y(5t;O6m}`qydUHKZSf^m` zjAli8mDJVs5|jJO9X?#J9D0=<`6Im~r}i#98a$$(@~^LFJF*mq-bb$34V~WFFt~Ic zks~NZTx%rXF(S^TG!N?PfX;(&4MOLEh=nHi;*@H6e^81HB9c6|@oR*x0$7a4FX%l# z0ZDox^2Y01f`2JkG9*b(5P%ojVDhqxjItEo0b2aHZ)eJ>25)ES33fwv;L%Odz@sN! z=q0uTGU&bF2GX=@u&)nF=Y$=uq^g_kE>TU}UwfsY=IQd6+I#o9FIb}tbv8gm7kdB1 z=j+bHKk92bs*Sr}`cP=SU#f{KL!>=|8iVB?az6^Daqe3iS1q(GTd%W3DJ!ot6?ttJ z^>e~^U6G$0f7`9&hHvhzADjSxYDHgPa!qL%dsFGn@op)7SJBZuP0tHMF(*Rjzr2_0 zmZupjICn`XT-blcTjQsGUfjoN? z%fANF0kIh$AL1xwSA<^C>|$|CH9kq*G?uTVc7Q*~XLfeGC^3`bs6Vvgxp>XS_a}#H z(}*y;*DeQ}&XnfjZ(w@*BD-p9MwhkmZyReq^OLJ{+1i#AmyZ;cm8?n4mTNQeD(n2cnBJh{f^&@eIAE5CUgl}9tYA@0RmY?EqyxdSI8ExBnS(u;V!~;dn+|x zVOO`1bwUea(*Kjt%9sa`!xMm+e?@_~!_b;ObGs-mi5G19UzweM3j!PA^2Ab_Xe zAmF!vrsL!|37b5bD*`3_j6M$fXk8tBKc_3jb?7AqyorH!%^j2<{ zDM!Fq9QM+e|>2!7kf2fHO^cwFrg z#P6J2ha^-nSAZQ5VHEB>_ix!VED|jHqoz1f@1TWu-Q(7nCt$=A9Sqq`&OkS4{)}8z z+-_)dxAsjG^&a3c#}0-772JL}w10kSC-o-WC-+F37aO-5n#wQ}PvV1%bY7isK98S< zX|DV~p4M`~kN%v@{)@~6M(rdbC_WwXAu@CwOs6}5gMiaFz^ue_Mb%}7ja^`0YT<`P z*$W8rj(gIov%$&lpW1)4Y-7B>=?nVnOmd%94RDhCbQ(kE25W#%=V>pusqI8!AIM}@ z17@*|ih2l1FQvZA`wyXUUr!^GKno=ESHL#|!1wq-nztI5N_iDOU_MD&h#9Oq*YYY| zVs0e#Lp3;9;G0V_#zQL|UWffws$bhDfMGT?h%dOo*ne1`gg0) zy@R_leS&NmX)!T>GbX}T=!dIgyAbO;^5ZAHz|Ew^N6mmsLf(f@zPqJy$r}Rk&hT|f z4CJj~q0wb;3^Y+|s56`V|PTZm9IrWrbzD23Sw=b)C!{ zhi{w-c4D%ND5FlBAUNkvSvfjo=fx0ej#zsKOeE(c#WpWnLZn zu;~T_aybWODwnkTeqAr3Y_+Km%pZXy!TccP54sfnjEFPLKSv*(9hqDb&kEW0V)1e$ zB8D`8PEw_zaEc6_A7lgw%ynFUAP{i}Rpd>Y%L5&y_`fJjeFs z*+IW!DQoQRH$T>VB)fbc8;1PxaL8%MYg$(XFvAFyV1%dSxNq%e0dVfY9?k z0-m9Y!WkjQ*U3c?Q#7P*Tmpe`?A#B1A#zsHx-8SwP826Jz)8)w!dy|$Y4mGm^Bdn- z`4B4dY$UkH01;zAK$;QptjvKS_0rke55JRq$H2TFJ54d#PaDZt_nxrOTVz_VwF!Gn zmfCewu4hBNp}-*HFGUBq?FrwKyj@Fk-joLqPj79?krFk5o7n=Ybt}Ec`3(J3{4#9z zmrJP=tszqa?aN=@^?(Ust?5RTb=rvNfMsu?3eEz(Wcq$dqHkGZ^l_kI77+JCusvFt znFD}?{RbkssNt2dn#%h%m2roU#YV|z*gxqp${j~mBIuvAWJ1+BO;BA5i$)`C{7p>`VKV?2=DR43PKt?SV> zjYe`4SMVRC`-fK7$fZSGiU%EU0?~~51xP?*Hx3JwjZ+%v6Kp`adn$1Z$`C?_w$?Ug zfz$ej=2pMb0`K%M5e1m07b{G?P<*1av1GbZ>izGoyWRp7CoXArA?Xpk@5|Mi8QkE? z8rZX|Z}~T1+LXXwE8z=vVXkPLoPLvEATy@CI=aoMcB~qd)3kI0AgVaq{Ze-)lmel_ z2VxG#Cyncjf>Wx1CGue-A$a3?pDh=KdmhQ6XQ&--kcl2ohtp*N}k>m(CSqH zcD8~ViMxb+T~beXS70_Ms%MS%!Jy? z1_n+DkK;iX7-o7xl}N$R4I>@f<_tT(u0p=@7xo__I?IjXwF&e<)&NHp#Bk*^Zj=qt zXjviZ$4g|^qvlH`HfvOn5km4HR#q-%2ep)GzqI#tBv#+C=a2`a+)(=vRx(Qe7_jmt z{KomZtUbE|{t$@d{Z9}AF$t0gdmP{Fg^WXvP!sGI4FZ?wNt(9}4qw5Qazp28HxH?v z1(gtiNSRqQn|;NK!Q%l|EYhHuctwM!j7?q3N>`xn>D}7$?8v@Gp_TVd5nA4oF(A+S zH+qs0&F3Fk-Vn7v{$aJjhmwcki*7a#LP}Zw%HG++`me8d|HQ;68o3rc3wb)E(B=er z#)VbL>|SfD>OtkGMufmYfX>?Pzt)^MtPhvZnI>&9pvw|t-}4x@+P{3D{}Vd;E-}6n^CTT!e^3a!%@;T_P`^ZD zZPXk%nInPU!aj$#x=@^HsyHOZU`TzDlmdBf0fGL@dr{M{UZ;)64q;+|T4W?SVRoTt zVGOiXqrh6dwByy>YUc;4NIl+=BG%D-G@yph0le2&OguWB0o73n(h7d| zZO)8hRDhM~Q7raQf1-AXKUW2q2kp#v9}iN2w3>aBe+i)3t6HUL3~GW~6jHS-Ufyj9 z95z`mK?L`E(k`yj-EvQZ;y3q~ikn3VUoaM>)~--5W^QbZeJ6$uyN|rN$q)Un7Yl02 z>!y#Xpn zW<9&FZiAe0cPn962jE&lE?qiitrO&vSuB^q6K~OjbgO+StM%`6&L$l`5nSdJGS2*% zXj~HKe@N$)FC8B{2F|_@tij!$m!o6)Ie=9_%%xdkTYn!)O1V4LAmbg4M}n>!IkLM^ zj{n{wQ?4_s9|IjKSd70C?*~yuLW*y9yroD>*6&08$&X0*3Q?>&ZDWvV9t(>1{^`30dI4*lV(E=hZxqn?<$g5 zLC7-OAGf{9Kpg;3Q(+{w?Xm=T@5wLX(wHmYMMab)%A)^X9cS=3>`rKXFA0aixB$L! ze->YY!&<%Zv~^Widj|o7oST5W2edK;YSC82bjFbH;2b@!c_|2p9?aBe-V)U#&8go z59VHfH%1)-tI&lu62zYQ8+9@a~ufg(ZyT=(S(E;ptv!_$tVEI+aW%ZlH>^6}51r9VjtyZq6y%=aWG) zte76|-is9kIkCI%e^VirqYf+R0tB9W!2zW+{x?MrC)YFOAVqow0<^RXaV$8jJup}Q z17ylEX)QP9g6@J$D+@gUshSMApaKD(9zlr76k&QPa=c@4O#5a1b6EH78@$E3HcUfv zhzTX$Q8W({JV=w#oUG7dX zm46b(Smb?bwz~*^gq`#_o$b~c{GW{IIZ&!F5>H@upekTXIcM7MVA}x~Gg#qvVE7<> zH`2^vcl}3iNDtk!T=PFa3uN8Aau6j3Pk?2V=av<)4x4EG{EY-$QW)I+&6I}59(JKU zOF<+UGFZA2Y`9S|xJm5fjaVA=MbIrA-iB6yE){p^FG5nB0E(4=B!;vY<04q3|8m0} zB(?XCK86O?1IWa~0MAA+T>lJOW+5^t5&u!bMAKY70YH|MCGLJNQ~>xunxcjyY?LaO zA3Rf3Xbrfy6f7Si`dWwDY;Q=Th*T#+B4W@r&CU%V&P&oE$sN=>z*zw=1;^<*sG@q2 z5OddbNDtL1^K*dYy9(^QH6rMKQC-*T-f_bfihJ++fP^pqN5#oUs3E8s_krN1{XaBB zE0Xsf>UIz_z8mzgKyz`teEG7{!Xff4aA|_GADWv>tty{sCLALD*Ez!gz@t%-3 zIs)$?%{!N$W*_JbY1sy(lIYqoD<`B_SlHp=Fv4@nXwL2P$K#HJO|%tnmsQnk*;SqwMRg)XN56H7_kd3H;4=qH2y0q{eWN$qokD!*^3)MhAz?Re?GDze*4p3e1f9Vn= zk_UtZpQw-DwW%$GQtD7&n=MFE`YTjnx@F0m^^;j%!1l!*yrkYmORWO~AJEP>juD2% zQFgHb;JcyqWcKNY>nk9F_;NuY>mEWw5^oiMI=!)MVUe$U50dQ(sp-YGI(9?vnZHBa zIO-Awy~ro)4i~{|D+IZd&c| zrbeJ3;Vzsgqn!TUE-=F54n-2Vneylz)bGHoPw+qci4_z;o(Y=()aC=IsJ`pfUsmSS zx3BR@$xd^d0f$rH&ZTAu`L|oNzTHRpU0FVdC|o6x!mg4)&_za?N*zny{MmJS(=Pw` zPrW#(e=oB+bjLai^teNZw-!!sc_E*^7z(lALNde=^@j5FDZvc{i!E3vmx%>URH7wS4XnY^zi6ytjntpz=PycLqt$I`JQXdhZsSVSuXx83Dkh;yRcucL;61L)iNr**v*HiH%57cBm_gdp7P6F zu-_1|Yp9yyZvawk*r&NLuZ(SO=@eu-^X{^>^WllrDGgcqC6s=#lPxqBN4#v-FH3a# zPkO23%taDkP~pN2wXZA@_at&kci%q{!dhB9_f`~sTl@75$*#$)qm)1II<}|B3 zUbhB(jK&`VTqo<2EEaPErkrs(hkg$Vi;01SgO<-cd;vTtp@#h^`V6GS&Q2ID&?C?? z$puQ<{xDHbkRnPyUv_qMEBMe@VcsV!^58;4j=18nU=;E=2Ya!Ww$MqPOA5@?FR+iR zLFzF~fT(!0@U5}<7&wRFzhr#-Z$f)FRS-6y$*TimTHxFh%^EQKP|4tFc{7#HB%+|f zbH|u?(PIGi+ISN$^E`nD<5JZ;u>Zi=ui*GTzNBaRH?{0PWyAkqYX)R%oY=O+Nc{u` zti4@|clSTx1{GRFrFJH5z%y@582Dke#UU2@^hF}X0sOv$Xb(N)n+`&jQZhQa4NAb; zqDh>PzLcH{|>W%z(Bpf`#3C9zL*wNYjCR zNJ_rWa>wpL4Sf6O#oE%e^X>zZU&&Rkq#Oe1-dmA^;={3Fo~L%>o<}5 zx}g57k^W72M1sug!hX+_g#Ms}-_>OHSx(_V3H_-eQ{dnV>M(6g_OJ~ySnxmQ@bG4Y zA)okXgQTdDpvDVIP3GHDDd%>w-o1BEv`J9zXbt+;b-Jh}rXloGkCU&??&p`dl=~!- z69TcrbZKrzEr}wc%4^TF(86H`(cz;~A3dtLR>A?LiZMDL%;$1A`G0RkrYWaNI2F9X1=Dq$MPN{d8GvD(V#V=WDG) zflMo6qKso%AD5o7A?@~L(A}J1qWx<~k9id&Gl2U$d#LrYzbP^uimj;W)4~M6!d;$Fo@swr_GkziNKpE(^aX!yNBbW(NYt5D*vs=e@TD zr7$CjG#fxY{oMk1o%wj*+A`IbT0k+ramO>d{fe#@e zjHUZWKUA!YbU=l(&xN%B(f(gKhsu<6Z+N{r>p$^4(c?_RRr${NOOW~T?#C`pHX zJ(&S&F?uDfMtYBr1?Oy`6iBhWyOyur_R`AmU|?{5hty})0>#ZjLFc>t3|Oe7AWV&8qG?s%O}pF^(6NZGa29Esi-X(8FQ}a9t|eik>~61-GfbKz#03l(q|nU zj!j8El{X)dWh(RbN^gAyh2iGs(^@z(Z$F)t+2PPYe=c3a`Q(PS`r}ci6VGPEyl-rA zP{(Ax_YOOoq`%T>jTDp%*P7w{OaUFH?@Lo61?;{z?5(o@RnED`L!Ga2JnY$6#cql^ zG@=kCE49eARW2ivNkrqCRv7nj7qT^?6Ep61k#d`H3(2i5T_m|4GZGCUm&|C80EcBar^>6*_+Z{l7=JUq-&6}X>>=Ci_||+*zA;pJ;hS`i6*1QVYSWY1P=9qOa=Bl zQxb4y8A&P^mI0b^Xm14y!4QEG#|Yy!QH5{@yCBVt@wF$L3|QKcdEz;3aDYH2A1rbh zQB_E2mlb?l96d~^*0=R!Tz8;? zP~d_o;~mhs^`QO}jIdDwe-`owp3n3C^i?$1)?S*@Tl3Lcpmo4>(-pxSXg-JuojNKv zKb9HNwz4#)BSyRr@d4$p!chQ}Tmgvouj5@@MV5m~50}ch!5Of{c@GT$@Xm`n3%QM+ z>13!yINg)+Tnq;+%aL{d-n)*%?Rcr8aB32Y34buydF?>jc>y9!S?qz@=V;OilkNmp}lq?op-2g+V0Gg!nquKxzhbAEk($L>^4v@Ax0cHuT7U*WR^fbK3 za`bH4-@)44qBaWO16a0ae)?@jB926xg-zfqq{arC)H|v6MnHd1W7`q-el7%j0*dj# z4fSV+elW5D@_QNl$`kqZn#=CQ(d<}`Bt^AJQ3EZ zF7~sa1GH{NPLw;5I~kzIIRn)eT-1FGBU1=1xmIG3oWr zYT&F0P_f>DDM#J$C?Ucdw=yrlb8@uA$ick@C<42w)2avbt{YPK9vvf z@0YWmAU4|rKo~T0XU@z)iCnFK|G8Uw04NZjuy<b;>NJQAz)y+kXYgP~)^03-CToG9?O= zAiI>uR4xE=R&Dh^Z_|5E3nnrMg~v_XSBYv=(5oPM@O*TLx@jY9;+db8VC)TWK|2Rr z{7{DwZ&9i^i!%HSkbOh8w=|YN(!;x{+CMoy<)4#gB7}#=h4FoLOgQus%iyZ^uK;RQ z)5lwhTrE@FFw(O=gD;lOKS(_Y!`*dGGnU@PBt8DkM3EQS3~+%#O16kM)Y=z1Zr37) z1Gf;BD!8K_LHad^A#Jtv1F7N;(SZ1RiaIu)rXRylk+E!J&pRr}{b%`n=IzP$>D@C8iL!f5o7LfKzByzZ7quUnTdHs>aV6Z&2Gc zpc;ubVh#@3hduk5!1pPghYWdTzZB-zsC6MG00J-}*#&j=nuZ0rVfyiM*%{SLv}3R>%ZYi`544Q||pPU}ytqUxJ@N95`?_v=)s z**?;Yb~@v$BAb&b+Xy75hPUw$^0r{C%6x+IN4<>gyZBHj?1V)fEwEH*Rz2jCJ2LUS z&${fdr(fS3RB)UPMEZUmoj3F#@q;JE|zx}ouz~7X3!&; z5(v5PTvv%+xg@l`xm7F4?ry*(-N0bAEd+m6Y*0+g7u~w3YT&~ks4Ofa&}!Fe+3MCR zuOyb!)RY{sd)5)-WjB4m?o#D-M)OhYTW1a@(4Or(U0@H0L%_D0m6tRAecNY)`XuNz z@_CsJ>~r|i;$=lK-d?GWEXobW=4y#21B_^qDMyU!rHdH1=>qkn-lP~cniXlXLDP`u z?Sn0S)F?(XS)=dWT}oFLL!kzQ0hKqg29LWd4jAEAP4h3m45DJs*%`Y2(#(b)CM7Wf z_eUy8-aWnB+TIm2=9nVSGtTcGZQI6|gR!!%;B2R+@MU}WrBC#FSUQ)8+e3B2Y(2T{ z9_{x;hRi4O+zD^0}r;WETxD_nYZr>p!l)!^1}TgOT3JeeJ8u}Do}$2{C_NnsG_89-~Y4U$5qCo|^k4G--&$~%%qN_R?-JLw;bYb{2A zVM~qp(LL8T)o9K{aIqir`OW8ck$Oexr;PLNNnvh1Wjl zexdMDDEX_iwRZg9E=!x%ep{b|t%nrHzjWDr>mpZZj`6LFM7VpZc9owEP41fkwGn9iPhQA90mmTzKRNXzoqVmwV4XWFiKG/vhKW4zMYypUmfQHp0+r6dtlDg2b2p4sRQ3H4EXxMNaPjLzTzQjMMz9LFpwSWKaA7npUiASO+wnLghvzGCuwodE58PCsJcgDKSVwGxxBFeMxLGGIMkrLYPdDyrjEKcA24GSNaR78Qn4cp6hrdHH+LSRBmO4sLpiNTlAmrJWYh8iFJodXlzIFm9hkAT1vTRR9TSV7GS8rA8InRx4MxHPFNJlx9+ph8Gk0mo8t30fWvYcB19/LMSFd5QHSuLqwOy5cZAwzmkY/lIrpm9pKQcHwTo7EcTYTOBRbyKVXD9UOpcz5gxvGiAKlDjjBMMWdLIaJGDVOpXpmMYal+kvOvZzJhgfsMQ0rlwePSOSuioYjZgiSzgSSHil17PnkQzYCvbi4M20q+a90eEbR2L1IgkxQbl4QrJAtueJnJGWcwwX2gwAQSQSQke/eE0gqEKAki0R0LxrHAe5JpIgz4jRqYEt+X2zSqLlduZz/as4yy9kyzrj3nmMrzalxjX/zCVRcYDyGACNFBjlZYyWUuAWKlnp+Y86VyV2jOoaw8vCD8q5x+bqvenVpMti8Wxc6yjfwZzNkYr7mio/wiYgHma+TcVE7ef60qGaaIk4eyB9y7Ypzn53p0r2y8ul03Xss9pvXq1r9ivoJ1tixMkt27bD3Zyaeterubvbuh2evms7J79/nb/enNvvNkyCVZDKUAk7N5XAiw5OWHV8eqJEfeicOrrtc0lSA24wkSICURAdl6qeqwqrlqpyFX7RxVH/WMfgb3fIoWL1gLeiVsn14LG5UMDH5PtL6tuQbyJQcMJT7E8IPgFWqpX5FP5ecESbDX93EAmkyy03KDyLbdJ5H4vl1fcjSULCn0g1WR11KtiEJeZCtF23kMPQXbMTz7MLYzBvfn8Mq7G5L3oXdrG4Op32usNk+cH9h6maSjluSNJL3etHh/Waya+hmI2CLXtVsp4I2KDtO8XM0qvje1LGR0KwuliXttoTeMoWVBLJYCs80PnKVEG5+rLC8a6Qly43wk9+/ttanYXf+EpL/aJyTbrljgEZ+QkpvOL53Fzt1gdP0NfQBraM3P7NM6G2PbN6SKi2itrhsvnT22t1XXzo5eaCfN1IuPfcTKmqk2MPik9ZruCWNlI0nm64iV7Va/91hpWV4lffzraFlf6lDxsmGnlojZOmPnmNlot/WYeX5+/qzD3m6Oo/q00+A4jhr2ulvnLKII7f3TectOCjScii84dd7i/nf8B3L8hrenIqm60KGcfm2fFpffIr+twxfd/I8OqXj+dxFz8Ac= \ No newline at end of file diff --git a/wyk/10_Neuronowy_ngramowy_model/ngram.drawio.png b/wyk/10_Neuronowy_ngramowy_model/ngram.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..3686ee8ec7b4e5f939d39627be445b492051e23b GIT binary patch literal 18102 zcmeIZ2T)X9v^5BAlLQ4sL`0#e&7~(?&g0-aJShVghQkGf#RTA@#=;WZq6*@0@IzEuP()19 z;-tKtGt%pCh2nz3paMQK5s|AW&yaq0&L{OC98HmMHDL#gs*SEffVilhgrCPrnE)gT z?dt7yQcOfrP()DlfF#}(RRKf!+h@>}>)&3Q=wi*qjWylu^j%R# zBGT&O>aI>Fm3Y~C{;fnGbW}j(q!LL}9}5R*Z;Xn*n23`*M$JpwRo}%xL0Z_;(>O@W zP}eNT+t<_+V=88bP<7Q(<{2I@Xwpo%C7M?Vi`XShAwM+|Lf zAgV5=Viu^QYp3s~9b_D2;HIM!B(1ILgE2yA*(peR`IxvW80mrcFkafuE&)MmO8yvc zM-_1?eI>M}gR`=hkts$kFi=qysS~KJrlz6ej?y;QcT~or+*Gt26yRcNM!I%}l2Qg< zVh%nME+|KJbx@hMk)fieo)}u&$5q$ZL%|cJi7#OQ&dIU;?dVE}@)ZD@1OZkZkJ0Swh9TY{tZB=a@ zBUMLn19c;RZC{KYR@}it0TbluZVn!KXrO#NrG2yv9Mmz!-jXT~#^%O)iiY-BEmJdP zX%jskhahq1zyLK@1uYL{H#bEc9fYH{hMlIGvZFNz?#kiU~t9#mklEx0EDw0Si31MF~ zJ39?`F(g(|8Y^k;6XYc>>LZMTW2O8(ghkEJXlb7SGhY#uv}=I3rihP zP&buA`f92;AzdBxP$)kKVGkoHaCa8+g zadNg7b<*%gXp1;&BVA3=ULs=JYT_n3%If0!e%ca#{s#6~O#=rVO=C$FDGhyRRfMmP znYgOHIMPAI$X?k@T2w{B(;bTy7S&S5YTG+%imQtSc!)STxEYyfD|rb!iy#a|M6~=| zRWy+nN`9(vQFk4E12cOa;~+^LZSx?-04Fag9bZW`acxm=Ge?w~n4XU)+#jv$4kpt< zUD`#$)6U4v!{10(Q(F}2r|v@RwH=l?)h?bIa3yUsKU1`imcgnC8#P!2?Us(E>MyIJUY>U(+W zdUykKS4Eg3&4_~lzxoC#i+W1v5$(`dnCRUU#N1p^aDR^gFKsOi4M`_aW2A$ho|2o9 zgR85Qn4_blD=6yaB&8^-E#-njdTIE2N(gJIIXHR3om73CoHS6N50DL4@Qx~LL(@UJib*1$YSU%e?T2tubbEdt_pD!{nMC?&Q9q*pG#$`ZW+VrXI>zV6C zER5RENENueI+Unl@8?!qUV*W&!FVF+oR`K{7K@5j?1F;w3cO5?7Y}WnDwigLyH+!U z3A+<-7K>bb&i)K1fx<{gDdk}z&}(#rhK5UO?8HkF$X${tJr3|c9Vl^5m1JGdtlpRD z&lN0uFXh{c26x z!&Phy?HoZR|k-bi->$CRv|Im?UHUGVj zyDj$p6$l+)B*~NwluI{4-kol!*0ZW3+lV(f({mSpe0Xzkg14=5ey}z7b5z#g#G{ds z1-Nrp)<)M&@BDNvy|b4_&krppr~UZ;-ZtX&CvUBvbmU7@xY)ityybB++H=wXKa6(L zLUvoDeyT9NEG8|x+x(rBlyXRuWW8J*KE!wvGM%-w)aUMoTzmMr>snP?#Yb5KxBS7j z$`4C3k6vmyCYJIGw_sPX&WBbh*n68JB+mX5?ew#XH%T|=yD`ckv0HEaCiGhCg8Ra{ zRGU}CiFTxP=%2|b6VbX@2j&ON8=(oX<^16>Y z*ZB3so{bhDgqVN7trzIZ(`P%=2-t^dcv?Sl{%6&CZu{14wID-^uPM?RDse;DkD4;syMCj|Y1K3$t7 zkYi^aad*9``(|0SD>yt}b-)tpG>LVMNO_aG_Ed7L&C$*J=0t$P09ukW) zVlC{78ZLLX7^UcB4`R|>NmlM{Ct#+$7gR`W|-z%{V zXZ(;Ut+T}+&n4%1ZM1)XE_wRKat^vn`WwOMIP382K;GoFIYA|UVS6YP)}shop(ZuF z3{he5QAU&>Q`{U}@XxS8998Z9e%!{u|59tdD1i>wR`GL1krN-pR&Ugmb#y>!^OSmh z<&AZB0ose>@~TV*!F6{yWOt%Y^$ET!=2*%z^Vjc7Z~X&U$Z3A9ehOb>x}v5VEl)!U z!;4UI2r5T~?|#LY76-MB?d8YF+7x3(GSq&5`x5#ReZ^WXT&?`L$}hm$TRG!{Zm6Mc z>pw4@zS#zlWM)Cpodn2yI)PoxO0HMWn{Nhqn18^Q(zEVZAL4+#Zp7jZtyIi&&i1Hn z1W5#q+oZ@YYj@?7zqFByUX#Sygsa2}lR@ZQLcy4qL|>{>mZgS=@r1LkID`lkJv>eH za)F?WFHS+Pb3UvwUbPvx?Zh_+JlrGh@I5sNzl&%8_&qwlc(A`NNop#b_&yFTu&X_O z312?(efpP38|uWolEHo_)~Ng#IHBPlJE;>dnkxnxcOBy+JEy_FMB&O>Iz*f31|+Y@I{$& z=A3#cy?)HuD~<#THub}uWyi_dP zE~Raax4y+MQ_(+`uXlsQ*7g7VEJb;qr)R=^n{BAhMv|ms@F35WaA;(+9voY|afg>U zY%qOE6m+o{Bho~jHFZ1-L*5ZiEqq^4$9k_?yAIaY3{$0wVc{ce?*r`xp^SH5#z&*qjiw&|4F8Std|FV0A*^aQEgQ-v4HJKaMK;DkNft zPW~u~!CfYvG=h=ewB=Xt^Or?Mx=nG+oQ$5C3-vK)N_>7QGRxUT%DmenWxlbcC9-y& z34|!rIr*b@jVG1tJ#U~Wxh^$=n^CXorAx9~mW%Vxa0MLsaLR^cu!?>4Q>JiAV`C|P z0y)O;Ax+NuIbcoFV7g{$UXwz8()ozhJ=1ZU?FJrEK35tnE0hbf5sz1-Vc=Qy~p@i z5tay|x*;&emtZoro~kla4#~qp%fY+DbTl5}@@2$=_n8J1VM_9=J92UEct_wy^g+O^ zgSwoL2tNbucpkRkyhi*@Y?nleH z+efm~#Zm%u=7{*BO}R(qShQcd!7B}x(+MnR231@iyDbB0?YF@^7h7u3518K3`0bd? zPUS~;x1QW_tQA$B)H${bLld@+x3ZABJEkd~oJK}(YA<_L6we&Z7Q&8I=Z-sqvy)C| zKHvGYTv0nyGxvdaIqGWCw7l1>wIKHL*a4h(f!ezG_-+u*+GJmfL&!(_W7J^eWoqGe za(MGQ?dKEkf&>K2Oh)oEcW$lhwa=qF<{~qMur?-13^S1=GT52!R}kNgPvd59*sgU` za}|z?%E;9$d{cfLJkcd5IzAt=kUv#yvyd^BacwsK_M5~DE&R0YW0~t*K?$1`Q5K)| zU+7)^e(O@Vcw*;5-f_({{U_){x4goTeChY(YL@?mmjYKx0q3;T!VBSHlAB zM3aiVz2?HLNwQ|eV%Lgc%XeLw!p_tGh^ii(6U2mEr4$$?OV{ktK3rfxckPmO#Yo%{ z3QZ`uGcn{m(U$!jS&3N{{Cf9H%2lI$&77ozREsYMs$Hkm4q2=x-YIm+t%juC#1(Db zswnom`7z`Dygoy=Hl%W{iZ>&tXoK;hX-%Irj!g*Gf(BlRrBz?%M zZU%Rs&ENmIrpsoSBH7loYILxwy4-G@e2Y_bGvH=L`PrPS!*WI)o2KvZC3wV=={G^5N@n!?Jv+<@m6OEOZU@7UXt(% z1r@u#b~7rTX_S^rLm@2iyH-Xaj1`{2RxO_m_z-6wJxJ@L9-eRa?uLjOJ=Y5^$$HkS z?87hc<6TwB+McBglVH9hDU7VrFi&pgMS8Jbr7m)6DKTOgbLX-^}`&wUyc15k#T9Z;s#x25Q{JyW4ZPK;rnx_GOUdyQWjC^}BM zJX&~@pYSj#V(t%?f-yq_zOO#)(_`cF{ys>t`mS_K62qBFOXYf0qPcdrm*XTAfz1J5 zUAd6&5Ahf0#vhQ{Elff@vzq>ZJrW2NcW#Nh?9;yBT{rpbaWffu6tmL`rxbNXPjDS+ z>1feZF+ahc?Tgzjj|B>iebaXXN}4)raEWav)w1Cck1w64Z`=chg>vCcYDK@tnHnAqB4cisVtF zaGDR*pJ{)lP=BnslDoRo?RB`xF4x;~{_RQWA-Y#SMf>?)d(;OlGV|RrN6`4}ojAfS zXqnZ`GXKTY50&KEwyBq=L$hAi?R((Pp3D~sG?L?ojQeC0J)x)e+Y|3?>TBQ1PMsKx zIz8pOft+Wy&<;EOUy#jC*8>JJf-U|vP!s$$XW%XUyfdE-|3!#*`kzT4rHodqH{V_z zG8Z~UkuA8r?fqi#=jSvB*6o5fmCv5OskFFD!+OrLy$t%d3E@Af))d8s_OZjcyNXYz zQV`az7bQYId5l)}TSmF4<7)ITPQuThCcX5R0e~vN3g0t!btmr1D1?;;eK0mPCGSO9 zvoLmHs3bi`$~08tF0-RoYxE9wmUwRkZM9fJ)I-lboL{@Rs(XHG{HRqiO7w|(&0_77 z*X@N$lUuSbwkz^IkOk3Oo-bE))e&=qv?8@--v>?tx{|gN9ofIKmqLfDmwX%CG3;_B z9wEt=IWiK5q21pRls;#5^pMtGczvgd_UzSX9eb$?L$7AjsBG^(AC$HEZIx+`HWJyr z+m@w2SMB7XXYw1r+L@BM7Gz#2JD>HiXj~M%ojrA-{qDfDu|z)#)ja=ku<<(9yEX{s ztlf3b(=Jf3SlcTYE#3FeV2hGpnjgN>35k}Fn+TKj;xg2!^xZ03S|-UJ+noO}r*m4R zGNJlthf#MhBdMU`>gqkMh_m`60Y7<;rww$^Re0rl>W!N5?Vheq8MG$#AoJXqwU)Re z^D*dHYrZ_#+QC2QFgP!t(Sv`~rZlRc`E&I;f9E8FD9$2q^Yiy)$-Vi3)uvmb5=%m4 zA%Y<~BTw=tYLgt)BeHE^DJ9PhCDe}dW_FUaM`k{y-@bvF8GY{%Q(a~kWhw5J`PR=A z&%3>l6f@DM)OO&02VEMm?mhZg0PfI4WBxIu;#CB*xAqt5{8YB#NgZBH)Kcdc#VbvR z>BVn6Zf3Vt>o|=e40>(z8QR`+Z|EU&J+H8bs;l_X#GyQ;2Nb$GKX_O+%-rcfcDGvD(9(yQ$yp{@O;rD$oueDY4aNBZ;8 z$K{j36B~6|88P_lTgS_#?W^7sT*EB5m?flR%P_=xqdTO6Kd$ ze)jRaCdToSq%!I4Wxe!Er%oF`S=D;ebiFpyIwOozu3?34@)t*^z_(Z}>G&I6FZUeL zf)DE6pRUe!WS;d4*7K>E_G#LQyFFpKTQ-01rQJ+|TE!KqcvyL6u-EQ%P)iFvC$cU1 z>T5>aXXeb}FYsemQ~YrM$G-c|ujA96SDjmH5-NSRc|Vc&D*7P7xkvX-i`?y&rSWWb zjwS4y(a5BYtMZ_5h zT6Q~1g(e^@kFN~rT`&CyT`H3=Ut}kpin`QVn-m{4s!($`zedRT(fo%d^n|zL4V!P+ zw67BL-yz}`bW^@qwI(&sMJqmkh8198kYud+iDDAO#|0F)zb(x-5-cA##&poYr3*Oc zYfe#|RsVpl>xv|!ezE-16D>51yw-tf3gurtmm?&b_oDgT^%W2DPwFUy6RT=%h|clC zFymU<{K};lU2Wqk*IM|T3yS4y$PQ4Zxf_UtiR6uDao&lE+Mi2nvNvKT-fwNXmN^`5 zR{1zz`yRZ}95p8Ra1dQhH3j|j{>J9fb>Sbg6-i7D#!uRYE!;h{D#D-gsGWY!XB$8N zQt|jX$zkT@wMJAtsHCPz2@7rBCWSHuf&<5a0KSojZOTocm(VDlV3 zuYA2AJNGZx;mPo{r-jw%6fWR88O>t2V-0Ao@!LvA@*Owr(JOET?2yZLFvO!gWO^n6o6ag`$ zp6km1DbxnTMCKY(M8E*@Rrr=CK-mxj`jBHbr2zqVsAz5oD&;Z)U|UG?=o*af0sxiQ zH_E6ZTo~k!o?nrBt0x8S{G&+Q`wI2sU^dPe)RR*x1HjBylWHddg+u9Z z|BwRu74X$Ir^Vak>(7Bg+!6IOl*)0S(ED&ZL1;B7wDI2+GTSH8=ki*ha{}DzSjuSi z@DyC^n(HM9Js78&RAA~^Fs+w~V459_TQMF^_bwVx0~#>lQxJM0h`w%{N*w_!+V>v) zs3TatrYOByz3B*;5V+fSzWx5|pqJ6&hd8(DA7rVOGYjnwXeu#K;{fB-~i!t2o{not=6h^q5xe zNZ-xP%@KdJPd=0?;xP00w%4Oc{7(4>XsMzb8=pzFrcb@S@L_hqhqs@WkM8v9+CTF%=aJsvqE z-Wn(i{!GTy(iG1!n~Cmv#AF?)kRW^D(x+M#usj2LW`}~r~@PZR}hTc$KRE>|a5^A0l^t50`ih!=-<}`|3E;@(8uvk7ysP-4W;f z4k~P;EWym;Iz*aN?|r#~8Dp0m^NHGj&G4W$^svoYc9S{nCZ>pnRmSWZKR3^qKv8XwUR@No@Ht#8&dxSncIf494)cxx=wU%C$ z3q0oKURkfF@ADTu6bf5^;FSNgw$?gm>lZuV^pav&gVepM*HwG1C~r;R2%-BkymGFl zN2N}k@ZAeOAT|9Awpo;ejuxGZKcq31FzQ_=ki??{hm5_{Vk)&DG)dO71D7nuf!i5& zW~uVq4(m5Tq%H5|H4qw^Y{YKw^COCq0jbxraI|sGM0&_~36~YaVy~S*HO0v)oFxC~VAPOzGHj5i^%}>i9Y&q2d_OX3?&_+n^aJYM>uzUhe z0}RiZhvJDP>fSI`Ke)^qB;&A)z$*!7x{^VVL}M$^UkW$^4D1W{!6Gzmf>z-{l8ue5S9dPm!N)$`fGU9lBK0~zOV<2!>@d)xQIrxWF@i>g*` zR4f%$Ikr4xpG&~)ZbVvd4hEA?gly`hNqSqGUo^N1lmb1HbzXiLogG*~T=e)?KR`Ze zgDHSVytJT%DuB=v3HOwTg@Idpjpq~3DFer-|IU{YQm76bqe`kVSwt?;F*4-eqHKr) zTP9IzN=1?A7|+OfDdpY)?_Gerkb-^zJY0-M&PR4SD=<_)hnQJ9x`rIC|HccE3ISIY z^4}FQ{UZzZ7=ntms0>*l?B{G}**HSd?}EqyILx!Gd4Nddr2v@D5Nw#2`p;>g*MaN1 zeU1`{KMmj(J@v&o#c=okzncF`bK}^6>&w$YEftoxZOpbK2aBxe1E~7`V#Xc%UlTP| zG%OO@dD>|lp$A)3{qmf67734so859Yb6r{dAVW#<8n3+Lc0L{`5ky2jrD{9hl~v+9 zt;#Ivl_`VYn^yJydgIz&lof%B`ml(S);J%K0a35ZzC6kLMW*g!1 z=cs-Uy;mYXdzo*0d;94po1bNGo*XN=W~%-jiv~B{T;B~Ktd*XvJK;)gTJHyMoC=X3qsb{(eqtr8n^Ew ztg$cc_SSxu_%99o59Km_zEBaP!0WefX+Syh`Jpn`q_~SBiYryCvI~R7IUw=mJn!Ig z{*Rr(=n#;~{yMv_Ut;?i;tDb#I-PGo^QB_|7NQNg$I{9v z>^^WkO~NxBsQXqtI_b$WB!M)fl*u5!6k@(Y#!e>~arVlMe{=Q{@5x%9_^19LG#G-l zSHDB;!2XaUw*a4>o*uV1I51Fh@JFtA2JA%T`IIu{kW#(XcGZRV2j#pHW{?OzkmWz8 zkfO*Hx>P(2U5F9iCVBUf><0`2TN zSd_Kzq8}Ra>m-Z!5@jcbU0Ba~kS||VtfnP>K>3RzDvtG*#p2?kBbcVCFp-uocc_tH zqN(Pl6#=Mld(@Z;0m42A5#=J+hM*A~RMGo|wkqi@u5{tyASU3bqarov_<*`;bNy;p z6v@At?SEvb5p-Z+>|gR-Da(L(Hfb1{93u}0w_4+FS~r7il`TnriW~|72`vRp<{Ydi z9gJe&g@zTKI!JEiq~AC7T?9go!$o7uNO=#>~HT%eyhJ@wNPPzz#YWS76M1k(nKpStDB0_i1cz>)!GXCpcg2ayos zyrYS^+tbDhx_5CT{J3^Vr1XDLq|S2y(US?3x(XUJd}Tlmc?=d*fC}m)53>iiV##RG z>_3RgDD8h!$acC7w=vU-T6p=SjaP2J)$~k{3X>HVFjN#sg4LT7uFQ5yP9}3ENImP7 zP))deb@E`K-0}M>gF-io6a|p zRff-Vq)dcx`ifG_*_78t`E9uhQJSx7d*RmWHXqzlGDCNUQA2hy;z9UI|D~C|>BJ|A zVO!7tr|J*37QXfLz&?EVP&oIs;T{7Kxx&$N+SrwfdB-315gT%ZO}UNzZk#m{Cx9RW zj-FhuSgBl^=~ZJ(0fk$i)NXO_4|j(-nT}Xh1*BA<=i4Of_I0rM{rTBPYOIfLdsV3H ztc<(!TqEq~5U!R_hE;W>i)+d5yiZI+Rc_QSe;jpeh^60n&UUO$l)r;_en0x?Ihx-3 zS$xovGw1lX^X!rhp;G4XcPVP`XH5HtL2LKl>ulERs{nhv$9#??Bc|u(RRM+7J0tF> zxisfCE6g}jnNYpiCAz)T_9yH0^cZ@laImw?50Fav)?&XFm=qrGn(fDz!2ypAkZqdp ztWFB)$*f1O*8p!<;yEfY{K@xu$o$R8M*_D$w!Cjv2JF8xG&CY0k2CDY)@`{qw41E=FvXNqeN+^~e>U7%)nQRWuC+4c{`0WYX})GbE{ zF*5Bgc>6Y4+3k@fDE(0y&T6f5t=$t>J(`s+(ULu>EH69@Cw%7UD*O+WV-e(4kxNaP; z;^a8-Ut?&WgdHEW>PU`rfpk4Z<-vtCjh2GqS~ninHs#~r!=?GvAk&{ieOV3Lz4=v% zmwGWj8}~0F3hAXHrGQQWWS*$Swa&Q#ZDYq*DuS?5MPFV}RM~b^i`{hE2L>XjcEvy0 ze0Z^|K87vK#kA&H!xO83H2Pas;stw40ad4WZ3qVl&I7O+^x}TJsjrGb9I@e!d`lVD zz8mRjfC^{F(A_CXx;I*5i$-z_0zRlACT@`S)cG?hG+H8lHOAK6-xuwcanLmhwhr4z z?yo1}GU;(y$|2hYHsZCFF}mmdm>gRF;dVke0OzRs+vI3_8`=K2mBqW79W#N=|2{aV zmB@Ol!>eA2_Ld`$(oM`tTu8!C5~w94R<44CRErXe7Q7@=%QLCA#0D1^MqX-0pZl0?fLQWLww!Qtk4{f!g!j#h>+>ghvOXl zR(?}n@JdCq$9iz1jm=6KC3*0b8-wi^DmzzMZ?yK@i(Ik) zbxazh@ug<2&Tqlc9OQ$;BZIBsBhQoAYy8#@mWo+eV{z^1%uBxkIv8c3zOEq!x?Xp` zc7ig$z-OET@qUnH8-G|w7_}@%(0`|j_*m!Km)Fr5P9!QiKi2W%gTCfk69ySe?w3!{ zKBsC3cEDEM=QIR3rGlQr`uMZJFsO>fPk{sbdk>Bh0?T!ynXUWD=0ut9BdzsToLnEg0j-~h(QNzN}KBPI#>T_+|5 zAbx5n3*E8A9dFO6s@7;cJO%LuBWULSXOA8WnLUTA$*@wfM6^|YGiC4VKfbwI?U0=| zSct3XDy}+JX)(x4x+NG|Lt2C*;F;GE^^=DayE7BPtBj#rt8t=T53!qbX#!#63ZJGE zZgxaZQQPcA${cU?&AqQ)9xczvSS-6`WkT2~uM_t*WZ6Q6-!IVR+p4U(|K56cm-XfS zx)s4+j*6>CgH-X>T|M^_CoaB^SX6>Ey+F_c>xl;h() z&DT<>!A_S4J6-AgI{O7^8#n%acoYK&bp;@*-)7`ZQONZJv321$9~EFC0f{y#W1V>> zq682U?ROvF2RStx0FKGw;oKnC(1JuT)2R~=FOe!VHM$TpBYNJq(ejr;1on;PkZk}b z9@!oUPeGv^0PiL$rwYTVfbnuEGqbVV0s?U|LCTg4+7a`+Y^VGnf{_@!*}+c5l7gKI z!#{>XL}3p}KyM(CaSwXI`6D$>T{Ef(DbUU|ok~b78EE)|T>}-RGO?X|!gh}5z-t<@ za9PFrvw-8f;#+^3(&sCiG{`ZbfWoAu5kI5wqX!CjJa*8OKIlrWdf!=SI`LpE$A7&; zheH9}@}K10+oM(>tikv|U-VzNQb10w|C303xA6xA=Yr-H9_3x3Jh}eQQPj8np#>vB z@GEeN(H&IZd;J_9(Gj_tmi_r0ArRP700E{6BiE6tVQKnl&7CHPz_4Mo|tgT5bM1<$92ru3IX)*hny`|s5AV(6*uH&9^Lz{!6zJo6Itx%Ea zQe)klH=0ceSNNmI&s^)`?7Dv?B84B(MoeM>1Bu*@x8&!aP&Y2B2sqvzYzLIzMKlNf z`;Cjt-&2iPmmU=K2dxh-2?KTpSy1;WuxaD%f1;S$xA;fy$VQfXZQ_GltVtkd3(qNY z*w2c0wXwi*Y!etMqPA%u19ron&a**6UIY~<6Kf!R`-dj+ znYRK;UrY+3;MV{fp-i|akfIqb!fYKm zUikL%K{epUP~gzCCSU}SAd(Xkvi-4nSze2eshlfWH5bVuzo9PhkP6pYf24F-VY>0q5_$V`@!3p)d z@?*`Xz`46bXvCj&P=*A2iRYp{mrdfjJDp7d`~xf1$s)u;e@C-uuyVY`WOf6AEF`xJ-h&AF2 zTzhwZ0(SmACPF4QH1+{Xm^eMHXOJe1bI$OlY9k3oL^xL@+$3P$23C-^X9z7!6+TpXsXoKct1Z4RNnA1s9MAcK9g{|ls? z;1o?VJ*R4FiVdKCmCK!_ zr*!1Y$0a<5Y{~7i?kt&l&{0%efFi3#_>$dcBCJGCe@TDWlnD#r|E|i_U~`5@2aKWG z1&B0%FU+?gBV2dQ?~A1W;`fr`y<@J{4}tTKC##xJ@iH*lDQy^hiftbDsrHJLkNj5U zCQ*&_9Q~-_!^|eYk$clUC}tDTQvxNYjUsvKrOu13`-~_Zef??uuHU@WsTBwojsOb5 zUB7WXxc)Vni|$v?(5N(PZ_FVb`lp_&fd*5Lz@&xnaQz}1bG)pn`j08?d+b{ipajU`dX+L{46)`N^Bk3`)p}+-mqK02`*nZ%Mt7-r|p-c z?~-`+KGrL0$BL3->Q}+$@!dS$opj!2n-7nLP3O&cKs{Ipp~dHF z6tt|#;FwYdF^g|gkw+ZgSpPnTmQyB@B^#e9*iu`0C9@wts1DtRpB-jOLRm!bJxTJS z_g|tI`Y&9=oI%0eyX5Ade4c8j3V#lHyWI0s>A|aeMzEd`h;ydz-F*^ntL=s7Vd=pL zEB_SwW1S3%*3xd-(Id^P^wN+xrAO4}56-9_-HveP;QBm3_y4O3O3i1YXIgo4$~vxfXh0%BdT1njw5GI~b?$O2(LxD(ocPC$ zsVQ}TM);OE6jS^?T8Sxd^V1;zA>&e*19bmsiK(1DTTt>P&=Sq%&pDo*%E<-S{|_rT zIc3Why44FZ2d4!<|CTO|lsYG722S1En9K0KpRjLtITm;EJ8dt||1b!F(>sp^ZaV_X zQT0em+O){>4|^c9Gvx5{ymtyb7FS^FQKJbcC1Yw2<8~nzT4FES~`qm;&QM}N4BItz41xOmT_CukxJr_3#putAQS$Ar zP-+>v-T#OCC~>?81lqcX&l7H3%kKs3Y%3U%piuQ%B=#6+e#u%wHQ$qaKl%;IFWuPw zZZuocF33B(*i;~i)33Iv*^r=BwaW^?pAj2iuC>y+&&W)sIRlp47z{x%#9u;+SVegsu?!? zPqvLqnUdbw=Ho(U@9L}bmu1!)7@Xj~M4hfRN*A)#V?r3KKzGhOA3C)z^w?N_zIOov zju2ppdH8uj(x#_PXob2Ri}Fd6J(CdsS=_k)U>d}`dj0P31Od=OZXehD{qe8$La%X7 zJh&hLx1T7yEm`WGyISxn2RoPMWJ35|+MSLDqND3Rez#7DD8fqXC9-&Z`utnMGI;p| zF>PtPdxoWBMv=D0BRAu(4*zK^WV3Vb5`G*rnKiiPEO%(W z-r_2@{CA97-Lx0^=c4I^UmDry0vS`Eb0`OCVxH{hHw1m^e>qPIarTa z5}-zTuhJ3n(6%67c0v}7ZU9-INb|J>78zZ|KvNZyxe=kCTM}%LF+vQppRdNcPafj>;XOj?BOG>Q<75oxIY;o-aABz zsL`WKvrZR#^-cotGRGr#%e2q}DMx%;**8$4C&Ecj0Z0$z zSqcdhQAzjy{rc zvvO&=h_I$I{Zv5e!lP2^j-_*x?f_Ct55JIuf34EQffx8PcyNcFFyO2i-w5#PgX!ex z(u*;_<2C>ynn`s?5E&(`Y~u|DRF1T`5qT)TN+89K@PO^A!=c$h6{i$%_rM!>nDN%U zw8>+;d<)=V&37s7eG3-MeEp0%fW^LK@>|dG^8L_Qvi0)oO@24pA^*V8LMZ~h)v z9RlJ@x%7=8@{{wZe5ZiI@&D3>{lRys#C_Ec*mw8`u(zy&wime%vhlLE_2KX`?G(C} zb1>Rga&CFnhZJ`J15lXBbnQ3z5H;`X_Ufb!k8UR4(m-JnSc!~5H+OerSEe-hu5+~v z)eeq6T_@dm=%EjpA;tDw1XGlPb^ub3>JO9O1qB6-$G3S&v>smm2cq8_LXkg{;>0cEV);nc zQDym>ayH?hswla-fD1#iU1#0G zB~UCHXmz~gs6e|rQV=Z5Pk@tyewI72UL)_6>%5iqeNm2wq*py*pzGB3rS(MB-_+*! z_F^vHydvg*Xnj-PXzC#NQ^w-UF0wGe8g_-QHPTWg8Xm>NrjP}H@xJZCaGu*;=A|lhp wf=juP^{+vH{glRCJY#6m28_H*2}bMgRZ+ literal 0 HcmV?d00001 diff --git a/wyk/10_Neuronowy_ngramowy_model/tanh.png b/wyk/10_Neuronowy_ngramowy_model/tanh.png new file mode 100644 index 0000000000000000000000000000000000000000..e7bbfceda65321218dd2f7875aeaf9efbea40fc6 GIT binary patch literal 9354 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 \ No newline at end of file diff --git a/wyk/10_Neuronowy_ngramowy_model/trigram1.drawio.png b/wyk/10_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 diff --git a/wyk/11_Worek_slow.ipynb b/wyk/11_Worek_slow.ipynb new file mode 100644 index 0000000..c40bbf9 --- /dev/null +++ b/wyk/11_Worek_slow.ipynb @@ -0,0 +1,414 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
    \n", + "

    Modelowanie języka

    \n", + "

    11. Model worka słów w sieci feed-forward [wykład]

    \n", + "

    Filip Graliński (2022)

    \n", + "
    \n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model worka słów w sieci feed-forward\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jak stwierdziliśmy w poprzednim wykładzie, dwuwarstwowy n-gramowy model języka\n", + "może działać dla stosunkowo dużego $n$. Zauważmy jednak, że istnieje\n", + "pewna słabość tego modelu. Otóż o ile intuicyjnie ma sens odróżniać\n", + "słowo poprzedzające, słowo występujące dwie pozycje wstecz i zapewne\n", + "trzy pozycje wstecz, a zatem uczyć się osobnych macierzy $C_{-1}$,\n", + "$C_{-2}$, $C_{-3}$ to różnica między wpływem słowa\n", + "występującego cztery pozycje wstecz i pięć pozycji wstecz jest już\n", + "raczej nieistotna; innymi słowy różnica między macierzami $C_{-4}$ i\n", + "$C_{-5}$ będzie raczej niewielka i sieć niepotrzebnie będzie uczyła\n", + "się dwukrotnie podobnych wag. Im dalej wstecz, tym różnica wpływu\n", + "będzie jeszcze mniej istotna, można np. przypuszczać, że różnica\n", + "między $C_{-10}$ i $C_{-13}$ nie powinna być duża.\n", + "\n", + "Spróbujmy najpierw zaproponować radykalne podejście, w którym nie\n", + "będziemy w ogóle uwzględniać pozycji słów (lub będziemy je uwzględniać\n", + "w niewielkim stopniu), później połączymy to z omówionym wcześniej\n", + "modelem $n$-gramowym.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Agregacja wektorów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zamiast patrzeć na kilka poprzedzających słów, można przewidywać na\n", + "podstawie **całego** ciągu słów poprzedzających odgadywane słowo. Zauważmy jednak, że\n", + "sieć neuronowa musi mieć ustaloną strukturę, nie możemy zmieniać jej\n", + "rozmiaru. Musimy zatem najpierw zagregować cały ciąg do wektora o\n", + "**stałej** długości. Potrzebujemy zatem pewnej funkcji agregującej $A$, takiej by\n", + "$A(w_1,\\dots,w_{i-1})$ było wektorem o stałej długości, niezależnie od $i$.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Worek słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Najprostszą funkcją agregującą jest po prostu… suma. Dodajemy po\n", + "prostu zanurzenia słów:\n", + "\n", + "$$A(w_1,\\dots,w_{i-1}) = E(w_1) + \\dots + E(w_{i-1}) = \\sum_{j=1}^{i-1} E(w_j).$$\n", + "\n", + "**Uwaga**: zanurzenia słów nie zależą od pozycji słowa (podobnie było w wypadku n-gramowego modelu!).\n", + "\n", + "Jeśli rozmiar zanurzenia (embeddingu) wynosi $m$, wówczas rozmiar\n", + "wektora uzyskanego dla całego poprzedzającego tekstu wynosi również $m$.\n", + "\n", + "Proste dodawanie wydaje się bardzo „prostacką” metodą, a jednak\n", + "suma wektorów słów jest **zaskakująco skuteczną metodą zanurzenia\n", + "(embedowania) całych tekstów (doc2vec)**. Prostym wariantem dodawania jest obliczanie **średniej wektorów**:\n", + "\n", + "$$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}.$$\n", + "\n", + "Tak czy siak uzyskany wektor **nie zależy od kolejności słów**\n", + "(dodawanie jest przemienne i łączne!). Mówimy więc o **worku słów**\n", + "(*bag of words*, *BoW*) — co ma symbolizować fakt, że słowa są\n", + "przemieszane, niczym produkty w torbie na zakupy.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Schemat graficzny modelu typu worek słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Po zanurzeniu całego poprzedzającego tekstu postępujemy podobnie jak w\n", + "modelu bigramowym — rzutujemy embedding na długi wektor wartości, na\n", + "którym stosujemy funkcję softmax:\n", + "\n", + "![img](./11_Worek_slow/bow1.drawio.png \"Model typu worek słów\")\n", + "\n", + "Odpowiada to wzorowi:\n", + "\n", + "$$y = \\operatorname{softmax}(C\\sum_{j=1}^{i-1} E(w_j)).$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Jak traktować powtarzające się słowa?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Według wzoru podanego wyżej, jeśli słowo w poprzedzającym tekście\n", + "pojawia się więcej niż raz, jego embedding zostanie zsumowany odpowiednią liczbę razy.\n", + "Na przykład embedding tekstu *to be or not to be* będzie wynosił:\n", + "\n", + "$$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}).$$\n", + "\n", + "Innymi słowy, choć w worku słów nie uwzględniamy kolejności słów, to\n", + "**liczba wystąpień** ma dla nas ciągle znaczenie. Można powiedzieć, że\n", + "traktujemy poprzedzający tekst jako **multizbiór** (struktura\n", + "matematyczna, w której nie uwzględnia się kolejności, choć zachowana\n", + "jest informacja o liczbie wystąpień).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Zbiór słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Oczywiście moglibyśmy przy agregowaniu zanurzeń pomijać powtarzające\n", + "się słowa, a zatem zamiast multizbioru słów rozpatrywać po prostu ich zbiór:\n", + "\n", + "$$A(w_1,\\dots,w_{i-1}) = \\sum_{w \\in \\{w_1,\\dots,w_{i-1}\\}} E(w).$$\n", + "\n", + "Jest kwestią dyskusyjną, czy to lepsze czy gorsze podejście — w końcu\n", + "liczba wystąpień np. słów *Ukraina* czy *Polska* może wpływać w jakimś\n", + "stopniu na prawdopodobieństwo kolejnego słowa (*Kijów* czy\n", + "*Warszawa*?).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Worek słów a wektoryzacja tf\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wzór na sumę zanurzeń słów można przekształcić w taki sposób, by\n", + "sumować po wszystkich słowach ze słownika, zamiast po słowach rzeczywiście występujących w tekście:\n", + "\n", + "$$A(w_1,\\dots,w_{i-1}) = \\sum_{j=1}^{i-1} E(w_j) = \\sum_{w \\in V} \\#wE(w)$$\n", + "\n", + "gdzie $\\#w$ to liczba wystąpień słowa $w$ w ciagu $w_1,\\dots,w_{i-1}$ (w wielu przypadkach równa zero!).\n", + "\n", + "Jeśli teraz zanurzenia będziemy reprezentować jako macierz $E$ (por. poprzedni wykład),\n", + "wówczas sumę można przedstawić jako iloczyn macierzy $E$ i pewnego wektora:\n", + "\n", + "$$A(w_1,\\dots,w_{i-1}) = E(w) [\\#w^1,\\dots,\\#w^{|V|}]^T.$$\n", + "\n", + "(Odróżniamy $w^i$ jako $i$-ty wyraz w słowniku $V$ od $w_i$ jako $i$-tego wyraz w rozpatrywanym ciągu).\n", + "\n", + "Zwróćmy uwagę, że wektor $[\\#w_1,\\dots,\\#w_{|V|}]$ to po prostu\n", + "reprezentacja wektora poprzedzającego tekstu (tj. ciągu\n", + "$(w_1,\\dots,w_{i-1})$) przy użyciu schematu wektoryzacji tf (*term\n", + "frequency*). Przypomnijmy, że tf to reprezentacja tekstu przy użyciu\n", + "wektorów o rozmiarze $|V|$ — na każdej pozycji odnotowujemy liczbę wystąpień.\n", + "Wektory tf są **rzadkie**, tj. na wielu pozycjach zawierają zera.\n", + "\n", + "Innymi słowy, nasz model języka *bag of words* można przedstawić za pomocą wzoru:\n", + "\n", + "$$y = \\operatorname{softmax}(C\\operatorname{tf}(w_1,\\dots,w_{i-1})),$$\n", + "\n", + "co można zilustrować w następujący sposób:\n", + "\n", + "![img](./11_Worek_slow/bow2.drawio.png \"Model typu worek słów — alternatywna reprezentacja\")\n", + "\n", + "Można stwierdzić, że zanurzenie tekstu przekształca rzadki, długi wektor\n", + "tf w gęsty, krótki wektor.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ważenie słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Czy wszystkie słowa są tak samo istotne? Rzecz jasna, nie:\n", + "\n", + "- jak już wiemy z naszych rozważań dotyczących n-gramowych modeli języka, słowa bezpośrednio\n", + " poprzedzające odgadywany wyraz mają większy wpływ niż słowa wcześniejsze;\n", + " intuicyjnie, wpływ słów stopniowo spada — tym bardziej, im bardziej słowo jest oddalone od słowa odgadywanego;\n", + "- jak wiemy z wyszukiwania informacji, słowa, które występują w wielu tekstach czy dokumentach, powinny mieć\n", + " mniejsze znaczenie, w skrajnym przypadku słowa występujące w prawie każdym tekście (*że*, *w*, *i* itd.) powinny\n", + " być praktycznie pomijane jako *stop words* (jeśli rozpatrywać je w „masie” worka słów — oczywiście\n", + " to, czy słowo poprzedzające odgadywane słowo to *że*, *w* czy *i* ma olbrzymie znaczenie!).\n", + "\n", + "Zamiast po prostu dodawać zanurzenia, można operować na sumie (bądź średniej) ważonej:\n", + "\n", + "$$\\sum_{j=1}^{i-1} \\omega(j, w_j)E(w_j),$$\n", + "\n", + "gdzie $\\omega(j, w_j)$ jest pewną wagą, która może zależeć od pozycji $j$ lub samego słowa $w_j$.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Uwzględnienie pozycji\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Można w pewnym stopniu złamać „workowatość” naszej sieci przez proste\n", + "uwzględnienie pozycji słowa, np. w taki sposób:\n", + "\n", + "$$\\omega(j, w_j) = \\beta^{i-j-1},$$\n", + "\n", + "dla pewnego hiperparametru $\\beta$. Na przykład jeśli $\\beta=0,9$,\n", + "wówczas słowo bezpośrednio poprzedzające dane słowo ma $1 / 0,9^9 \\approx 2,58$\n", + "większy wpływ niż słowo występujące 10 pozycji wstecz.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Odwrócona częstość dokumentowa\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aby większą wagę przykładać do słów występujących w mniejszej liczbie\n", + "dokumentów, możemy użyć, znanej z wyszukiwania informacji,\n", + "odwrotnej częstości dokumentowej (*inverted document frequency*, *idf*):\n", + "\n", + "$$\\omega(j, w_j) = \\operatorname{idf}_S(w_j) = \\operatorname{log}\\frac{|S|}{\\operatorname{df}_S(w_j)},$$\n", + "\n", + "gdzie:\n", + "\n", + "- $S$ jest pewną kolekcją dokumentów czy tekstów, z którego pochodzi przedmiotowy ciąg słów,\n", + "- $\\operatorname{df}_S(w)$ to częstość dokumentowa słowa $w$ w kolekcji $S$, tzn. odpowiedź na pytanie,\n", + " w ilu dokumentach występuje $w$.\n", + "\n", + "Rzecz jasna, ten sposób ważenia oznacza tak naprawdę zastosowanie wektoryzacji tf-idf zamiast tf,\n", + "nasza sieć będzie dana zatem wzorem:\n", + "\n", + "$$y = \\operatorname{softmax}(C\\operatorname{tfidf}(w_1,\\dots,w_{i-1})).$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Bardziej skomplikowane sposoby ważenia słów\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Można oczywiście połączyć odwrotną częstość dokumentową z uwzględnieniem pozycji słowa:\n", + "\n", + "$$\\omega(j, w_j) = \\beta^{i-j-1}\\operatorname{idf}_S(w_j).$$\n", + "\n", + "**Uwaga**: „wagi” $\\omega(j, w_j)$ nie są tak naprawdę wyuczalnymi\n", + "wagami (parametrami) naszej sieci neuronowej, terminologia może być\n", + "tutaj myląca. Z punktu widzenia sieci neuronowej $\\omega(j, w_j)$ są\n", + "stałe i **nie** są optymalizowane w procesie propagacji wstecznej. Innymi\n", + "słowy, tak zdefiniowane $\\omega(j, w_j)$ zależą tylko od:\n", + "\n", + "- hiperparametru $\\beta$, który może być optymalizowany już poza siecią (w procesie **hiperoptymalizacji**),\n", + "- wartości $\\operatorname{idf}_S(w_j)$ wyliczanych wcześniej na podstawie kolekcji $S$.\n", + "\n", + "**Pytanie**: czy wagi $\\omega(j, w_j)$ mogłyby sensownie uwzględniać\n", + "jakieś parametry wyuczalne z całą siecią?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modelowanie języka przy użyciu bardziej złożonych neuronowych sieci *feed-forward*\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Można połączyć zalety obu ogólnych podejść (n-gramowego modelu i worka\n", + "słów) — można **równocześnie** traktować w specjalny sposób (na\n", + "przykład) dwa poprzedzające wyrazy, wszystkie zaś inne wyrazy\n", + "reprezentować jako „tło” modelowane za pomocą worka słów lub podobnej\n", + "reprezentacji. Osiągamy to poprzez konkatenację wektora\n", + "poprzedzającego słowa, słowa występującego dwie pozycje wstecz oraz\n", + "zagregowanego zanurzenia całego wcześniejszego tekstu:\n", + "\n", + "$$y = \\operatorname{softmax}(C[E(w_{i-1}),E(w_{i-2}),A(w_1,\\dots,w_{i-3})]),$$\n", + "\n", + "czy lepiej z dodatkową warstwą ukrytą:\n", + "\n", + "$$y = \\operatorname{softmax}(C\\operatorname{tgh}(W[E(w_{i-1}),E(w_{i-2}),A(w_1,\\dots,w_{i-3})])),$$\n", + "\n", + "W tak uzyskanym dwuwarstwowym neuronowym modelu języka, łączącym model\n", + "trigramowy z workiem słów, macierz $W$ ma rozmiar $h \\times 3m$.\n", + "\n", + "**Pytanie**: jakie mamy możliwości, jeśli zamiast przewidywać kolejne słowo, mamy za zadanie\n", + "odgadywać słowo w luce (jak w wyzwaniach typu *word gap*)?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Literatura\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Skuteczny n-gramowy neuronowy model języka opisano po raz pierwszy\n", + "w pracy [A Neural Probabilistic Language Model](https://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf) autorstwa Yoshua Bengio i in.\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + }, + "org": null + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/wyk/11_Worek_slow/bow1.drawio b/wyk/11_Worek_slow/bow1.drawio new file mode 100644 index 0000000..0d30d50 --- /dev/null +++ b/wyk/11_Worek_slow/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/11_Worek_slow/bow1.drawio.png b/wyk/11_Worek_slow/bow1.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..c500af51b1ce9404a6c9f749b8e900b25f86bdbd GIT binary patch literal 23080 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 \ No newline at end of file diff --git a/wyk/11_Worek_slow/bow2.drawio.png b/wyk/11_Worek_slow/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/12_Rekurencyjny_model_jezyka.ipynb b/wyk/12_Rekurencyjny_model_jezyka.ipynb new file mode 100644 index 0000000..459e1cd --- /dev/null +++ b/wyk/12_Rekurencyjny_model_jezyka.ipynb @@ -0,0 +1,429 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "

    \n", + "

    Modelowanie języka

    \n", + "

    12. Model języka oparty na rekurencyjnej sieci neuronowej [wykład]

    \n", + "

    Filip Graliński (2022)

    \n", + "
    \n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model języka oparty na rekurencyjnej sieci neuronowej\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Podejście rekurencyjne\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Na poprzednim wykładzie rozpatrywaliśmy różne funkcje\n", + "$A(w_1,\\dots,w_{i-1})$, dzięki którym możliwe było „skompresowanie” ciągu słów\n", + "(a właściwie ich zanurzeń) o dowolnej długości w wektor o stałej długości.\n", + "\n", + "Funkcję $A$ moglibyśmy zdefiniować w inny sposób, w sposób ****rekurencyjny****.\n", + "\n", + "Otóż moglibyśmy zdekomponować funkcję $A$ do\n", + "\n", + "- pewnego stanu początkowego $\\vec{s_0} \\in \\mathcal{R}^p$,\n", + "- pewnej funkcji rekurencyjnej $R : \\mathcal{R}^p \\times \\mathcal{R}^m \\rightarrow \\mathcal{R}^p$.\n", + "\n", + "Wówczas funkcję $A$ można będzie zdefiniować rekurencyjnie jako:\n", + "\n", + "$$A(w_1,\\dots,w_t) = R(A(w_1,\\dots,w_{t-1}), E(w_t)),$$\n", + "\n", + "przy czym dla ciągu pustego:\n", + "\n", + "$$A(\\epsilon) = \\vec{s_0}$$\n", + "\n", + "Przypomnijmy, że $m$ to rozmiar zanurzenia (embeddingu). Z kolei $p$ to rozmiar wektora stanu\n", + "(często $p=m$, ale nie jest to konieczne).\n", + "\n", + "Przy takim podejściu rekurencyjnym wprowadzamy niejako „strzałkę\n", + "czasu”, możemy mówić o przetwarzaniu krok po kroku.\n", + "\n", + "W wypadku modelowania języka możemy końcowy wektor stanu zrzutować do wektora o rozmiarze słownika\n", + "i zastosować softmax:\n", + "\n", + "$$\\vec{y} = \\operatorname{softmax}(CA(w_1,\\dots,w_{i-1})),$$\n", + "\n", + "gdzie $C$ jest wyuczalną macierzą o rozmiarze $|V| \\times p$.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Worek słów zdefiniowany rekurencyjnie\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nietrudno zdefiniować model „worka słów” w taki rekurencyjny sposób:\n", + "\n", + "- $p=m$,\n", + "- $\\vec{s_0} = [0,\\dots,0]$,\n", + "- $R(\\vec{s}, \\vec{x}) = \\vec{s} + \\vec{x}.$\n", + "\n", + "Dodawanie (również wektorowe) jest operacją przemienną i łączną, więc\n", + "to rekurencyjne spojrzenie niewiele tu wnosi. Można jednak zastosować\n", + "inną funkcję $R$, która nie jest przemienna — w ten sposób wyjdziemy poza\n", + "nieuporządkowany worek słów.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Związek z programowaniem funkcyjnym\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zauważmy, że stosowane tutaj podejście jest tożsame z zastosowaniem funkcji typu `fold`\n", + "w językach funkcyjnych:\n", + "\n", + "![img](./12_Rekurencyjny_model_jezyka/fold.png \"Opis funkcji foldl w języku Haskell\")\n", + "\n", + "W Pythonie odpowiednik `fold` jest funkcja `reduce` z pakietu `functools`:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18" + ] + } + ], + "source": [ + "from functools import reduce\n", + "\n", + "def product(ns):\n", + " return reduce(lambda a, b: a * b, ns, 1)\n", + "\n", + "product([2, 3, 1, 3])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sieci rekurencyjne\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "W jaki sposób „złamać” przemienność i wprowadzić porządek? Jedną z\n", + "najprostszych operacji nieprzemiennych jest konkatenacja — możemy\n", + "dokonać konkatenacji wektora stanu i bieżącego stanu, a następnie\n", + "zastosować jakąś prostą operację (na wyjściu musimy mieć wektor o\n", + "rozmiarze $p$, nie $p + m$!), dobrze przy okazji „złamać” też\n", + "liniowość operacji. Możemy po prostu zastosować rzutowanie (mnożenie\n", + "przez macierz) i jakąś prostą funkcję aktywacji (na przykład sigmoidę):\n", + "\n", + "$$R(\\vec{s}, \\vec{e}) = \\sigma(W[\\vec{s},\\vec{e}] + \\vec{b}).$$\n", + "\n", + "Dodatkowo jeszcze wprowadziliśmy wektor obciążeń $\\vec{b}$, a zatem wyuczalne wagi obejmują:\n", + "\n", + "- macierz $W \\in \\mathcal{R}^p \\times \\mathcal{R}^{p+m}$,\n", + "- wektor obciążeń $b \\in \\mathcal{R}^p$.\n", + "\n", + "Olbrzymią zaletą sieci rekurencyjnych jest fakt, że liczba wag nie zależy od rozmiaru wejścia!\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Zwykła sieć rekurencyjna\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wyżej zdefiniową sieć nazywamy „zwykłą” siecią rekurencyjną (*Vanilla RNN*).\n", + "\n", + "**Uwaga**: przez RNN czasami rozumie się taką „zwykłą” sieć\n", + "rekurencyjną, a czasami szerszą klasę sieci rekurencyjnych\n", + "obejmujących również sieci GRU czy LSTM (zob. poniżej).\n", + "\n", + "![img](./12_Rekurencyjny_model_jezyka/rnn.drawio.png \"Schemat prostego modelu języka opartego na zwykłej sieci rekurencyjnych\")\n", + "\n", + "**Uwaga**: powyższy schemat nie obejmuje już „całego” działania sieci,\n", + " tylko pojedynczy krok czasowy.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Praktyczna niestosowalność prostych sieci RNN\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Niestety w praktyce proste sieci RNN sprawiają duże trudności jeśli\n", + "chodzi o propagację wsteczną — pojawia się zjawisko zanikającego\n", + "(rzadziej: eksplodującego) gradientu. Dlatego zaproponowano różne\n", + "modyfikacje sieci RNN. Zacznijmy od omówienia stosunkowo prostej sieci GRU.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sieć GRU\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "GRU (*Gated Recurrent Unit*) to sieć z dwiema ****bramkami**** (*gates*):\n", + "\n", + "- bramką resetu (*reset gate*) $\\Gamma_\\gamma \\in \\mathcal{R}^p$ — która określa, w jakim\n", + " stopniu sieć ma pamiętać albo zapominać stan z poprzedniego kroku,\n", + "- bramką aktualizacji (*update gate*) $\\Gamma_u \\in \\mathcal{R}^p$ — która określa wpływ\n", + " bieżącego wyrazu na zmianę stanu.\n", + "\n", + "Tak więc w skrajnym przypadku:\n", + "\n", + "- jeśli $\\Gamma_\\gamma = [0,\\dots,0]$, sieć całkowicie zapomina\n", + " informację płynącą z poprzednich wyrazów,\n", + "- jeśli $\\Gamma_u = [0,\\dots,0]$, sieć nie bierze pod uwagę\n", + " bieżącego wyrazu.\n", + "\n", + "Zauważmy, że bramki mogą selektywnie, na każdej pozycji wektora stanu,\n", + "sterować przepływem informacji. Na przykład $\\Gamma_\\gamma =\n", + "[0,1,\\dots,1]$ oznacza, że pierwsza pozycja wektora stanu jest\n", + "zapominana, a pozostałe — wnoszą wkład w całości.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wzory\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Najpierw zdefiniujmy pośredni stan $\\vec{\\xi} \\in \\mathcal{R}^p$:\n", + "\n", + "$$\\vec{\\xi_t} = \\operatorname{tanh}(W_{\\xi}[\\Gamma_\\gamma \\bullet \\vec{s_{t-1}}, E(w_t)] + b_{\\xi}),$$\n", + "\n", + "gdzie $\\bullet$ oznacza iloczyn Hadamarda (nie iloczyn skalarny!) dwóch wektorów:\n", + "\n", + "$$[x_1,\\dots,x_n] \\bullet [y_1,\\dots,y_n] = [x_1 y_1,\\dots,x_n y_n].$$\n", + "\n", + "Jak widać, obliczanie $\\vec{\\xi_t}$ bardzo przypomina zwykłą sieć rekurencyjną,\n", + "jedyna różnica polega na tym, że za pomocą bramki $\\Gamma_\\gamma$\n", + "modulujemy wpływ poprzedniego stanu.\n", + "\n", + "Ostateczna wartość stanu jest średnią ważoną poprzedniego stanu i bieżącego stanu pośredniego:\n", + "\n", + "$$\\vec{s_t} = \\Gamma_u \\bullet \\vec{\\xi_t} + (1 - \\Gamma_u) \\bullet \\vec{s_{t-1}}.$$\n", + "\n", + "Skąd się biorą bramki $\\Gamma_\\gamma$ i $\\Gamma_u$? Również z poprzedniego stanu i z bieżącego wyrazu.\n", + "\n", + "$$\\Gamma_\\gamma = \\sigma(W_\\gamma[\\vec{s_{t-1}},E(w_t)] + \\vec{b_\\gamma}),$$\n", + "\n", + "$$\\Gamma_u = \\sigma(W_u[\\vec{s_{t-1}},E(w_t)] + \\vec{b_u}),$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sieć LSTM\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Architektura LSTM (*Long Short-Term Memory*), choć powstała wcześniej\n", + "niż GRU, jest od niej nieco bardziej skomplikowana.\n", + "\n", + "- zamiast dwóch bramek LSTM zawiera ****trzy bramki****: bramkę wejścia (*input gate*),\n", + " bramkę wyjścia (*output gate*) i bramkę zapominania (*forget gate*),\n", + "- oprócz ukrytego stanu $\\vec{s_t}$ sieć LSTM posiada również ****komórkę pamięci**** (*memory cell*),\n", + " $\\vec{c_t}$, komórka pamięci, w przeciwieństwie do stanu, zmienia się wolniej (intuicyjnie:\n", + " *jeśli nie zrobimy nic specjalnego, wartość komórki pamięci się nie zmieni*).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wzory\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Komórka pamięci modulowana jest za pomocą bramki zapominania ($\\Gamma_f$) i bramki\n", + "wejścia ($\\Gamma_i$), bramki te określają, na ile uwzględniamy, odpowiednio,\n", + "poprzednią wartość komórki pamięci $\\vec{c_{t-1}}$ i wejście, a\n", + "właściwie wejście w połączeniu z poprzednim stanem:\n", + "\n", + "$$\\vec{c_t} = \\Gamma_f \\bullet \\vec{c_{t-1}} + \\Gamma_i \\bullet \\vec{\\xi_t},$$\n", + "\n", + "gdzie wektor pomocniczy $\\vec{\\xi_t}$ wyliczany jest w następujący sposób:\n", + "\n", + "$$\\vec{\\xi_t} = \\operatorname{tanh}(W_{\\xi}[\\vec{s_{t-1}}, E(w_t)] + \\vec{b_\\xi}.$$\n", + "\n", + "Nowa wartość stanu sieci nie zależy bezpośrednio od poprzedniej wartości stanu, lecz\n", + "jest równa komórce pamięci modulowanej bramką wyjścia:\n", + "\n", + "$$\\vec{h_t} = \\Gamma_o \\bullet \\operatorname{tanh}(\\vec{c_t}).$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Obliczanie bramek\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wartości wszystkie trzech bramek są liczone w identyczny sposób (wzory\n", + "różnią się tylko macierzami wag i wektorem obciążeń):\n", + "\n", + "$$\\Gamma_f = \\sigma(W_f[\\vec{s_{t-1}}, E(w_t)] + \\vec{b_f}),$$\n", + "\n", + "$$\\Gamma_i = \\sigma(W_i[\\vec{s_{t-1}}, E(w_t)] + \\vec{b_i}),$$\n", + "\n", + "$$\\Gamma_o = \\sigma(W_o[\\vec{s_{t-1}}, E(w_t)] + \\vec{b_o}).$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wartości początkowe\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Początkowe wartości stanu i komórki pamięci mogą być ustawione na zero:\n", + "\n", + "$$\\vec{s_0} = \\vec{0},$$\n", + "\n", + "$$\\vec{c_0} = \\vec{0}.$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Podsumowanie\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sieci LSTM dominowały w zagadnieniach przetwarzania języka naturalnego\n", + "(ogólniej: przetwarzania sekwencji) do czasu pojawienia się\n", + "architektury Transformer w 2017 roku.\n", + "\n", + "Na sieci LSTM oparty był ELMo, jeden z pierwszych dużych\n", + "****pretrenowanych modeli języka****, dostrajanych później pod konkretne\n", + "zadania (na przykład klasyfikację tekstu), zob. artykuł [Deep\n", + "contextualized word\n", + "representations]([https://arxiv.org/pdf/1802.05365.pdf](https://arxiv.org/pdf/1802.05365.pdf)). Dokładniej\n", + "mówiąc, ELMo był siecią ****BiLSTM****, połączeniem dwóch sieci, jednej\n", + "działającej z lewej strony na prawą, drugiej — z prawej do lewej.\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + }, + "org": null + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/wyk/12_Rekurencyjny_model_jezyka/fold.png b/wyk/12_Rekurencyjny_model_jezyka/fold.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f9dd931c0437847464791dc8ed0ef904771d6f GIT binary patch literal 88384 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 literal 0 HcmV?d00001 diff --git a/wyk/12_Rekurencyjny_model_jezyka/rnn.drawio b/wyk/12_Rekurencyjny_model_jezyka/rnn.drawio new file mode 100644 index 0000000..22b852e --- /dev/null +++ b/wyk/12_Rekurencyjny_model_jezyka/rnn.drawio @@ -0,0 +1 @@ +5Vrbcto6FP0aHjljyzaYx0LIbZLpSXOmbZ46KlaMirB8ZIExX18Jy/gmCEnABPIC0rIu1l77pg0tazBdXDEYju+ph0gLGN6iZV20AOjZpviUQJICZqdnp4jPsKewHHjES6RAQ6Ez7KGoNJBTSjgOy+CIBgEa8RIGGaNxedgzJeVdQ+ijGvA4gqSO/sAeH6eoC7o5fo2wP852FgdMn0xhNlgtEY2hR+MUWh3OGrasAaOUp63pYoCIFF4ml1QClxuerl+MoYDvMuHh63389Woyubq7Cb79f+lz071rq5eNeJIdGHni/KpLGR9TnwaQDHO0z+gs8JBc1RC9fMwdpaEATQH+QZwnikw441RAYz4l6ilaYP5TTv/HUb0ntZhsXyyKnUR16qfNxEpnbIS2HLGjtAYyH/Et49x0nDx/YQMlyytEp4izRAxgiECO52X9gErN/PW4nAnRUGS8ghj11nNIZmqnGlM5D1Ko8Rhz9BjClSxiYYxlmW+U3xwxjhZbT6yeAkPZpLLltqP6cW4YtquwccEoLONAQjLtU1FfIXWWFCbJ7lO2nuzk01a996u9u6Pam9aH0nv3BPTePL7iGxoxdYjYto9Fw5cNQumkPQszXOyzflQTqZAEL8st4oxO0IASygQS0ECazjMmpAJBgv1AdEdCvkjgfSlXLOLnF/Vgij1vZXc6osq2uAeuHKMrDKzIFnDrZHUa5cqscRVDFvEYCpDgAFPZOldC7E7ZeEwNHabRKB+gxkdEn/kULs6YBVB1YcbRabA2ujAPzzNPxehy0ho4LRdATwqBwdijIf2N0Qq1lRl5RH5OoAT7Aw/5tCVPLNIDO/6FZdsZ4EB8f0/BglMsbKbZP4N+sypSnXquqgN6oOJR2+vLWUF5QM85jPIMfyyT/9iN9dO6TfDylsb9p0XbOWre11DWV8nIXkwDR9T9c/nQe7rEt+PedwcMp16/bdXTQNoJ+xYY9n/R2f31wHu4uLketZtK+ra95EdK+myrlkjYGpdpHchlasX0eW87+7ucqKn/Uiy2KKSNoMS1BSocpnamZhWLLC8sBLqVhVJDrC30hTGYFIaFckC0+wuDnvG69yqPF430DXLlXAv37fqqq2FoImwapVvdPhZeqHuxPUKfa5i1u9Uwa1nNXVy0IaH7ad1NMapujpY7RFVn3+7rXYTWL6JHD7OWU1Z6U5Namt0mtb5zKlr/du116tq7rQbdvPZqc/6T+alikzsydnJHr836d2VYK1P3mO7I0bijVeh3BhH2pzBLBKqsE4LDaFNgLnAHozD9RfAZL6QOHKKQoqsEa7yVfShvVS+XzyYs4bIa8pmKjPllrRg3nAPFDa0p1auK+wiuNRloJLU5uNaL4U3eYbViOuod1iz68LVHf8mLl3x47tL36sW1stLUbjar3rHC8k5l3LVjn6ORuOhF6W0PyNveCV/43mWc66x2i2ke6rqnJbJ+W484lDXzpTwXDdkSeQFOS+sTIfKZ+B4tYUTjFXa2PDkVnpr8AWtz0vY2izM/s8V1eh/M4jS/4gc0Tlbil5Z3tkRUXV/vcCYluvlf7NLCZv5HRWv4Fw== \ No newline at end of file diff --git a/wyk/12_Rekurencyjny_model_jezyka/rnn.drawio.png b/wyk/12_Rekurencyjny_model_jezyka/rnn.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..91a7261bc70d8c5ed5e8899f38923824f46c27ee GIT binary patch literal 31606 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

    xz)}+WW~$7(oPX=8hm2P#a$^SQ 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

      T5ti9TM=@uO5Lq$+L zmsG^N@@}P2#NWAfp%@QqYTz8S_H~3kpN2R4>}F!%ylwQG)_059c!r&HC<8c*7Q-{L z3uz!tq(JlS^j+%k4ss}4M*}Bg))NKqAb*?MY2Zp6cZ_iUee(b3A2t>Gv9hA5rmoJy zz`(FgzH#Ns{*aK6sA~@gHa0fs-FqUCTfGmSxeVMo`P&+FgX81lyzf_5R-zUc7e{~o z^jA_-JMgK#wwAZNygX`PU|@e}ATu2*l#87fT3V;fDI{P2d~k4(_b+r07K@FVT1C|m z2!x}x<5ioF4}HJbCtKq8N#NH|eSQ7t+S*z@>7;}P$PBcG!tZ){q8Ll9g+@KSyu2>o zxN)%6R*Tl%-CaBV@X)#W_4UwenORKdpsi+s3oSIR%>|m~EsbUvPR-RP0_jk0+6`{0eWHC~2{xgJ!Vwl&q4%a#PMuCAWna6G>H zYrmhDvhr;ajn5C581Xmn^~b<0{NWYmoiMR>q$1x~Yv|h?wbOxgjfs8I5T<0wM>j)c zUZ5B;(n4efd!<(KKl22&4wHGkxMmQ#guH(rChdLh_Z83@{2kT=x20(sPx&*6ZfWGg zt<8-*?)^WLN^WOP*^^L$?BA2BtMFD=KW=m{;qOWI|L|+Wns)^C8Ts@osNCNH|MYdS KI^|kt!~YNS\n", + "

      Modelowanie języka

      \n", + "

      13. Atencja [wykład]

      \n", + "

      Filip Graliński (2022)

      \n", + "\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Atencja\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sieci LSTM w roku 2017/2018 zostały wyparte przez nową, pod pewnymi\n", + "względami prostszą, architekturę Transformer. Sieci Transformer oparte\n", + "są zasadniczo na prostej idei **atencji** (*attention*), pierwszy\n", + "artykuł wprowadzający sieci Transformer nosił nawet tytuł\n", + "[Attention Is All You Need]([https://arxiv.org/abs/1706.03762](https://arxiv.org/abs/1706.03762)).\n", + "\n", + "Intuicyjnie, atencja jest rodzajem uwagi, którą sieć może selektywnie\n", + "kierować na wybrane miejsca (w modelowaniu języka: wybrane wyrazy).\n", + "\n", + "Idea atencji jest jednak wcześniejsza, powstała jako ulepszenie sieci\n", + "rekurencyjnych. My omówimy ją jednak na jeszcze prostszym przykładzie\n", + "użycia w modelowaniu języka za pomocą hybrydy modelu\n", + "bigramowego i modelu worka słów.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Prosty przykład zastosowania atencji\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wróćmy do naszego przykładu z Wykładu 8, w którym łączyliśmy $n$-gramowy\n", + "model języka z workiem słów. Przyjmijmy bigramowy model języka ($n=2$), wówczas:\n", + "\n", + "$$y = \\operatorname{softmax}(C[E(w_{i-1}),A(w_1,\\dots,w_{i-2})]),$$\n", + "\n", + "gdzie $A$ była prostą agregacją (np. sumą albo średnią) embeddingów\n", + "$E(w_1),\\dots,E(w_{i-2})$. Aby wyjść z nieuporządkowanego\n", + "modelu worka słów, próbowaliśmy w prosty sposób uwzględnić pozycję\n", + "wyrazów czy ich istotność (za pomocą odwrotnej częstości\n", + "dokumentowej). Oba te sposoby niestety zupełnie nie uwzględniają **kontekstu**.\n", + "\n", + "Innymi słowy, chcielibyśmy mieć sumę ważoną zanurzeń:\n", + "\n", + "$$A(w_1,\\dots,j) = \\omega_1 E(w_1) + \\dots + \\omega_j E(w_j) = \\sum_{k=1}^j \\omega_k E(w_k),$$\n", + "\n", + "tak by $\\omega_k$ w sposób bardziej zasadniczy zależały od lokalnego kontekstu, a\n", + "nie tylko od pozycji $k$ czy słowa $w_k$. W naszym uproszczonym przypadku\n", + "jako kontekst możemy rozpatrywać słowo bezpośrednio poprzedzające\n", + "odgadywane słowa (kontekstem jest $w_{i-1}$).\n", + "\n", + "Wygodnie również przyjąć, że $\\sum_{k=1}^j \\omega_k = 1$ i $\\omega_k\n", + "\\in (0,1)$, wówczas mamy do czynienia ze średnią ważoną.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Nieznormalizowane wagi atencji\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Będziemy liczyć nieznormalizowane ****wagi atencji****\n", + "$\\hat{\\alpha}_{k,j}$. Określają one, jak bardzo słowo $w_j$ „zwraca\n", + "uwagę” na poszczególne, inne słowa. Innymi słowy, wagi atencji opisują, jak\n", + "bardzo słowo $w_k$ pasuje do naszego kontekstu, czyli słowa $w_j$.\n", + "\n", + "**Uwaga**: (nieznormalizowane czy znormalizowane) wagi atencji nie należą do wyuczalnych\n", + "wag (parametrów) modelu.\n", + "\n", + "Najprostszy sposób mierzenia dopasowania to po prostu iloczyn skalarny:\n", + "\n", + "$$\\hat{\\alpha}_{k,j} = E(w_k)E(w_j),$$\n", + "\n", + "można też alternatywnie złamać symetrię iloczynu skalarnego i\n", + "wyliczać dopasowanie za pomocą prostej sieci feed-forward:\n", + "\n", + "$$\\hat{\\alpha}_{k,j} =\n", + "\\vec{v}\\operatorname{tanh}(W_{\\alpha}[E(w_k),E(w_j)] +\n", + "\\vec{b_{\\alpha}}).$$\n", + "\n", + "W drugim przypadku pojawiają się dodatkowe wyuczalne parametry: macierz $W_{\\alpha}$, wektory\n", + "$\\vec{b_{\\alpha}}$ i $\\vec{v}$.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Normalizacja wag atencji\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jak już wspomniano, dobrze żeby wagi atencji sumowały się do 1. W tym celu możemy po prostu zastosować\n", + "funkcję softmax:\n", + "\n", + "$$\\alpha_{k,j} = \\operatorname{softmax}([\\hat{\\alpha}_{1,j},\\dots,\\hat{\\alpha}_{j-1,j}]).$$\n", + "\n", + "Zauważmy jednak, że otrzymanego z funkcji softmax wektora\n", + "$[\\alpha_{1,j},\\dots,\\alpha_{j-1,j}]$ tym razem nie interpretujemy jako rozkład prawdopodobieństwa.\n", + "Jest to raczej rozkład uwagi, atencji słowa $w_j$ względem innych słów.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Użycie wag atencji w prostym neuronowym modelu języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Teraz jako wagi $\\omega$ w naszym modelu języka możemy przyjąć:\n", + "\n", + "$$\\omega_k = \\alpha_{k,i-1}.$$\n", + "\n", + "Oznacza to, że z naszego worka będziemy „wyjmowali” słowa w sposób\n", + "selektywny, w zależności od wyrazu, który bezpośrednio poprzedza\n", + "słowo odgadywane.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Diagram\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![img](./13_Atencja/simple-attention.drawio.png \"Atencja użyta w prostym neuronowym modelu języka\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Atencja jako składnik sieci rekurencyjnej\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Atencję wprowadzono pierwotnie jako uzupełnienie sieci rekurencyjnej.\n", + "Potrzeba ta pojawiła się na początku rozwoju **neuronowego tłumaczenia\n", + "maszynowego** (*neural machine translation*, *NMT*), czyli tłumaczenia\n", + "maszynowego (automatycznego) realizowanego za pomocą sieci neuronowych.\n", + "\n", + "Neuronowe tłumaczenie maszynowe jest właściwie rozszerzeniem idei\n", + "modelowania języka na biteksty (teksty równoległe). Omówmy najpierw\n", + "podstawy generowania tekstu.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Model języka jako generator\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jak pamiętamy, model języka $M$ wylicza prawdopodobieństwo tekstu $w_1,\\dots,w_N$:\n", + "\n", + "$$P_M(w_1,\\dots,w_N) = ?.$$\n", + "\n", + "Zazwyczaj jest to równoważne obliczaniu rozkładu prawdopodobieństwa kolejnego słowa:\n", + "\n", + "$$P_M(w_j|w_1,\\dots,w_{j-1}) = ?.$$\n", + "\n", + "Załóżmy, że mamy pewien początek (**prefiks**) tekstu o długości $p$:\n", + "$w_1,\\dots,w_p$. Powiedzmy, że naszym celem jest **wygenerowanie**\n", + "dokończenia czy kontynuacji tego tekstu (nie określamy z góry\n", + "długości tej kontynuacji).\n", + "\n", + "Najprostszy sposób wygenerowania pierwszego wyrazu dokończenia polega\n", + "na wzięciu wyrazu maksymalizującego prawdopodobieństwo według modelu języka:\n", + "\n", + "$$w_{p+1} = \\operatorname{argmax}_w P_M(w|w_1,\\dots,w_p).$$\n", + "\n", + "**Pytanie**: Dlaczego $\\operatorname{argmax}$, a nie $\\operatorname{max}$?\n", + "\n", + "Słowo $w_{p+1}$ możemy dołączyć do prefiksu i powtórzyć procedurę:\n", + "\n", + "$$w_{p+2} = \\operatorname{argmax}_w P_M(w|w_1,\\dots,w_p,w_{p+1}),$$\n", + "\n", + "i tak dalej.\n", + "\n", + "**Pytanie**: Kiedy zakończymy procedurę generowania?\n", + "\n", + "Omawiana procedura jest najprostszym sposobem, czasami nie daje\n", + "najlepszego wyniku, na przykład może pojawić się efekt „jąkania”\n", + "(model generuje w kółko ten sam wyraz), dlatego opracowano bardziej\n", + "wymyślne sposoby generowania w oparciu o modele języka. Omówimy je później.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Zastosowania generatora opartego na modelu języka\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Mogłoby się wydawać, że generator tekstu ma raczej ograniczone\n", + "zastosowanie (generowanie fake newsów?). Okazuje się jednak, że\n", + "zaskakująco wiele zadań przetwarzania języka naturalnego można\n", + "przedstawić jako zadanie generowania tekstu. Przykładem jest tłumaczenie maszynowe.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Tłumaczenie maszynowe jako zadanie generowania tekstu\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "W tłumaczeniu maszynowym (tłumaczeniu automatycznym, ang. *machine\n", + "translation*) na wejściu podawany jest tekst (na ogół pojedyncze\n", + "zdanie) źródłowy (*source sentence*) $S = (u_1,\\dots,u_{|S|})$, celem\n", + "jest uzyskanie tekstu docelowego (*target sentence*)\n", + "$T=(w_1,\\dots,w_{|T|})$. Zakładamy, że $S$ jest tekstem w pewnym języku\n", + "źródłowym (*source language*), $T$ zaś — w innym języku, języku\n", + "docelowym (*target language*).\n", + "\n", + "Współczesne tłumaczenie maszynowe jest oparte na metodach\n", + "statystycznych — system uczy się na podstawie obszernego zbioru\n", + "odpowiadających sobie zdań w obu językach. Taki zbiór nazywamy\n", + "korpusem równoległym (*parallel corpus*). Duży zbiór korpusów\n", + "równoległych dla wielu języków można znaleźć na stronie projektu [OPUS]([https://opus.nlpl.eu/](https://opus.nlpl.eu/)).\n", + "Zobaczmy na przykład fragment EUROPARL (protokoły Parlamentu Europejskiego):\n", + "\n", + " $ wget 'https://opus.nlpl.eu/download.php?f=Europarl/v8/moses/en-pl.txt.zip' -O en-pl.txt.zip\n", + " $ unzip en-pl.txt.zip\n", + " $ paste Europarl.en-pl.en Europarl.en-pl.pl | shuf -n 5\n", + " The adoption of these amendments by the Committee on the Environment meant that we could place more emphasis on patients' rights to information, rather than make it an option for the pharmaceutical industries to provide that information.\tPrzyjęcie tych poprawek przez Komisję Ochrony Środowiska Naturalnego oznaczało, że mogliśmy położyć większy nacisk na prawo pacjentów do informacji, zamiast uczynić zeń możliwość, z której branża farmaceutyczna może skorzystać w celu dostarczenia informacji.\n", + " I hope that the High Representative - who is not here today - will raise this episode with China and also with Nepal, whose own nascent democracy is kept afloat partly by EU taxpayers' money in the form of financial aid.\tMam nadzieję, że nieobecna dzisiaj wysoka przedstawiciel poruszy tę kwestię w rozmowach z Chinami, ale również z Nepalem, którego młoda demokracja funkcjonuje częściowo dzięki finansowej pomocy pochodzącej z pieniędzy podatników w UE.\n", + " Immunity and privileges of Renato Brunetta (vote)\tWniosek o obronę immunitetu parlamentarnego Renata Brunetty (głosowanie)\n", + " The 'new Member States' - actually, the name continues to be sort of conditional, making it easier to distinguish between the 'old' Member States and those that acceded to the EU after two enlargement rounds, owing to their particular historical background and perhaps the fact that they are poorer than the old ones.\"Nowe państwa członkowskie” - ta nazwa nadal ma w pewnym sensie charakter warunkowy i ułatwia rozróżnienie pomiędzy \"starszymi” państwami członkowskimi oraz tymi, które przystąpiły do UE po dwóch rundach rozszerzenia, które wyróżnia ich szczególna historia, a zapewne także fakt, że są uboższe, niż starsze państwa członkowskie.\n", + " The number of armed attacks also rose by 200% overall.\tTakże liczba ataków zbrojnych wzrosła łącznie o 200 %.\n", + "\n", + "Zauważmy, że możemy taki (bi)tekst modelować po prostu traktując jako\n", + "jeden ciągły tekst. Innymi słowy, nie modelujemy tekstu angielskiego ani polskiego,\n", + "tylko angielsko-polską mieszankę, to znaczy uczymy model, który najpierw modeluje prawdopodobieństwo\n", + "po stronie źródłowej (powiedzmy — angielskiej):\n", + "\n", + " The number of armed attacks also ?\n", + "\n", + "W momencie napotkania specjalnego tokenu końca zdania źródłowego (powiedzmy ``) model\n", + "powinien nauczyć się, że musi przełączyć się na modelowanie tekstu w języku docelowym (powiedzmy — polskim):\n", + "\n", + " The number of armed attacks also rose by 200% overall.Także liczba ataków ?\n", + "\n", + "W czasie uczenia wykorzystujemy korpus równoległy traktując go po prostu jako zwykły ciągły tekst\n", + "(dodajemy tylko specjalne tokeny końca zdania źródłowego i końca zdania docelowego).\n", + "\n", + "W fazie inferencji (w tłumaczeniu maszynowym tradycyjnie nazywaną\n", + "**dekodowaniem**) zamieniamy nasz model języka w generator i podajemy\n", + "tłumaczone zdanie jako prefiks, doklejając tylko token ``.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Neuronowe modele języka jako translatory\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jako że n-gramowego modelu języka ani modelu opartego na worku słów\n", + "nie da się użyć w omawiany sposób w tłumaczeniu maszynowym\n", + "(dlaczego?), jako pierwszych użyto w neuronowym tłumaczeniu maszynowym\n", + "sieci LSTM, przy zastosowaniu omawianego wyżej sposobu.\n", + "\n", + "System tłumaczenia oparte na sieciach LSTM działały zaskakująco\n", + "dobrze, zważywszy na to, że cała informacja o zdaniu źródłowym musi\n", + "zostać skompresowana do wektora o stałym rozmiarze. (Dlaczego? W\n", + "momencie osiągnięcia tokenu `` cały stan sieci to kombinacja\n", + "właściwego stanu $\\vec{s_i}$ i komórki pamięci $\\vec{c_i}$.)\n", + "\n", + "Neuronowe tłumaczenie oparte na sieciach LSTM działa względnie dobrze\n", + "dla krótkich zdań, dla dłuższych rezultaty są gorsze — po prostu sieć\n", + "nie jest w stanie skompresować w wektorze o stałej długości znaczenia\n", + "całego zdania. Na początku rozwoju neuronowego tłumaczenia maszynowego\n", + "opracowano kilka metod radzenia sobie z tym problemem (np. zaskakująco\n", + "dobrze działa odwrócenie zdania źródłowego — siec LSTM łatwiej zacząć\n", + "generować zdanie docelowe, jeśli niedawno „widziała” początek zdania\n", + "źródłowego, przynajmniej dla pary języków o podobnym szyku).\n", + "\n", + "Najlepsze efekty dodało dodanie atencji do modelu LSTM\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Atencja w sieciach rekurencyjnych\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Funkcję rekurencyjną można rozbudować o trzeci argument, w którym\n", + "podany będzie wynik działania atencji $A'$ względem ostatniego wyrazu, tj.:\n", + "\n", + "$$A(w_1,\\dots,w_t) = R(A(w_1,\\dots,w_{t-1}), A'(w_1,\\dots,w_{t-1}), E(w_t)),$$\n", + "\n", + "W czasie tłumaczenia model może kierować swoją uwagę na wyrazy\n", + "powiązane z aktualnie tłumaczonym fragmentem (zazwyczaj — po prostu odpowiedniki).\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + }, + "org": null + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/wyk/13_Atencja/simple-attention.drawio b/wyk/13_Atencja/simple-attention.drawio new file mode 100644 index 0000000..76a6105 --- /dev/null +++ b/wyk/13_Atencja/simple-attention.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/wyk/13_Atencja/simple-attention.drawio.png b/wyk/13_Atencja/simple-attention.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..350632717d9cbce5ff57133962f4db65dd424ed1 GIT binary patch literal 79930 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
      F46?Vl)wVkxBQWuW;8=f+xzn6avc7#r> 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 q@(B{tSX)i)KQ>R~+X}3|BHl=F#S7V-IY