diff --git a/cw/08_Model_neuronowy_typu_word2vec.ipynb b/cw/08_Model_neuronowy_typu_word2vec.ipynb new file mode 100644 index 0000000..3c6a62b --- /dev/null +++ b/cw/08_Model_neuronowy_typu_word2vec.ipynb @@ -0,0 +1,159 @@ +{ + "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", + "

8. Model neuronowy typu word2vec [ć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": [ + "## Zadania" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Proszę wykonać zadanie 1 lub zadanie 2 (nie oba naraz). Zadanie 3 można zrobić niezależnie." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadanie 1\n", + "\n", + "Wzorując się na materiałach z wykładu stworzyć 5-gramowy model neuronowy oparty na jednym ze schematów z wykładu, np.\n", + "\n", + "\n", + "![img](bow1.drawio.png \"Model typu worek słów\")\n", + "\n", + "\n", + "Warunkiem koniecznym jest, żeby przewidywać słowo środkowe, np. Mając tekst ['Ala', 'ma', '[MASK]'\n", + " 'i', 'psa'] chcemy przewidzieć kontekst środkowego słowa (tutaj '[MASK]')\n", + "\n", + "\n", + "\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ż 6.50 (liczone przy pomocy geval)\n", + "- deadline do końca dnia 08.05\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 **5gram**!\n", + "- zadanie tym razem jest dla polskiego odpowiednika word-gap https://gonito.net/challenge-my-submissions/retro-gap\n", + "- metryka to LogLossHashed (praktycznie to samo, co PerlpexityHased). Przelicznik, to LogLossHased = log(PerplexityHashed). Podając równe prawd. dla każdego słowa dostaniemy 6.93, bo log(1024) = 6.93\n", + "\n", + "Punktacja:\n", + "- podstawa: 60 punktów\n", + "- 40 punktów z najlepszy wynik z 2 grup\n", + "- 20 punktów z 3 kolejno najlepszych wyników z 2 grup\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Jak stworzyć model?\n", + "- warto bazować na kodzie ze wykładu 7 Zanurzenia słów\n", + "- elementy, które na pewno trzeba będzie wykorzystać to: nn.Embedding, nn.Linear, nn.Softmax\n", + "- w odróżnieniu do materiałów z wykładu lepiej nie korzystać z nn.Sequential, tylko wszystki operacje zapisywać w model.forward. Przy użyciu sequential może być problem np. z dodawaniem lub konkatenacją tensorów" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### W jaki sposób uzyskać lepszy wynik?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Po pierwsze proszę stosować sie do rad z poprzednich cwiczeń (trenowanie przez kilka epok i monitorowanie wyniku na zbiorze deweloperskim)\n", + "- dobry start to zawsze zaczęcie od jak najprostszego modelu (czyli 1 warstwa liniowa, zwykłe dodawanie embeddingów słów) i dopiero później go rozbudowywać monitorując wynik. Jest to rada uniwersalna w uczeniu maszynowym.\n", + "- Poza tym warto wypróbować przynajmniej kilka modeli z wykładu. Mając zaimplementowany cały kod dla jednego modelu, wystarczy jedynie delikatnie zmienić architekturę modelu i wytrenować go od nowa. Cała reszta kodu zostaje bez zmian.\n", + "- warto spróbować dodanie np 2 warstw liniowych (lub nawet 3) zamiast jednej warstwy (koniecznie trzeba dodać między nimi funkcję aktywacji, np RELU).\n", + "- poza tym można zmieniać różne parametry (np. wielkość słownika, wielkość warstwy ukrytej, różne funkcje aktywacji)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadanie 2\n", + "\n", + "Proszę zrobić parameter Hyperparameter Tuning dla zadania 1 i zaprezentować na forum grupy razem z wnioskami\n", + "\n", + "- wymóg wyniku najlepszego modelu, conajwyżej 6.10\n", + "- wnioski nie muszą być specjalnie rozbudowane, prezentacja może trwać 3-5minut lub dłużej\n", + "- należy wybrać dla siebie metodę hypermarameter tuningu\n", + "- należy stworzyć conajmniej 10 modeli, należy pokazać wyniku dla conajmniej paru\n", + "- oczywiście kod musi być automatyczny (a nie ręcznie zmieniamy paratery), natomiast nie ma wymogu korzystania ze specjalnych bibliotek\n", + "- podstawa punktów 100\n", + "- za wynik lepszy (niższy) niż 5.50 +20 punktów\n", + "- użycie GPU na dowolnym cloud lub od WMI + 30 punktów\n", + "- termin 16.05 na zajęciach\n", + "- punkty przyznam na MS TEAMS, ale proszę zgłosić te rozwiązanie na gonito (nie trzeba w żadnym challenge ani z konkretymi tagami)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadanie 3\n", + "\n", + "Zaangażowanie się w pygonito.\n", + "\n", + "- https://github.com/filipggg/pygonito\n", + "- dobra okazja, żeby nauczyć się tworzyć paczki pythonowe\n", + "- wsparcie ode mnie lub prof. Gralińskiego przy tworzeniu\n", + "- może się przydać przy pracy magisterskiej (jeżeli wyzwanie będzie na gonito)\n", + "- ilość punktów zależy od zakresu pracy. Sczególnie warto samemu zaproponować co zrobić) Zakres prac i punktów do dogdania\n", + "- w celu ustalenia szczegółów proszę sie zgłosić do mnie\n", + "- termin dowolny" + ] + } + ], + "metadata": { + "author": "Jakub Pokrywka", + "email": "kubapok@wmi.amu.edu.pl", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.7" + }, + "subtitle": "0.Informacje na temat przedmiotu[ćwiczenia]", + "title": "Ekstrakcja informacji", + "year": "2021" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/cw/bow1.drawio.png b/cw/bow1.drawio.png new file mode 100644 index 0000000..c500af5 Binary files /dev/null and b/cw/bow1.drawio.png differ