231 KiB
Uczenie głębokie w przetwarzaniu tekstu
12. Projekt [laboratoria]
Karol Kaczmarek (2022/2023)
Projekt na zaliczenie przedmiotu
Wymagania
- Przed przystąpieniem do przygotowywania rozwiązania należy zgłosić zespół (maksymalnie 2-3 osobowy) oraz wybrać zbiór danych (na którym zostaną wykonane eksperymenty) - zalecane jest wybór zbiór danych dla problemu klasyfikacji
- Utworzenie 4 rozwiązań opartych o:
- Transformer Encoder, np. RoBERTa
- Transformer Decoder, np. GPT-2
- Transformer Encoder-Decoder, np. T5
- Transformer w trybie few-shot/zero-shot learning, np. FLAN-T5
- Jakość modeli nie powinna znacznie odbiegać od akceptowalnego wyniku, który zostanie zaznaczony podczas wyboru zbioru danych
- Rozwiązanie powinno zostać dostarczone w postaci:
- Jupyter Notebook z kodem źródłowym1, historią i wynikami z processu trenowania
- katalogu z plikami wytrenowanych modeli
- plików tekstowych z wykorzystanym korpusem - tylko w przypadku, gdy zbiór testowy został wydzielone z innego zbioru, np. ze zbioru uczącego
- Rozwiązanie powinno zostać opartę o rozwiązaniu na podstawie biblioteki
transformers
- podobnie jak przykłady przedstawione na zajęciach- Akceptowalne jest rozwiązanie opartę o inne biblioteki, ale będzie dodatkowa rozmowa o przygotowanych rozwiązaniu (pytania o kod, czy wykorzystane rozwiązania)
1 - Kod źródłowy modyfikowanych architektur i skryptów wykorzystanych do trenowania/ewaluacji modeli.
Ograniczenia
- Zespoły maksymalnie 2-3 osobowe
- Maksymalnie 3 zespoły na podany zbiór danych
- Zbiór danych, który został wykorzystany na zajęciach nie może być użyty w projekcie - nie akceptowane zbiory to:
- imdb
- squad (każda wesja)
- Nie akceptowany jest zbiór, który zawiera tylko i wyłącznie zbiór treningowy
- Akceptowalny jest zbiór, który zawiera tylko i wyłącznie zbiór treningowy i walidacyjny (bez zbioru testowego) - dodatkowo wymagane będzie poprawne wydzielenie/utworzenie zbioru testowego ze zbioru walidacyjnego
- Nie akceptowany jest zbiór z liczbą przykładów w zbiorze uczącym mniejszy niż 5000
- Odpowiednio zbiór testowy powienien posiadać przynajmniej ~1000 przykładów
Ocena
Ocena:
- 3 - wykorzystanie domyślnych modeli dostępnych w bibliotece
transformers
- marginalna zmiana w process trenowania modeli, np. wykorzystanie rozwiązania opartego o model
RobertaForSequenceClassification
- wykorzystanie identycznych rozwiązań, które zostały przedstawione na zajęciach
- marginalna zmiana w process trenowania modeli, np. wykorzystanie rozwiązania opartego o model
- 4 - wykonanie po 1 modyfikacji dla każdego z 3 rozwiązań1
- 5 - wykonanie przynajmniej 4 modyfikacji dla 3 rozwiązań1 (w każdym rozwiązaniu musi być wykonana przynajmniej 1 modyfikacja)
Modyfikacje rozwiązania obejmuje:
- modyfikacja architektury, np. utworzenie własnej głowy klasyfikacyjnej
- wykorzystanie stanów ukrytych (hidden states) z innych warstw transformera
- zamrożenie części wag modelu
- inne nieszablonowe modyfikacje
Im bardziej różna modyfikacja, niż ta która została przedstawiona na zajęciach tym lepiej, np.
- wykorzystanie ukrytych stanów z 3 ostatnich warst Transformera
- zbudowanie własnej głowy klasyfikacyjne z wykorzystanie innych funkcji aktywacji
- zbudowanie kilku-warstwowej głowy klasyfikacyjnej
- zmniejszenie głowy klasyfikacjynej (wymiaru/hidden states)
- zamrożenie początkowych warst modelu Transformera (nie całego modelu)
- zamrożenie co drugą watswę modelu Transformera (nie całego modelu)
1 - modyfikacja modelu nie dotyczy modelu few-shot/zero-shot learning
Termin
14.02.2022 (do końca dnia włącznie)
Dodatkowe punkty:
Dodatkowe punkt, a zarazem zwiększenie oceny można uzyskać dzięki:
- Stworzeniu nieszablonowego rozwiązania, np. wykorzystania innej architektu niż ta, która została przedstawiona na zajęciach
- Wykorzystanie większego modelu, np. zamiast modelu
T5-base
zostanie wykorzystanyT5-large
- Wykorzystaniu wielojęzycznego zbioru danych oraz wielojęzycznych modeli (przynajmniej 3 z 4 modeli powinny być wielojęzyczne)
- Niestandardowemu podejściu do procesu trenowania - wykorzystanie dodatkowych argumenetów, które dostarcza biblioteka
transformers
- + pół oceny za rozmowę o przygotowanym rozwiązaniu
Wykorzystane zbiory danych
Lista zbiorów danych:
Nazwa zbioru danych | Link do zbioru danych | Aktualna liczba zespołów | Akceptowalny wynik | Baseline1 | Metryka |
---|---|---|---|---|---|
emotion | LINK | 3 (max) | 0.865 | ~0.928 | Accuracy |
sms_spam2 | LINK | 1 (max) | 0.96 | ~0.972 | Accuracy |
rotten_tomatoes | LINK | 3 (max) | 0.84 | ~0.86 | Accuracy |
beer_reviews_label_drift_neg | LINK | 1 | 0.66 | ~0.68 | Accuracy |
ag_news | LINK | 3 (max) | 0.87 | ~0.9 | Accuracy |
sst2 | LINK | 1 | 0.915 | ~0.94 | Accuracy |
1 - Wyniki dla baseline: RoBERTa z długością sekwencji 128 (bez wykorzystania ukrytych stanów z innych warst Transformera oraz bez użycia własnej implementacji głowy klasyfikacyjnej)
2 - Ze względu iż przedstawiony zbiór posiada tylko i wyłącznie zbiór treningowy, nie możliwe jest wykorzystanie tego zbioru danych
Ujemne punkty
Ujemne punkty = 0,5 oceny niżej w przypadku gdy podpunkt został spełniony, każdy spełniony podpunkt to 0,5 oceny niżej. Następuje to gdy:
- wykorzystany zostanie (fragment) zbioru trenującego jako zbiór testowy
- zbiór treningowy oraz walidacyjny będą posiadać wspólną część (może wystąpić, gdy wymagane było wydzielenie zbioru walidacyjnego ze zbioru treningowego)
- nie zostanie udostępniony: kod źródłowy, pliki modelu, procces (historia) trenowania
Tips
- Przykładowe zbiory danych można znaleźć tutaj:
- Podłączyć Google Drive w Google Colab - pozwala zapisać dane, aby nie przepadły/zostały usunięte
- Podczas lokalego trenowania warto ustawić zmienne środowiskowe:
TRANSFORMERS_CACHE
- odpowiada za cache modeli z bibliotekitransformers
, np.export TRANSFORMERS_CACHE=PROJECT_PATH/.cache/transformers
(gdziePROJECT_PATH
to ścieżka do projektu)HF_DATASETS_CACHE
- odpowiada za cache zbiorów danych, jak i przetworzonych zbiorów danych (w tym danych przygotowanych do treningu), np.export TRANSFORMERS_CACHE=PROJECT_PATH/.cache/datasets
(gdziePROJECT_PATH
to ścieżka do projektu)
- Zamiast gotowego modelu (np.
--model_name_or_path t5-base
) można podać wcześniej wytrenowany model (np.--model_name_or_path out/my_t5/best
)