piątek, października 14, 2016

Naiwny klasyfikator bayesowski nie jest jednak dobry do rozpoznawania clickbaitów ;-)

Od kilku dni bawię się moją wtyczką "rozpoznającą" clickbaity.

Można się tu bawić w filozoficzne rozpatrywanie co właściwie znaczy "rozpoznawanie", bo z pewnego punktu widzenia moja wtyczka to automat, który używając dostępnych jej danych klasyfikuje tytuły linków albo jako clickbait, albo jako nie clickbait.
Szczegół tkwi w tym co oznacza klasyfikacja jako clickbait ;-)
Clickbaitem jest wg wtyczki taki tytuł, który zawiera w sobie słowa, które są prawdopodobne w clickbaitach....

Na początku zakładamy, że nie wiem czy tytuł jest clickbaitem, czy też nim nie jest.
Prezentujemy to przez założenie, że prawdopodobieństwo przynależności do obu klas wynosi 0.5.

To są nasze priory.

Teraz dla każdego słowa w tytule pobieramy liczbę jego wystąpień w tytułach clickbaitowych i nieclickbaitowych ze "zbioru uczącego".
Sumujemy te liczby i dzielimy je przez tą sumę.
To jest nasze likelihood (piszę po angielsku bo po polsku trudno to przetłumaczyć, bo w końcu prawdopodobieństwo już mamy ;-) jest to liczba, która opisuje jak prawdopodobne byłoby wystąpienie danego słowa w tytule gdyby ten tytuł był clickbaitem, albo gdyby nie był clickbaitem), które mnożymy z priorami i dostajemy nowe priory....
Teraz tylko trzeba je jeszcze znormalizować i możemy zacząć się bawić kolejnym słowem.

Problem w tym, że jednak nie wszystkie słowa mój klasyfikator zna, do tego są słowa które występują w zbiorze uczącym tylko w clickbaitach.... To by znaczyło, że likelihood byłoby 1 i to by popsuło obliczenia, stąd tak naprawdę likelihood nigdy nie będzie 0, ani 1, tak naprawdę zawsze będzie między 0.05 a 0.55 (chociaż zostanie znormalizowane)....
Na szybko wprowadziłem mechanizm by w razie gdy mamy 0 słów występujących w obu zbiorach to by z automatu uznawać, że artykuł nie jest clickbaitem... niby działa, ale też nie do końca dobrze ;-)

Muszę się przyjrzeć temu czy likelihood nie powinno być inaczej liczone, oraz popracować nad czyszczeniem danych do zbioru uczącego...

Ogólnie nie jest to takie proste jak miałem nadzieję gdy to wszystko pisałem kilka dni temu przed pójściem spać ;-)


Podobne postybeta
Logistic Regression wykrywa clickbaity lepiej od Bayesa ;-)
Clickbait detector ;-) - czyli próbujemy użyć naiwnego klasyfikatora Bayesowskiego do rozpoznawania clickbaitów ;-)
ClickbaitDetector - to działa :-)
Drugi klasyfikator jako "sanity check"
clickBaitDetector - wiem czemu nie działa ;-)