Autorzy: Jan Kornacki, Hubert Lewandowski, Grzegorz Pozorski
Wikidocker, czyli szybki i nie tak naiwny klasyfikator Bayesa, jakby mogło się wydawać. Program ma kwalifikuje artykuł anglojęzyczny do najbardziej prawdopodobnej kategorii z 6 głównych, dostępnych na Simple Wikipedia.
Kategoria wyjściowa byłaby rekomendacją, która mogłaby znaleźć zastosowanie w kategoryzowaniu choćby nowych artykułów. Przykładowo taki program mógłby mieć zastosowanie do automatyzacji tworzenia nawigacji na stronach internetowych z olbrzymimi bazami danych.
W projekcie użyty został naiwny klasyfikator Bayesowski wsparty techniką stemmingu (usuwanie końcówki wyrazu zostawiając tylko jego temat) do kwalifikacji wiadomości.
Wzór, którego użyliśmy, wygląda następująco: $$ P(X_i|y) = {{N_{X_i|y} + \alpha} \over {N_y + \alpha \cdot |V|}} $$
Opis symboli:
Symbol | Opis |
---|---|
$$ P(X_i | y) $$ |
$$ {N_{X_i | y}} $$ |
$$ N_y $$ | Liczba słów we wszystkich fragmentach należących do klasy $$ y $$ |
$$ | V |
$$ \alpha $$ | Parametr służący uniknięciu prawdopodobieństw zerowych |
Do wyciągnięcia artykułów dla zbioru uczącego posłużyliśmy się bibliotekami:
- requests - obsługuje żądania, które były kierowane do strony Wikipedii
- Beautiful Soup - w celu wyciągnięcia konkretnych danych
- sklearn - do wygenerowania zbioru testowego
W celu uniknięcia każdorazowego pobierania danych i uczenia kwalifikatora użyliśmy serializacji słowników do pliku.
Zbiorem uczącym słowniki są wszystkie artykuły z 6 głównych kategorii na stronie Simple Wikipedia.
Dane o poprawności niniejszego kwalifikatora opierały się na zbiorze testowym wygenerowanym ze zbioru uczącego.
Jest to najdłuższy proces ze wszystkich. W obecnej wersji ten proces może zająć nawet kilkadziesiąt minut!
Nie jest on jednak brany pod uwagę, ponieważ można go zrobić tylko raz (lub też w sytuacji gdy chcemy zaktualizować bazę artykułów) i bazować na zserializowanym "dumpie".
Przy pobieraniu, każdy artykuł przechodzi przez proces usuwania półsłówek (np przysłówków, przymiotników, określniki, itp), które źle wpływają na rezultaty. Dzięki temu, słowa kluczowe mają większą szansę w słownikach.
Dane o wyrazach są wyciągnięte z wybranych artykułów dotyczących kategorii "Angielskie Lematy".
Drugi proces pod względem prędkości. Jest również pomijalny w użytku "codziennym" ponieważ po wygenerowaniu zbiorów i nauczeniu słowników, proces jest wymagany tylko przy zaktualizowanym dumpie.
Najszybszy proces inicjalizacji całego kwalifikatora. Mimo, że najszybszy to również pomijalny dzięki serializacji słowników do plików.
Program kolejno:
- Generuje słowniki z plików
- Pobiera paragrafy z artykułu podanego na wejściu
- Przetwarza dane, w celu uzyskania formy akceptowalnej przez algorytm
- Kwalifikuje artykuł do kategorii, dla której określono największe prawdopodobieństwo
Mając gotowe słowniki klas proces kwalifikacji będzie bardzo szybki, co jest kluczowe dla tego projektu.
Wynik poprawności nauczonego kwalifikatora odnosi się do proporcji 0.8 w generowaniu zbiorów testowych. Przy kwalifikowaniu artykułów użyta jest proporcja 0.999 tak aby zbiór treningowy był jak największy.
Poniższe dane określa najlepszą poprawność decyzji, podjętej przez kwalifikator przy proporcji zbiorów 0.8.
### CORRECTNESS ###
50,373% of articles was qualified correctly.
Applied sciences:
People and social studies:
Government and law :
Natural sciences and maths:
Daily life, art and culture:
Religions and beliefs:
Biorąc pod uwagę, że szansa wylosowania prawidłowej kategorii bez żadnej wiedzy, jest równa ~17%, wyniki sięgające nawet 50% (średnio 47%) są ogromną wartością dodaną, przy tak niskim czasie samej decyzji.
Wynik jest na poziomie losowego prawdopodobieństwa wybrania jednej z dwóch klas, mimo że mamy 6!