6.4 KiB
6.4 KiB
Modelowanie Języka
8. Model neuronowy typu word2vec [ćwiczenia]
Jakub Pokrywka (2022)
Zadania
Proszę wykonać zadanie 1 lub zadanie 2 (nie oba naraz). Zadanie 3 można zrobić niezależnie.
Zadanie 1
Wzorując się na materiałach z wykładu stworzyć 5-gramowy model neuronowy oparty na jednym ze schematów z wykładu, np.
Warunkiem koniecznym jest, żeby przewidywać słowo środkowe, np. Mając tekst ['Ala', 'ma', '[MASK]' 'i', 'psa'] chcemy przewidzieć kontekst środkowego słowa (tutaj '[MASK]')
Warunki zaliczenia:
- wynik widoczny na platformie zarówno dla dev i dla test
- wynik dla dev i test lepszy (niższy) niż 6.50 (liczone przy pomocy geval)
- deadline do końca dnia 08.05
- 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.
- zadania wykonujemy samodzielnie
- w nazwie commita podaj nr indeksu
- w tagach podaj neural-network oraz 5gram!
- zadanie tym razem jest dla polskiego odpowiednika word-gap https://gonito.net/challenge-my-submissions/retro-gap
- 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
Punktacja:
- podstawa: 60 punktów
- 40 punktów z najlepszy wynik z 2 grup
- 20 punktów z 3 kolejno najlepszych wyników z 2 grup
Jak stworzyć model?
- warto bazować na kodzie ze wykładu 7 Zanurzenia słów
- elementy, które na pewno trzeba będzie wykorzystać to: nn.Embedding, nn.Linear, nn.Softmax
- 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
W jaki sposób uzyskać lepszy wynik?
- Po pierwsze proszę stosować sie do rad z poprzednich cwiczeń (trenowanie przez kilka epok i monitorowanie wyniku na zbiorze deweloperskim)
- 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.
- 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.
- warto spróbować dodanie np 2 warstw liniowych (lub nawet 3) zamiast jednej warstwy (koniecznie trzeba dodać między nimi funkcję aktywacji, np RELU).
- poza tym można zmieniać różne parametry (np. wielkość słownika, wielkość warstwy ukrytej, różne funkcje aktywacji)
Zadanie 2
Proszę zrobić parameter Hyperparameter Tuning dla zadania 1 i zaprezentować na forum grupy razem z wnioskami
- wymóg wyniku najlepszego modelu, conajwyżej 6.10
- wnioski nie muszą być specjalnie rozbudowane, prezentacja może trwać 3-5minut lub dłużej
- należy wybrać dla siebie metodę hypermarameter tuningu
- należy stworzyć conajmniej 10 modeli, należy pokazać wyniku dla conajmniej paru
- oczywiście kod musi być automatyczny (a nie ręcznie zmieniamy paratery), natomiast nie ma wymogu korzystania ze specjalnych bibliotek
- podstawa punktów 100
- za wynik lepszy (niższy) niż 5.50 +20 punktów
- użycie GPU na dowolnym cloud lub od WMI + 30 punktów
- termin 16.05 na zajęciach
- punkty przyznam na MS TEAMS, ale proszę zgłosić te rozwiązanie na gonito (nie trzeba w żadnym challenge ani z konkretymi tagami)
Zadanie 3
Zaangażowanie się w pygonito.
- https://github.com/filipggg/pygonito
- dobra okazja, żeby nauczyć się tworzyć paczki pythonowe
- wsparcie ode mnie lub prof. Gralińskiego przy tworzeniu
- może się przydać przy pracy magisterskiej (jeżeli wyzwanie będzie na gonito)
- ilość punktów zależy od zakresu pracy. Sczególnie warto samemu zaproponować co zrobić) Zakres prac i punktów do dogdania
- w celu ustalenia szczegółów proszę sie zgłosić do mnie
- termin dowolny