Klasyfikacja tekstów
Zadanie dotyczy klasyfikacji tekstów. Dany jest zbiór tekstów, wybranych z
notatek prasowych dotyczących kwestii Brexitu. Notatki są zaetykietowane w
trzech klasach: poparcie dla Brexitu (1), przeciwna Brexitowi (-1), albo
dotycząca Brexitu, ale neutralna (0).
Należy zbudować klasyfikator, poprawnie rozpoznający dowolną notatkę tekstową
jako jedną z powyższych trzech klas.
Pracę należy wykonać w dwóch etapach, które mogą być powtarzane: (1) wybór
reprezentacji danych i zdefiniowanie zbioru cech (features), na których będzie
się opierała praca klasyfikatora, oraz napisanie programu do konwersji zbioru
tekstów na zbiór wektorów cech, oraz (2) budowa klasyfikatora, i jego
optymalizacja.
Popularne schematy reprezentacji tekstów o zmiennej długości do celów
automatycznej klasyfikacji to BoW (Bag-of-Words), TF-IDF (Term
Frequency-Inverse Document Frequency), Word2Vec, plus dodatkowo wykorzystanie
modelu N-gram (np. bigram).
W budowie klasyfikatora można wykorzystać dowolne algorytmy maszynowego
uczenia. Warto wykonać kilka eksperymentów, zaczynając od różnych analiz
statystycznych zbioru danych, i następnie wykonując wstępny eksperyment
uczenia maszynowego z wykorzystaniem najprostszej reprezentacji danych oraz
naiwny klasyfikator bayesowski. Wyniki tego eksperymentu mogą służyć jako
referencyjne do oceny poprawności zastosowania bardziej zaawansowanych metod.
Mogą one obejmować inne modele reprezentacji danych, oraz inne algorytmy
uczenia maszynowego takie jak: drzewa decyzyjne, metoda najbliższych sąsiadów,
SVM, sieci neuronowe, podejścia hybrydowe typu ensemble, itp.
Wyniki każdego eksperymentu należy oceniać obliczając odpowiednie miary błędów
obejmujące (co najmniej) Dokładność obliczoną zarówno na zbiorze treningowym
jak i metodą walidacji krzyżowej, jako najprostszą metodę wykrywania
przeuczenia.
Optymalizacja wyników może koncentrować się na wyborze najlepszego algorytmu
maszynowego uczenia, dostrajania jego parametrów, jak również próbować
podejścia typu ensemble learning, budując klasyfikatory hybrydowe. Możliwe
jest również cofnięcie się do kroku poprzedniego - budowy reprezentacji, i
próby jej modyfikacji w celu osiągnięcia lepszej zdolności klasyfikacji.
Wyniki z ćwiczenia
Proszę opracować osiągnięte wyniki w postaci raportu opisującego wykonane
prace i otrzymane wyniki, oraz pakietu uruchomieniowego, pozwalającego
uruchomić opracowany(e) klasyfikator(y) i odtworzyć wyniki opisane w raporcie.
Raport powinien:
- Być zwięzły (max 5 stron) i sformułowany w punktach odpowiadających częściom
zadania. Należy włożyć wysiłek w to, aby opisać wszystkie wyniki w
wyczerpującej, ale krótkiej formie. W szczególności: brak strony tytułowej,
spisu treści, rysunków, tabel, ani nic takiego. Zamiast tego jedynie zwarty
nagłówek z: nazwą przedmiotu, prowadzącego, tytułem projektu, nazwiskiem
autora, i datą.
- Zawierać krótki ale precyzyjny opis wykonanych prac zarówno przy opracowaniu
danych, budowie wektora cech, kolejno testowanych algorytmów klasyfikacji,
otrzymanych wyników, interpretacji otrzymanych miar jakości, i prób ich
poprawienia.
- Zawierać otrzymane wyniki. Proszę powstrzymać się podawania w raporcie
dużej liczby wyników liczbowych z wieloma miejscami po przecinku, licząc na
to, że odbiorca raportu wyszuka sobie te wyniki, które go interesują,
zinterpretuje je sobie z taką dokładnością, którą uzna za właściwą, a resztę
podanych wyników liczbowych pominie. Należy podać tylko kluczowe wyniki,
zaokrąglone do sensownej dokładności. Forma tabelaryczna jest bardzo dobra,
ale w treści raportu najważniejsze/końcowe wyniki powinny być również podane
i omówione. Proszę unikać wklejania screenshotów, albo innych obrazków o
kiepskiej rozdzielczości, tylko w celu pokazania wyświetlanych tam wyników.
- Zawierać krótkie podsumowanie najważniejszych uzyskanych wyników i wniosków
autora na temat wykonanego zadania.
- Zawierać kluczowe pozycje źródłowe wykorzystane w pracy (w tym również AI).
- Główne kryteria oceny raportu to: zwięzłość, jasność i czytelność opisu,
a także precyzja i kompletność (patrz formularz oceny zadania).
Pakiet uruchomieniowy powinien:
- dać się uruchomić na Linuksie,
- zawierać plik Readme.txt opisujący sposób jego uruchomienia, w tym
wymagane pakiety oprogramowania, ich wersje, i sposób ich zainstalowania
wykorzystujący środowisko wirtualne Pythona,
- zawierać wytrenowany model klasyfikatora pozwalający na klasyfikację
dowolnego zadanego zbioru testowego o takim samym formacie jak pierwotny
zbiór tekstów (uczący); zbiór testowy powinien być wczytany z wejścia
(
stdin
) i może zawierać zarówno teksty etykietowane (liczba -1,0,+1 w
pierwszym polu wiersza tekstu), jak i teksty nieetykietowane (dowolny inny
znak w pierwszym polu tekstu), oraz:
- dla wszystkich wierszy etykietowanych zbioru testowego dokonać ich
klasyfikacji, i obliczyć i wyświetlić na wyjściu (
stdout
) podsumowanie
statystycznych ocen jakości klasyfikacji (dokładność, itp),
- dla wszystkich wierszy nieetykietowanych pliku testowego dokonać ich
klasyfikacji, i wyświetlić na wyjściu (
stdout
) każdy wiersz i wynik jego
klasyfikacji,
- DODATKOWO pozwolić na ponowne wytrenowanie klasyfikatora na wczytanym z
pliku zbiorze danych uczących (tekstów), i wykonanie klasyfikacji dowolnego
zadanego zbioru testowego w taki sam sposób jak opisany powyżej dla
wytrenowanego klasyfikatora,
- pakiet uruchomieniowy NIE POWINIEN zawierać pierwotnego zbioru danych
uczących, ani żadnej jego wersji (jeśli dane uczące potrzebne są w innym
formacie to program powinien dokonać ich niezbędnej konwersji),
- program nie powinien zapisywać żadnych plików na dysku, wszystkie wyniki
wyświetlać na
stdout
.