@pomocnik - bot reagujący na spam w komentarzach

in #polish6 years ago (edited)

Problem

Często w postach pojawiają się komentarze, które nijak nie są z nimi powiązane. Albo nie wnoszą żadnej wartości. Przykładowo:

Followed and resteemed

Nice photo

Amazing

Please follow me I will follow you back

etc.

Najczęściej są to komentarze w języku angielskim, a szybka analiza użytkownika pozwala przypuszczać, że nie zna on języka polskiego, więc nie był w stanie się zapoznać z treścią komentowanego posta. Mamy do czynienia z ewidentnym spamem. Takie komentarze należałoby oflagować (aby przestały być widoczne), ewentualnie odpowiedzieć komentarzem ostrzegającym przed skutkami takiego zachowania. Niemniej sam fakt, że taka sytuacja ma miejsce jest nieco irytujący. Czy dałoby się jakoś zautomatyzować proces reakcji na tego typu komentarze? Oczywiście tak, bo jest to klasyczny problem klasyfikacji spamu.

Teoria

Do problemu klasyfikacji spamu najczęściej używa się takich algorytmów jak:

Każdy z tych algorytmów ma swoje wady i zalety. Można oczywiście bazować na kilku algorytmach naraz i łączyć wyniki na zasadzie średniej ważonej.

Bot korzysta z pierwszego z tych algorytmów, ale w planie jest też dodanie innych w celu porównania działania.

Naiwny klasyfikator Bayesa to popularny klasyfikator probabilistyczny. Słowo naiwny bierze się z założenia niezależności predyktorów (co nie musi być prawdą, bo zwykle zmienne te są przynajmniej w małym stopniu zależne). Pomimo powyższego faktu, klasyfikatory Bayesa zwykle radzą sobie nad wyraz dobrze, nawet w porównaniu do bardziej złożonych metod takich jak sieci neuronowe.

W uproszczeniu idea działania jest następująca:

  • mamy zbiór dokumentów należących do dwóch różnych klas (np spam oraz nie-spam)
  • dokumenty zamieniamy na listy słów uwzględniając liczność poszczególnych słów
  • klasyfikując nowy dokument analizujemy jak często słowa pojawiały się w dokumentach obu klas i jakie z tego wynika prawdopodobieństwo (korzystamy z twierdzenia Bayesa)
  • wynikiem jest prawdopodobieństwo przynależenia do danej klasy

Realizacja

Bot korzysta z następujących technologii:

  • język: Python3.6
  • biblioteki: steem-python, scikit-learn, pandas

Został on wytrenowany na podstawie ponad 100 komentarzy, rozdzielonych mniej więcej równo na obie klasy. Oczywiście liczba ta będzie zwiększana, w myśl zasady, że im więcej tym lepiej. Bot sam dodaje sobie nowe dane, jeśli wynik klasyfikacji jest odpowiednio wysoki.

Przykład działania:

Jak widać w komentarzu zawarta jest też informacja o tym jak bardzo bot jest pewny, że dany komentarz to spam. Próg w obecnej chwili ustawiony jest na 80%. Bot teoretycznie powinien zareagować od razu, ale w praktyce odpowiada z opóźnieniem około 2 minut.

Dalszy rozwój

Rozwój będzie polegał na:

  • zwiększeniu liczby danych na podstawie których bot podejmuje decyzje (można przyjąć, że teraz jest w fazie eksperymentalnej i ciągle się uczy)
  • dodanie innych algorytmów i połączenie z obecnym
  • branie pod uwagę również reputacji oraz historii komentarzy (wyższe jest prawdopodobieństwo spamu dla użytkownika z niską reputacją; dodawanie serii takich samych komentarzy również będzie dobrą wskazówką)
  • zapamiętywanie użytkowników, którzy spamowali
  • flagowanie spamowych komentarzy (dopóki bot działa w fazie eksperymentalnej oraz ma niska reputację i poziom SP będzie się ograniczał tylko do odpowiadania na komentarze)

Kod bota będzie OpenSource w przeciągu kilku dni.

Wszelkie sugestie mile widziane.

Sort:  

Czy byłbyś w stanie napisać taką sprawdzajkę, która policzyła by prawdopodobieństwo, że dane konto jest botem?

Myślę, że jest to do zrobienia :)

Bot probability: 94.5%

Grеаt рοѕtǃ Սрvοtеd аnd rеѕtееmеdǃ

Założę się, że tego nie wykryje ^^

Nie wolno oszukiwać! :D

Napisałeś to ręcznie, przyznaj się 8)

Tak (tzn bot sam to napisał, ale był w tym mój udział) :D Początkowo wyszło, że komentarz neutralny. No ale coś mi nie pasowało i podejrzałem sobie jakie tam są faktycznie znaki. Po czym testowo uaktualniłem bazę i wymusiłem, żeby sprawdził ten komentarz jeszcze raz.

Czyli będzie trzeba też dodać sprawdzanie czy ciąg nie zawiera za dużo podejrzanych znaków.

Please stop spamming in comments or else people may flag you!
Spam probability: 88.14%

Świetna robota, lubię takie projekty, bo (przynajmniej w moim przypadku) zazwyczaj powstają z ciekawości lub chęci sprawdzenia, czy się będzie potrafiło :D

Czy bot będzie się jakoś dowiadywał, czy poprawnie sklasyfikował komentarz? Np. po liczbie upvote albo wypłacie za swoją odpowiedź? Fajnie by było połączyć kilka różnych metod i przedstawiać wynik klasyfikacji każdej z nich.

Gratulacje i czekam na kod źródłowy :)

W moim przypadku to również ciekawość. A tutaj też stwierdziłem, że taki bot będzie przydatny.

Odnośnie dowiadywania się o poprawnej klasyfikacji - póki co przyjąłem, że będę co jakiś czas weryfikował wykonane akcje i dokonywał ewentualnych korekt. Ogólnie im bot będzie miał więcej (dobrych) danych tym powinien być skuteczniejszy (teraz tych danych jest stosunkowo mało).
Nie wiem czy patrzenie na upvote będzie miarodajne, będę musiał nad tym pomyśleć / poobserwować.

Dołożenie kolejnych algorytmów to w sumie dla mnie najciekawsza część tej zabawy, lubię porównywać skuteczność różnych metod :)

Bot może tez sprawdzać czy dana osoba zamieszcza identyczne komentarze pod innymi postami

Taki mam plan. Bo też co innego jak ktoś napisze 10 razy pod rząd komentarz "nice photo", a co innego jak zdarzy się to komuś wśród innych normalnych komentarzy.

Właśnie o to mi chodziło bo czasem ktoś może napisać coś w stylu super artykuł i wcale nie musi się rozpisywać a spam moim zdaniem to nie będzie

Weryfikowanie po upvotach jest o tyle słabe, że spamerzy gdy się zoreintują/dowiedzą jak bot działa też będą go upvote'ować.

Dzisiaj już widziałem działanie @pomocnik -a pod moim postem skomentowanym przez robota :-)
Brawo popieram.

gib mony, follow resteem my friend poland beautyful country

Please stop spamming in comments or else people may flag you!
Spam probability: 84.34%

"Najczęściej są to komentarze w języku angielskim, a szybka analiza użytkownika pozwala przypuszczać, że nie zna on języka polskiego..."

Czyli Polonusy, znający język polski biernie (rozumiejący artykuł), ale bez polskiej klawiatury i nawyku pisania po polsku -będą tutaj wykluczeni?

Nie, nie. Samo pisanie po angielsku pod polskimi treściami nie jest traktowane przez bota jako spam. Chodzi o takie generyczne komentarze "Nice photo" czy "Followed and resteemed". Jak ktoś odpisze normalnym zdaniem / zdaniami po angielsku to bot nie oceni tego jako spam (w bazie normalnych komentarzy są i polskie i angielskie)

sama czesto ogladajac posty widzac cos co mi sie spodobalo, komentowalam krotko i zwiezle .... "Nice photo" lub pod postami z innych narodowosci pisalam po polsku ze cos mi sie podoba.... :) ( jak ktos chce wiedziec co napisalam moze sobie przetlumaczyc) Boty nigdy nie beda doskonale i zawsze kogos skrzywdza a juz napewno nie jestem za tym zeby same flagowaly :/ .... po drugie nawet jezeli jakis bot mi napisze ze fajna fotka czy obrazek to chyba krzywdy mi tym nie robi? troche nie rozumiem tego ........co innego jak by pod jednym postem powtarzal sie i spamowal tym samym zdaniem czy wyrazem ....

Właśnie też doszedłem w międzyczasie do wniosku, że nie ma co patrzeć tylko na jeden komentarz, a na całą historię. I jako spam traktować sytuację, kiedy ktoś ciągle pisze to samo. Póki co to z tym botem takie "pierwsze koty za płoty" i testuję sobie jak to działa w praktyce. Bo założenie jest takie, że ten bot ma pomagać a nie szkodzić :) Więc jak będzie słabo działał i bardzo rozrabiał to go wyłączę i tyle ;)

:) Super ze kombinujesz :) ....kawal dobrej roboty i tak :) Pozdrawiam!!!!

Great post! Upvoted and resteemed!
test

Please stop spamming in comments or else people may flag you!
Spam probability: 94.51%

Jestem pod wrażeniem świetna robota :)

Wydaje mi sie ze kilka godzin temu widzialem tego bota. Troche zesfirowal. Komentowal min samego siebie.

Haha, to prawda :D Przez przypadek uruchomiłem go w wersji, gdzie nie sprawdzał minimalnego prawdopodobieństwa (teraz jest 80%) i na kilka minut zająłem się czymś innym. Potem na szybko wszystko usunąłem, ale nie powiem, lekko się spociłem ;)

Hehe, ale by bylo jakby zaczal wszystkich dookola flagowac ;)

Usunąłeś? Na steemie? Jak?

W sensie usunąłem z interfejsów, bo z blockchaina to wiadomo :)

Ale jak, skoro nawet na busy czy steemit nie ma opcji usuń/ukryj? Masz na myśli edytowanie?

Można usuwać. Ale tylko jeśli nie ma głosów / nie ma odpowiedzi.

A rzeczywiście, na steemit jest coś takiego.

Congratulations, you were selected for a random upvote! Follow @resteemy and upvote this post to increase your chance of being upvoted again!
Read more about @resteemy here.

Please stop spamming in comments or else people may flag you!
Spam probability: 80.48%

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.032
BTC 63724.53
ETH 3071.11
USDT 1.00
SBD 3.98