diff --git a/wyk/11_Transformer.ipynb b/wyk/14_Transformer.ipynb
similarity index 99%
rename from wyk/11_Transformer.ipynb
rename to wyk/14_Transformer.ipynb
index b5e0f8a..d586939 100644
--- a/wyk/11_Transformer.ipynb
+++ b/wyk/14_Transformer.ipynb
@@ -7,7 +7,7 @@
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"
\n",
"
Modelowanie języka
\n",
- " 11. Transformer [wykład]
\n",
+ " 14. Modele języka oparte na sieciach Transformer [wykład]
\n",
" Filip Graliński (2022)
\n",
"\n",
"\n",
@@ -486,7 +486,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.10.4"
+ "version": "3.10.5"
},
"org": null
},
diff --git a/wyk/11_Transformer.org b/wyk/14_Transformer.org
similarity index 92%
rename from wyk/11_Transformer.org
rename to wyk/14_Transformer.org
index bd9be02..76e2691 100644
--- a/wyk/11_Transformer.org
+++ b/wyk/14_Transformer.org
@@ -1,5 +1,5 @@
-* Transformer
+* Modele języka oparte na sieciach Transformer
** Atencja jako „miękka” baza danych
@@ -30,7 +30,7 @@ $$\vec{q_i} = W_q E(w_i).$$
Jeśli zanurzenie $E(w_i)$ o rozmiarze $m$ przedstawimy w postaci
kolumnowej, wówczas macierze będą $W_k$ i $W_q$ będą miały rozmiar
$d_k \times m$, gdzie $d_k$ jest rozmiarem kluczy i zapytań (dlaczego
-wektory kluczy i zapytań powinny mieć raczej ten sam rozmiar?), zaś macierz
+wektory kluczy i zapytań powinny mieć raczej ten sam rozmiar?), macierz zaś
$W_v$ — $d_v \times m$, gdzie $d_v$ to rozmiar zanurzenia wektora wartości.
Zazwyczaj $d_k = d_v = m$, ale nie jest to obligatoryjne.
@@ -87,7 +87,7 @@ języka jest używany wprost jako generator.
Dokonajmy najpierw tokenizacji:
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
text = "The World War III will begin in 2028 in"
@@ -100,7 +100,7 @@ Dokonajmy najpierw tokenizacji:
{'input_ids': tensor([[ 464, 2159, 1810, 6711, 481, 2221, 287, 1160, 2078, 287]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}
:end:
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
[tokenizer.decode(i) for i in encoded_input.input_ids[0]]
#+END_SRC
@@ -113,7 +113,7 @@ Zwróćmy uwagę, że w GPT-2 tokeny obejmują spacje!
Teraz uruchommy zasadniczy model:
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("gpt2")
outputs = model(**encoded_input)
@@ -123,7 +123,7 @@ Teraz uruchommy zasadniczy model:
:results:
:end:
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
softmax(outputs[0][0][-1])
#+END_SRC
@@ -135,7 +135,7 @@ Teraz uruchommy zasadniczy model:
Z modelu GPT-2 otrzymamy rozkład prawdopodobieństwa kolejnego wyrazu, najpierw w postaci
nieznormalizowanych *logitów*:
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
logits = outputs[0][0][-1]
logits
#+END_SRC
@@ -146,7 +146,7 @@ tensor([-130.2947, -129.5677, -136.4030, ..., -138.3791, -138.8967,
-131.6319], grad_fn=)
:end:
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
from torch import softmax, topk
k = 20
@@ -164,7 +164,7 @@ tensor([-130.2947, -129.5677, -136.4030, ..., -138.3791, -138.8967,
*** Generowanie tekstu za pomocą GPT-2
-#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
from transformers import pipeline
generator = pipeline('text-generation', model='gpt2')
generator('Hello, I\'m a language model,', max_length=30, num_return_sequences=1)
@@ -196,7 +196,7 @@ Samo to byłoby oczywiście zbyt proste:
1. Otrzymalibyśmy model (ważonego) worka słów, w dodatku każde słowo
miałoby zawsze taką samą wagę! — token $w_j$, który atenduje jest
zawsze ten sam (~~). Musimy wzbogacić reprezentację wektorową
- słów i specjalnego tokenu (~~).
+ słów i specjalnego tokena (~~).
2. Model Transformer w swojej podstawowej postaci w ogóle nie jest
wyposażony w pojęcie sekwencji — w przeciwieństwie do sieci
@@ -222,7 +222,7 @@ które znaczenie chodzi.
Rozwiązanie polega na tym, że wszystkim tokenom będziemy przypisywać kolejne
zanurzenia skontekstualizowane — zależne od innych tokenów w zdaniu. W
tym celu zastosujemy atencję wsobną (samo-atencję, /self-attention/).
-Każdy token będzie atendował potencjalnie do każdego innego tokenu,
+Każdy token będzie atendował potencjalnie do każdego innego tokena,
również do samego siebie (!).
*** Wzory
@@ -241,16 +241,16 @@ $$\vec{\alpha}_{*,i} = \operatorname{softmax}(\vec{q_i}^T K)$$
i $K$ jest macierzą kluczy o rozmiarze $d_k \times j$ (tym razem obejmuje również sam $i$-ty token).
-Nowa, skontekstualizowana reprezentacja $i$-tego tokenu będzie po prostu średnią wszystkich
+Nowa, skontekstualizowana reprezentacja $i$-tego tokena będzie po prostu średnią wszystkich
wektorów ważoną atencją:
$$E_1(w_i) = \operatorname{softmax}(\vec{q_i}^T K)^T V,$$
gdzie:
-- $E_1(w_i)$ — skontekstualizowane zanurzenie $i$-tego tokenu; używając indeksu $_1$
+- $E_1(w_i)$ — skontekstualizowane zanurzenie $i$-tego tokena; używając indeksu $_1$
zaznaczamy, że to jest pierwszy skonstekstualizowany embedding, rekurencyjnie będziemy budowali
- kolejne $E_2(w_i)$, $E_3(w_i)$ itd. (zaś wejściowy statyczny embedding możemy oznaczyć przez $E_0(w_i)$);
+ kolejne $E_2(w_i)$, $E_3(w_i)$ itd. (wejściowy statyczny embedding zaś możemy oznaczyć przez $E_0(w_i)$);
- $V$ — macierz wartości o rozmiarze $j \times d_v$.
**** Zwarta postać macierzowa atencji wsobnej
diff --git a/wyk/15_Pozycyjne_zanurzenia.ipynb b/wyk/15_Pozycyjne_zanurzenia.ipynb
index d2acf48..d56fbd7 100644
--- a/wyk/15_Pozycyjne_zanurzenia.ipynb
+++ b/wyk/15_Pozycyjne_zanurzenia.ipynb
@@ -7,7 +7,7 @@
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"\n",
"
Modelowanie języka
\n",
- " 15. Pozycyjne zanurzenia [wykład]
\n",
+ " 15. Sieci Transformer — pozycyjne zanurzenia [wykład]
\n",
" Filip Graliński (2022)
\n",
"\n",
"\n",
diff --git a/wyk/15_Pozycyjne_zanurzenia.org b/wyk/15_Pozycyjne_zanurzenia.org
index 0005f15..4e6f83b 100644
--- a/wyk/15_Pozycyjne_zanurzenia.org
+++ b/wyk/15_Pozycyjne_zanurzenia.org
@@ -1,4 +1,4 @@
-* Pozycyjne zanurzenia
+* Sieci Transformer — pozycyjne zanurzenia
** Atencja nie uwzględnia kolejności wyrazów