{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Modelowanie języka – laboratoria\n", "### 24 kwietnia 2024\n", "# 8. Model neuronowy typu word2vec " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zadania" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proszę wykonać zadanie 1 lub zadanie 2 (nie oba naraz)." ] }, { "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 **22 maja 2024** przed zajęciami\n", "\n", "- Zadanie można wykonać na zbiorze **https://gonito.csi.wmi.amu.edu.pl/challenge/challenging-america-word-gap-prediction** lub jego polskim odpowiedniku: **https://gonito.csi.wmi.amu.edu.pl/challenge/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", "Uwagi dla wysyłania zadania na Gonito:\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", "- w nazwie commita podaj nr indeksu\n", "- w tagach podaj **neural-network** oraz **5gram**\n", "\n", "Punktacja:\n", "- 60 punktów\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\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", "- deadline: **22 maja 2024** przed zajęciami" ] } ], "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 }