Przetwarzanie_tekstu/projekt/UGP_2022_12_project.ipynb

231 KiB

Logo 1

Uczenie głębokie w przetwarzaniu tekstu

12. Projekt [laboratoria]

Karol Kaczmarek (2022/2023)

Logo 2

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
  • 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 wykorzystany T5-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 biblioteki transformers, np. export TRANSFORMERS_CACHE=PROJECT_PATH/.cache/transformers (gdzie PROJECT_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 (gdzie PROJECT_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)