Jak otwierać komentarze i nie utonąć w spamie

Jak otwierać komentarze i nie utonąć w spamie

Kiedy Twoim zadaniem jest stworzenie czegoś pięknego, nie musisz o tym zbyt wiele mówić, ponieważ wynik jest na oczach wszystkich. Ale jeśli usuniesz napisy z płotów, nikt nie zauważy twojej pracy, dopóki płoty będą wyglądać przyzwoicie lub dopóki nie usuniesz czegoś złego.

Każdy serwis, w którym możesz zostawić komentarz, recenzję, wysłać wiadomość lub przesłać zdjęcia, prędzej czy później staje przed problemem spamu, oszustw i wulgaryzmów. Nie da się tego uniknąć, ale trzeba sobie z tym poradzić.

Nazywam się Michaił, pracuję w zespole antyspamowym, który chroni użytkowników usług Yandex przed takimi problemami. Nasza praca jest rzadko zauważana (i to dobrze!), więc dzisiaj opowiem Wam o niej więcej. Dowiesz się, kiedy umiar jest bezużyteczny i dlaczego dokładność nie jest jedynym wyznacznikiem jego skuteczności. Porozmawiamy także o przeklinaniu na przykładzie kotów i psów oraz o tym, dlaczego czasami warto „myśleć jak przeklinacz”.

W Yandex pojawia się coraz więcej serwisów, w których użytkownicy publikują swoje treści. Możesz zadać pytanie lub napisać odpowiedź w Yandex.Q, omówić aktualności ze stoczni w Yandex.District, podzielić się warunkami ruchu drogowego w rozmowach na Yandex.Maps. Kiedy jednak liczba odbiorców usługi rośnie, staje się ona atrakcyjna dla oszustów i spamerów. Przychodzą i wypełniają komentarze: oferują łatwe pieniądze, reklamują cudowne lekarstwa i obiecują świadczenia socjalne. Z powodu spamerów niektórzy użytkownicy tracą pieniądze, a inni tracą chęć spędzania czasu na zaniedbanym serwisie przerośniętym spamem.

I to nie jest jedyny problem. Staramy się nie tylko chronić użytkowników przed oszustami, ale także stworzyć komfortową atmosferę do komunikacji. Jeśli ludzie zetkną się z przekleństwami i obelgami w komentarzach, prawdopodobnie opuszczą witrynę i nigdy nie wrócą. Oznacza to, że z tym również musisz sobie poradzić.

Czysta sieć

Jak to często bywa w naszym przypadku, pierwsze zmiany narodziły się w wyszukiwarce, w części zajmującej się zwalczaniem spamu w wynikach wyszukiwania. Około dziesięć lat temu pojawiło się tam zadanie filtrowania treści dla dorosłych pod kątem wyszukiwań rodzinnych i zapytań niewymagających odpowiedzi z kategorii 18+. Tak pojawiły się pierwsze ręcznie pisane słowniki porno i przekleństw, które uzupełniali analitycy. Głównym zadaniem było sklasyfikowanie żądań na te, w których dopuszczalne jest pokazywanie treści dla dorosłych i takie, w których nie jest to dozwolone. Na potrzeby tego zadania zebrano znaczniki, zbudowano heurystyki i przeszkolono modele. Tak pojawiły się pierwsze rozwiązania w zakresie filtrowania niechcianych treści.

Z biegiem czasu w Yandex zaczęły pojawiać się UGC (treści generowane przez użytkowników) - wiadomości pisane przez samych użytkowników, a Yandex jedynie je publikuje. Z powodów opisanych powyżej wiele wiadomości nie mogło zostać opublikowanych bez przejrzenia - wymagana była moderacja. Następnie postanowili stworzyć usługę, która zapewniłaby ochronę przed spamem i atakami dla wszystkich produktów Yandex UGC oraz wykorzystała rozwiązania do filtrowania niechcianych treści w wyszukiwarce. Usługa nosiła nazwę „Czysta sieć”.

Nowe zadania i pomoc pchaczy

Na początku działała u nas tylko prosta automatyzacja: serwisy wysyłały nam SMS-y, a my uruchamialiśmy na nich słowniki wulgaryzmów, słowniki pornograficzne i wyrażenia regularne – analitycy kompilowali wszystko ręcznie. Jednak z biegiem czasu usługa była wykorzystywana w coraz większej liczbie produktów Yandex i musieliśmy nauczyć się pracować z nowymi problemami.

Często zamiast recenzji użytkownicy publikują bezsensowny zestaw listów, próbując zwiększyć swoje osiągnięcia, czasem reklamują swoją firmę w recenzjach firmy konkurencyjnej, a czasem po prostu wprowadzają w błąd organizacje i piszą w recenzji o sklepie zoologicznym: „ Idealnie ugotowana ryba!” Być może kiedyś sztuczna inteligencja nauczy się doskonale uchwycić znaczenie dowolnego tekstu, ale teraz automatyzacja czasami radzi sobie gorzej niż ludzie.

Stało się jasne, że nie da się tego zrobić bez ręcznego znakowania, dlatego dodaliśmy do naszego obwodu drugi etap – wysłaliśmy go do ręcznej kontroli przez osobę. Uwzględniono tam te opublikowane teksty, dla których klasyfikator nie widział żadnych problemów. Skalę takiego zadania łatwo sobie wyobrazić, dlatego nie tylko zdaliśmy się na asesorów, ale także skorzystaliśmy z „mądrości tłumu”, czyli zwróciliśmy się o pomoc do tolokerów. To oni pomagają nam rozpoznać, co przeoczyła maszyna, i w ten sposób ją uczą.

Inteligentne buforowanie i hashowanie LSH

Kolejnym problemem, jaki napotkaliśmy podczas pracy z komentarzami, był spam, a dokładniej jego ilość i prędkość rozprzestrzeniania się. Kiedy grono odbiorców Yandex.Region zaczęło szybko rosnąć, pojawili się tam spamerzy. Nauczyli się omijać wyrażenia regularne, nieznacznie zmieniając tekst. Spam oczywiście był nadal wykrywany i usuwany, ale w skali Yandexa nieakceptowalną wiadomość wysłaną nawet na 5 minut mogły zobaczyć setki osób.

Jak otwierać komentarze i nie utonąć w spamie

Oczywiście nam to nie odpowiadało i zrobiliśmy inteligentne buforowanie tekstu w oparciu o LSH (hashowanie zależne od lokalizacji). Działa to w ten sposób: znormalizowaliśmy tekst, usunęliśmy z niego linki i pocięliśmy na n-gramy (sekwencje n liter). Następnie obliczono skróty n-gramów i z nich zbudowano wektor LSH dokumentu. Chodzi o to, że podobne teksty, nawet jeśli zostały nieco zmienione, zamieniły się w podobne wektory.

Rozwiązanie to umożliwiło ponowne wykorzystanie werdyktów klasyfikatorów i tolokerów dla podobnych tekstów. Podczas ataku spamowego, gdy tylko pierwsza wiadomość przeszła skanowanie i trafiła do pamięci podręcznej z oceną „spam”, wszystkie nowe podobne wiadomości, nawet zmodyfikowane, otrzymywały tę samą ocenę i były automatycznie usuwane. Później nauczyliśmy się, jak szkolić i automatycznie przekwalifikowywać klasyfikatory spamu, ale ta „inteligentna pamięć podręczna” została z nami i nadal często nam pomaga.

Dobry klasyfikator tekstu

Nie mając czasu na przerwę w walce ze spamem, zdaliśmy sobie sprawę, że 95% naszych treści jest moderowanych ręcznie: klasyfikatory reagują tylko na naruszenia, a większość tekstów jest dobra. Ładujemy sprzątaczki, które w 95 przypadkach na 100 wystawiają ocenę „Wszystko w porządku”. Musiałem wykonać nietypową pracę - stworzyć klasyfikatory dobrej treści, na szczęście w tym czasie zgromadziły się znaczniki.

Pierwszy klasyfikator wyglądał tak: lematyzujemy tekst (sprowadzamy wyrazy do ich pierwotnej formy), wyrzucamy wszystkie pomocnicze części mowy i korzystamy z przygotowanego wcześniej „słownika dobrych lematów”. Jeśli wszystkie słowa w tekście są „dobre”, wówczas cały tekst nie zawiera żadnych naruszeń. W przypadku różnych usług takie podejście natychmiast zapewniło od 25 do 35% automatyzacji ręcznego oznaczania. Oczywiście takie podejście nie jest idealne: łatwo połączyć kilka niewinnych słów i uzyskać bardzo obraźliwe stwierdzenie, ale pozwoliło nam szybko osiągnąć dobry poziom automatyzacji i dało nam czas na uczenie bardziej złożonych modeli.

Kolejne wersje dobrych klasyfikatorów tekstu zawierały już modele liniowe, drzewa decyzyjne i ich kombinacje. Aby na przykład zaznaczyć nieuprzejmość i obelgi, wypróbowujemy sieć neuronową BERT. Ważne jest, aby uchwycić znaczenie słowa w kontekście i powiązanie między słowami z różnych zdań, a BERT dobrze sobie z tym radzi. (Nawiasem mówiąc, ostatnio koledzy z News powiedział, jak wykorzystuje się technologię do niestandardowego zadania - wyszukiwania błędów w nagłówkach.) Dzięki temu udało się zautomatyzować do 90% przepływu, w zależności od usługi.

Dokładność, kompletność i szybkość

Aby się rozwijać, trzeba zrozumieć, jakie korzyści niosą ze sobą określone klasyfikatory automatyczne, jakie w nich zachodzą zmiany i czy jakość ręcznych kontroli nie ulega pogorszeniu. W tym celu używamy wskaźników precyzji i zapamiętywania.

Dokładność to odsetek prawidłowych werdyktów wśród wszystkich werdyktów dotyczących złych treści. Im wyższa dokładność, tym mniej fałszywych alarmów. Jeśli nie zwracasz uwagi na dokładność, teoretycznie możesz usunąć cały spam i wulgaryzmy, a wraz z nimi połowę dobrych wiadomości. Z drugiej strony, jeśli postawisz tylko na dokładność, to najlepszą technologią będzie ta, która w ogóle nikogo nie złapie. Dlatego istnieje również wskaźnik kompletności: udział zidentyfikowanych złych treści w całkowitej liczbie złych treści. Te dwa wskaźniki się równoważą.

Aby dokonać pomiaru, pobieramy próbkę z całego przychodzącego strumienia dla każdej usługi i przekazujemy próbki treści oceniającym w celu specjalistycznej oceny i porównania z rozwiązaniami maszynowymi.

Ale jest jeszcze jeden ważny wskaźnik.

Napisałem powyżej, że nieakceptowalny komunikat mogą zobaczyć setki osób nawet w 5 minut. Liczymy więc, ile razy pokazaliśmy ludziom złe treści, zanim je ukryliśmy. To ważne, bo nie wystarczy efektywnie pracować – trzeba też działać szybko. A kiedy zbudowaliśmy obronę przed przeklinaniem, odczuliśmy to w pełni.

Antymatyzm na przykładzie kotów i psów

Mała dygresja liryczna. Niektórzy mogą powiedzieć, że wulgaryzmy i obelgi nie są tak niebezpieczne jak złośliwe linki i nie są tak irytujące jak spam. Ale staramy się zachować komfortowe warunki komunikacji dla milionów użytkowników, a ludzie nie lubią wracać do miejsc, w których są obrażani. Nie bez powodu zakaz przeklinania i obrażania jest zapisany w regulaminach wielu społeczności, w tym także na Habré. Ale odkopujemy.

Przeklinające słowniki nie są w stanie poradzić sobie z całym bogactwem języka rosyjskiego. Pomimo tego, że istnieją tylko cztery główne rdzenie przekleństw, z nich można ułożyć niezliczoną liczbę słów, których nie wyłapią żadne zwykłe silniki. Poza tym można część słowa zapisać w transliteracji, zastąpić litery podobnymi kombinacjami, przestawić litery, dodać gwiazdki itp. Czasami bez kontekstu w zasadzie nie da się ustalić, czy użytkownik miał na myśli przekleństwo. Szanujemy zasady Habra, dlatego pokażemy to nie na żywych przykładach, ale na kotach i psach.

Jak otwierać komentarze i nie utonąć w spamie

„Prawo” – powiedział kot. Ale rozumiemy, że kot powiedział inne słowo...

Zaczęliśmy myśleć o algorytmach „rozmytego dopasowywania” dla naszego słownika i o mądrzejszym przetwarzaniu wstępnym: zapewniliśmy transliterację, sklejaliśmy spacje i znaki interpunkcyjne, szukaliśmy wzorców i pisaliśmy na nich osobne wyrażenia regularne. Takie podejście przyniosło rezultaty, ale często zmniejszało dokładność i nie zapewniało pożądanej kompletności.

Potem postanowiliśmy „myśleć jak przeklinacze”. Zaczęliśmy sami wprowadzać szum do danych: zmienialiśmy kolejność liter, generowaliśmy literówki, zastępowaliśmy litery podobną pisownią i tak dalej. Początkowe znaczniki w tym celu przyjęto poprzez zastosowanie słowników mat do dużych korpusów tekstów. Jeśli weźmiesz jedno zdanie i przekręcisz je na kilka sposobów, otrzymasz wiele zdań. W ten sposób możesz zwiększyć próbkę treningową dziesiątki razy. Pozostało jedynie wytrenować na powstałej puli jakiś mniej lub bardziej inteligentny model uwzględniający kontekst.

Jak otwierać komentarze i nie utonąć w spamie

Jest zbyt wcześnie, aby mówić o ostatecznej decyzji. Wciąż eksperymentujemy z podejściami do tego problemu, ale już widzimy, że prosta symboliczna sieć splotowa złożona z kilku warstw znacznie przewyższa słowniki i zwykłe silniki: można zwiększyć zarówno dokładność, jak i zapamiętywanie.

Oczywiście rozumiemy, że zawsze znajdą się sposoby na ominięcie nawet najbardziej zaawansowanej automatyzacji, zwłaszcza gdy sprawa jest tak niebezpieczna: pisz tak, aby głupia maszyna nie zrozumiała. Tutaj, podobnie jak w walce ze spamem, naszym celem nie jest wyeliminowanie samej możliwości napisania czegoś nieprzyzwoitego, naszym zadaniem jest upewnienie się, że gra nie jest warta świeczki.

Otworzenie możliwości dzielenia się swoją opinią, komunikowania się i komentowania nie jest trudne. Dużo trudniej jest zapewnić bezpieczne, komfortowe warunki i pełne szacunku traktowanie ludzi. A bez tego nie będzie rozwoju żadnej społeczności.

Źródło: www.habr.com

Dodaj komentarz