Metody filtrowania spamu - filtry Bayesa - praca dyplomowa

0

Witam,
w niedalekiej przyszłości, trochę z wyboru, trochę z przymusu, będę pisał pracę dyplomową na temat metod filtrowania spamu przy wykorzystaniu filtrów Bayesa.

W kwestiach uszczegóławiania tematu mam wolną rękę, dlatego też zwracam się tutaj na forum o jakieś sugestie/ podpowiedzi, bo być może jest tutaj osoba bliżej zaznajomiona z problematyką..

Zastanawiam się nad następującymi rzeczami:

1) Czy łatwiej jest przygotować filtr, który będzie filtrował spam w komentarzach np. na blogu, czy w skrzynce pocztowej ? Mam tutaj dylemat, gdzie chciałbym 'osadzić' przygotowany przeze mnie filtr. Imo trudniej jest filtrować spam w komentarzach, ponieważ tutaj dochodzi kwestia tematyczności komentarza, ale nie jestem pewien czy dobrze myślę..

**2) Czy trudniej jest filtrować spam będący w j. polskim niż w j. angielskim ? ** Temat filtrów Bayesa na razie znam powierzchownie, ale z tego co przeczytałem w literaturze, to w uproszczeniu wystarczy 'przepuścić' dwa zbiory wiadomości *ham *i *spam *przez takowy filtr i na tej podstawie budowane są dane statystyczne występowania poszczególnych słów dla różnych typów wiadomości.. Czyli teoretycznie sam język jako tako nie powinien mieć znaczenia.. [??]

Z drugiej strony spotkałem się też z podejściem, gdzie (również w uproszeniu) wcześniej analizuje się cały tekst, wykonuje odpowiednią kategoryzację słów, wyznacza się z nich leksemy i dopiero potem wykonuje analizę statystyczną występujących słów (leksemów). Tylko w tym przypadku pojawia się nowy problem przetwarzania języka naturalnego dla danego języka.. O ile dla j. angielskiego istnieją już stosunkowo dobre narzędzia, o tyle dla j. polskiego jest gorzej (nie wiem czy w ogóle coś bym znalazł..).

Teraz jeszcze kwestie implementacyjne:

W sieci można dość sporo znaleźć już zaimplementowanych filtrów Bayesa, np. program SpamAssassin, który z tego co wyczytałem można 'podpiąć' do niektórych programów/ serwerów pocztowych..

  1. Chciałbym zrobić coś podobnego, tzn. przygotować własny filtr, który następnie mógłbym podpiąć pod jakiego klienta pocztowego, z tym że za bardzo nie mam 'wizji' jak to miałoby wyglądać.. Tzn. nie mogę zlokalizować który klient pocztowy na takie coś pozwala i w jaki sposób moja implementacja filtra miałaby z takim klientem/serwerem współdziałać..

  2. I dlatego, w odniesieniu do punktu 4). pomyślałem aby zrobić własnego klienta, który miałbym wbudowany mój filtr.. z tym, że wtedy filtracja odbywa się dopiero po stronie klienta (na desktopie), co za bardzo mi się to nie widzi..

EDIT:

  1. A czy możliwa byłaby 'konstrukcja' - PROXY, tzn. wiadomości byłyby pobierane np. z serwera gmaila do serwera PROXY, gdzie następowałaby filtracja, i następnie przefiltrowane wiadomości byłby z powrotem przesyłane na skrzynkę gmaila.. ? Wpadł mi po prostu pomysł z zastosowaniem serwera pośredniczącego niejako w procesie filtracji.. ale może można to lepiej rozwiązać..

Kończąc..

Chciałbym, abyście wypowiedzieli się na każdych z podpunktów.. Moja wiedza w ujęciu całościowym jest niepewna, więc jeżeli ktoś czuje się kompetentny w temacie to proszę o wypowiedzenie się.. ;)

1

Nie mam zbyt dużo doświadczenia z samymi filtrami naive bayes, ale za to wiem trochę na temat przetwarzania tekstu i przetwarzania języka naturalnego.

  1. Moim zdaniem dużo prościej w komentarzach, przynajmniej względem metod które znam. Problem skrzynki pocztowej jest taki że wiadomości dotyczą bardzo różnych tematów i generalnie wiadomości jest mało. Wyłapiemy w ten sposób coś, tylko jeśli ktos dostanie tego spamu dużo. Jak dostanie jedną czy dwie wiadomości to już niekoniecznie. Siłą komentarzy jest właśnie to że są zwykle na podobny temat i wyłapanie "odstającego" jest łatwiejsze.
  2. Dużo trudniej po polsku. Głównie ze względu na potrzebną lematyzację albo stemming dla danego języka, a dla polskiego jest to skomplikowane. Chodzi o to, że żeby model był wartościowy, szczególnie jeśli chcesz używac prostego modelu BOW, to musisz wszystkie wyrazy sprowadzić do formy podstawowej. W innym wypadku statystyka będzie dużo słabsza bo będziesz miał bardzo bardzo dużo różnych słów, z których każde będzie występować bardzo niewiele razy. W efekcie nie dość że obliczenia będą cięższe (wymiar przestrzeni wektorowej będzie znacznie większy) to jeszcze "podobieństwo" tekstów będzie niskie, bo różne formy tego samego słowa będą traktowane jako różne słowa.

Ja bym sie zastanowił nad trochę innym podejściem. Możesz na przykład wygenerować sobie model tf-idf dla poprawnych wiadomości i model dla wiadomości spamowych a potem zwyczajnie liczyć podobieństwo cosinusowe między testowanym tekstem a tymi dwoma modelami. I wiadomość trafia tam gdzie bardziej pasuje ;]

0

Pytanie na szybko - czy wygenerowanie modelu tf-idf dla j. polskiego również jest trudniejsze niż dla j. angielskiego ?

1

Teoretycznie nie. Ale i tu i tu dane wymagają wcześniej stemmingu albo lematyzacji. Dla angielskiego masz gotowe narzędzia korzystające z WordNeta i masz też proste stemmery automatyczne (np. obcinanie "-ing" etc) ale dla polskiego jest trudniej. Ja wiem raptem o 2 słownikach fleksyjnych dla języka polskiego, korzystałem z jednego z nich i miał badziewne API.
Można oczywiście olać lematyzacje i zrobić sobie model bez tego, wtedy dla angielskiego wyniki będą znośne, a dla polskiego bezużyteczne ;]
Jeśli chcesz to możesz podbić do mnie na priv i podać swojego maila i mogę wysłać ci moją pracę mgr. Jest tam jeden rozdział na temat eksploracji tekstu. Takie krótkie umówienie podstawowych pojęć i metod, może cię zainteresuje :)

0

Witam po krótkiej przerwie..

Zagłębiłem się trochę w temat tych filtrów Bayesa i okazuje się, że pierwszą czynnością którą należy wykonać na tekście (emailach) jest tzw. normalizacja danych (w j. angielskim termin często nazywany pre-processing of data).

W skrótcie: należy najpierw oczyścić tekst, wykonać lematyzacje oraz model BOW. O tym wszystkim wspomniał już wcześniej @Shalom i dlatego kolejne pytanie kieruje głównie do niego (ale każda wypowiedź w temacie będzie pomocna :)):

[pytania poczęści dotyczące pracy mgr]

  1. możesz podać nazwy tych stemmerów dla j. polskiego ? Wspominałeś coś, że słyszałeś o dwóch..

Wydaje się, że jak uda mi się uzyskać odpowiednio przetworzyć teksty, to potem przy pomocy kalsyfikator Naive Bayes następuje odpowiednia klasyfikacja poszczególnych emaili.

1
  1. Biblioteka CLP stworzona przez Grupę Lingwistyki Komputerowej na AGH (ma też nakładki do Pythona -> https://github.com/agh-glk/plp i do Javy). Ale tu pewnie musiałbyś pisac do dr. Gajęckiego z prośbą o udostępnienie.
  2. http://sgjp.pl/morfeusz/morfeusz.html
    Alternatywnie możesz użyć wersji uproszczonej i wykorzystać słownik odmian np.
    http://sjp.pl/slownik/odmiany/
    albo słownik form dostępny np. tu
    http://galaxy.uci.agh.edu.pl/~korzycki/osi/index.php?id=2

1 użytkowników online, w tym zalogowanych: 0, gości: 1