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.
Czy byłbyś w stanie napisać taką sprawdzajkę, która policzyła by prawdopodobieństwo, że dane konto jest botem?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Myślę, że jest to do zrobienia :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Bot probability: 94.5%
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Grеаt рοѕtǃ Սрvοtеd аnd rеѕtееmеdǃ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Założę się, że tego nie wykryje ^^
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Nie wolno oszukiwać! :D
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Napisałeś to ręcznie, przyznaj się 8)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Please stop spamming in comments or else people may flag you!
Spam probability: 88.14%
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ś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 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Bot może tez sprawdzać czy dana osoba zamieszcza identyczne komentarze pod innymi postami
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Weryfikowanie po upvotach jest o tyle słabe, że spamerzy gdy się zoreintują/dowiedzą jak bot działa też będą go upvote'ować.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Dzisiaj już widziałem działanie @pomocnik -a pod moim postem skomentowanym przez robota :-)
Brawo popieram.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
gib mony, follow resteem my friend poland beautyful country
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Please stop spamming in comments or else people may flag you!
Spam probability: 84.34%
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
O działa :D
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Czyli Polonusy, znający język polski biernie (rozumiejący artykuł), ale bez polskiej klawiatury i nawyku pisania po polsku -będą tutaj wykluczeni?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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 ....
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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 ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
:) Super ze kombinujesz :) ....kawal dobrej roboty i tak :) Pozdrawiam!!!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Great post! Upvoted and resteemed!
test
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Please stop spamming in comments or else people may flag you!
Spam probability: 94.51%
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Jestem pod wrażeniem świetna robota :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Wydaje mi sie ze kilka godzin temu widzialem tego bota. Troche zesfirowal. Komentowal min samego siebie.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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 ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hehe, ale by bylo jakby zaczal wszystkich dookola flagowac ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Skynet ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Usunąłeś? Na steemie? Jak?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
W sensie usunąłem z interfejsów, bo z blockchaina to wiadomo :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ale jak, skoro nawet na busy czy steemit nie ma opcji usuń/ukryj? Masz na myśli edytowanie?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Można usuwać. Ale tylko jeśli nie ma głosów / nie ma odpowiedzi.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
A rzeczywiście, na steemit jest coś takiego.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Please stop spamming in comments or else people may flag you!
Spam probability: 80.48%
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Czy bot sprawdza też pozostałe komentarze danego użytkownika? Jest duże prawdopodobieństwo, że w krótkim czasie taka sama treść została umieszczona po kilkoma postami (niekoniecznie polskimi).
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Teraz bot analizuje tylko treść aktualnego komentarza, ale jakoś jutro dodam też sprawdzanie wcześniejszych (i pewnie też reputację).
Nawet w tym poście trafił się taki spamujący rodzynek: https://steemit.com/@resteemy/comments.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Najgorsze sa komentarze wymuszające upvotes za czyjś głos albo follow za follow. Co komu po obserwujących, którzy sa „martwi” i tak nasze treści sa dla nich nieinteresujące, lepiej mieć mniej a prawdziwych osób.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
To prawda. Dlatego duża część danych w bazie treningowej dotyczy własnie komentarzy tego typu.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Za niedługo będzie strach cokolwiek napisać w komentarzu w obawie przez to że "zwyzywa" nas bot hahaha :) Dobra robota! :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Przynajmniej ludzie się będą 2x razy zastanawiać przed napisaniem haha :)
A ja to bałem się wczoraj iść spać, w obawie, że bot zeświruje przez noc (uzyska samoświadomość czy tego typu rzeczy) ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Czy ten bot działa w każdym poście z tagiem #polish ?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Tak, analizowany jest każdy komentarz w #polish.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
sam siebie też zacznie oznaczać jako spam,
czy nie ogarnie tego faktu?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
W razie czego mogę go wpisać na białą listę.
Przez kilka minut (na skutek mojej drobnej pomyłki) odpisywał sam sobie, stwierdzając, że to spam, więc to już ma za sobą ;)
Wiem, że to może wyglądać, że odpowiada swoją regułką (czyli takim trochę spamem) na spam, ale docelowo (jak wyjdzie z fazy eksperymentalnej) i będzie flagował to taki wątek i tak będzie ukrywany przed resztą użytkowników.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
1)Wymyśl bota, który kontroluje inne boty, kasując ich działania w razie potrzeby.
2)Wyobrażmy sobie, że dwóch twórców botów działa na jednym terenie i w jednej dziedzinie.
No i chciałbym zobaczyć jakąś wojnę konkurujących botów. Czemu nie? Konkurencja jest dobra.
Zwykły użytkownik Steemit mógłby na takiej konkurencji skorzystać, kiedy boty zajmą się sobą, a nie nim.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Co?
Konkurencja ludzi jest dobra, botów nic nie znaczy. Boty nie mają żadnego celu, więc się same nie usprawnią.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Usprawnią? -Nieee, wystarczy że się wzajemnie zablokują. ;)
Gdy bot robi coś źle, to: zablokowanie zła> dobro.
Z botami jest inaczej niż ludźmi.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ale nie można nikogo blokować na Steem, ew. wyjaśnij możliwy mechanizm
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
I słusznie, że nie można nikogo blokować, ale jak już powiedziałem: bot to nie człowiek - nie ktoś tylko coś.
Ja doskonale rozumiem pasję autorów, sam gdybym miał taką wiedzę, na pewno bardzo bym się wkręcił w tworzenie botów, bo to niezwykle fasynujące. I też prawdopodobnie straciłbym dystans. Ale po to potrzebni są tacy tu maruderzy jak ja, aby tego dystansu społeczność nie straciła.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Nice bot.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Przekażę, bo chwilo śpi ze względu na modyfikacje :)
A komentarz zostałby oceniony na 70% czyli poniżej progu spamu, choć blisko.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Bot oszukany za pierwszym razem. :P I had to try. ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Przez chwilę się zastanawiałem czy byłby sens rozdzielać zbiory dokumentów ze wzorcami na przykład na główny zbiór oraz zbiory językowe włączające się dla konkretnych tagów (np. polski dla
#polish
i#pl-.*
) ale to chyba nie ma sensu bo nie widziałem jeszcze (jeszcze!) spamu po polsku.Chyba, że w innych językach jest inaczej?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Teraz połowa zbioru treningowego, dla wiadomości które nie są spamem jest po polsku, a połowa po angielsku. Spamowe są tylko po angielsku, ale nic nie stoi na przeszkodzie, żeby dodać też jakieś polskie.
I to są dane przeznaczone dla tagu #polish (= zoptymalizowane pod ten tag)
Jakby ktoś chciał to uruchomić np na tagu #deutsch albo globalnie na całym steemie to dane trzeba oczywiście dopasować.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit