diff --git a/cw/07_neuronowe_modele_językowe.ipynb b/cw/07_neuronowe_modele_językowe.ipynb
new file mode 100644
index 0000000..e3c1174
--- /dev/null
+++ b/cw/07_neuronowe_modele_językowe.ipynb
@@ -0,0 +1,152 @@
+{
+ "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",
+ " 7. Model neuronowy ff [ćwiczenia]
\n",
+ " Jakub Pokrywka (2022)
\n",
+ "\n",
+ "\n",
+ "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Instalacja pytorch\n",
+ "\n",
+ "https://pytorch.org/get-started/locally/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Tutorial pytorch\n",
+ "https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Zadanie"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Proszę wykonać tylko jedno zadanie z dwóch!**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Zadanie 1 (proste)\n",
+ "\n",
+ "Wzorując się na materiałach z wykładu stworzyć neuronowy, **bigramowy** model językowy.\n",
+ "\n",
+ "Warunki zaliczenia:\n",
+ "- wynik widoczny na platformie zarówno dla dev i dla test\n",
+ "- wynik dla dev i test lepszy (niższy) niż 1024.00 (liczone przy pomocy geval)\n",
+ "- deadline do końca dnia 24.04\n",
+ "- commitując rozwiązanie proszę również umieścić rozwiązanie w pliku /run.py (czyli na szczycie katalogu). Można przekonwertować jupyter do pliku python przez File → Download as → Python. Rozwiązanie nie musi być w pythonie, może być w innym języku.\n",
+ "- zadania wykonujemy samodzielnie\n",
+ "- w nazwie commita podaj nr indeksu\n",
+ "- w tagach podaj **neural-network** oraz **bigram**!\n",
+ "- uwaga na specjalne znaki \\\\n w pliku 'in.tsv' oraz pierwsze kolumny pliku in.tsv (które należy usunąć)\n",
+ "\n",
+ "Punktacja:\n",
+ "- podstawa: 60 punktów\n",
+ "- 40 punktów z najlepszy wynik z 2 grup\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Zadanie 2 (trudniejsze)\n",
+ "\n",
+ "Wzorując się na materiałach z wykładu stworzyć neuronowy, **trigramowy** model językowy.\n",
+ "\n",
+ "Warunki zaliczenia:\n",
+ "- wynik widoczny na platformie zarówno dla dev i dla test\n",
+ "- wynik dla dev i test lepszy (niższy) niż 1024.00 (liczone przy pomocy geval)\n",
+ "- deadline do końca dnia 24.04\n",
+ "- commitując rozwiązanie proszę również umieścić rozwiązanie w pliku /run.py (czyli na szczycie katalogu). Można przekonwertować jupyter do pliku python przez File → Download as → Python. Rozwiązanie nie musi być w pythonie, może być w innym języku.\n",
+ "- zadania wykonujemy samodzielnie\n",
+ "- w nazwie commita podaj nr indeksu\n",
+ "- w tagach podaj **neural-network** oraz **trigram**!\n",
+ "- uwaga na specjalne znaki \\\\n w pliku 'in.tsv' oraz pierwsze kolumny pliku in.tsv (które należy usunąć)\n",
+ "\n",
+ "Punktacja:\n",
+ "- podstawa: 120 punktów\n",
+ "- 40 punktów z najlepszy wynik z 2 grup\n",
+ "- 20 punktów za drugi najlepszy wynik z 2 grup"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## W jaki sposób uzyskać lepszy wynik?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Dla lepszych wyników, można trenować model przez kilka epok.\n",
+ "\n",
+ "Zgodnie z dobra praktyką w uczeniu maszynowym należy monitorować wynik (tutaj perplexity) na zbiorze deweloperskim w trakcie uczenia.\n",
+ "\n",
+ "Kod z wykładu pokazuje jedynie wynik funkcji kosztu na zbiorze trenującym. Dla kompletnego rozwiązania warto zaimplementować monitorowanie kosztu dla zbioru deweloperskiego.\n",
+ "Przy każdym sprawdzaniu wyniku, należy sprawdzać czy obecny model jest najlepszy i jeżeli jest najlepszy to zapisywać jego stan najlepiej w postaci binarnej (może byc pickle) do pliku\n",
+ "\n",
+ "\n",
+ "Po zakończeniu trenowania należy wybrać model który uzyskuje najmniejszy wynik funkcji kosztu dla zbioru deweloperskiego i użyć go do wygenerowania odpowiedzi dla zbioru testowego."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "![alt text](imgs/devsetppl.png)"
+ ]
+ }
+ ],
+ "metadata": {
+ "author": "Jakub Pokrywka",
+ "email": "kubapok@wmi.amu.edu.pl",
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "lang": "pl",
+ "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.8.3"
+ },
+ "subtitle": "0.Informacje na temat przedmiotu[ćwiczenia]",
+ "title": "Ekstrakcja informacji",
+ "year": "2021"
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/cw/imgs/devsetppl.png b/cw/imgs/devsetppl.png
new file mode 100644
index 0000000..3b7a2dc
Binary files /dev/null and b/cw/imgs/devsetppl.png differ