
Kiedy twoją pracą jest tworzenie czegoś pięknego, nie trzeba o tym specjalnie opowiadać, ponieważ efekty są widoczne dla każdego. Jeśli jednak zmazywanie napisów z płotów, twoja praca nie jest zauważana, dopóki płoty wyglądają przyzwoicie, lub dopóki nie zetrzesz czegoś niewłaściwego.
Każda usługa, w której można zostawić komentarz, recenzję, wysłać wiadomość lub przesłać zdjęcia, prędzej czy później napotyka problemy związane ze spamem, oszustwami i wulgaryzmami. Tego nie da się uniknąć, ale trzeba z tym walczyć.
Mam na imię Michaił, pracuję w zespole Antyspamu, który chroni użytkowników usług Yandex przed podobnymi problemami. Nasza praca rzadko bywa zauważana (i dobrze!), dlatego dziś opowiem o niej więcej. Dowiesz się, w jakich sytuacjach moderacja jest bezcelowa i dlaczego dokładność nie jest jedynym wskaźnikiem jej efektywności. Porozmawiamy także o przekleństwach na przykładzie kotów i psów oraz o tym, dlaczego czasem warto 'myśleć jak wulgarny'.
W Yandex pojawia się coraz więcej serwisów, w których użytkownicy publikują swój kontent. Można zadać pytanie lub napisać odpowiedź w Yandex.Q, omówić wiadomości lokalne w Yandex.Dzielnicy, podzielić się sytuacją drogową w rozmowach na Yandex.Mapas. Jednak, gdy publiczność serwisu rośnie, staje się on atrakcyjny dla oszustów i spamerów. Przybywają i wypełniają komentarze: oferują łatwy zarobek, reklamują cudowne środki i obiecują wypłaty socjalne. Z powodu spamerów niektórzy użytkownicy tracą pieniądze, a inni – chęć korzystania z zaniedbanego serwisu z spamem.
I to nie jest jedyny problem. Dążymy nie tylko do ochrony użytkowników przed oszustami, ale także do stworzenia komfortowej atmosfery do komunikacji. Jeśli ludzie w komentarzach znajdują wulgaryzmy i obraźliwe słowa, istnieje duże prawdopodobieństwo, że odejdą i więcej się nie pojawią. Oznacza to, że należy umieć z tym walczyć.
Czysta Sieć
Jak to u nas często bywa, pierwsze prace powstały w Wyszukiwarce, w tej części, która walczy ze spamem w wynikach. Już dziesięć lat temu pojawiło się tam zadanie filtrowania treści dla dorosłych, przeznaczonego dla rodzinnych zapytań oraz tych, które nie zakładały odpowiedzi z kategorii 18+. Tak powstały pierwsze, ręcznie wprowadzone słowniki pornograficzne i wulgaryzmów, które były uzupełniane przez analityków. Głównym celem było klasyfikowanie zapytań według tego, gdzie dopuszczalne jest pokazywanie treści dla dorosłych, a gdzie nie. Zbierano znaczniki, budowano heurystyki, uczono modele. Tak powstały pierwsze prace nad filtrowaniem niepożądanej treści.
Z czasem w Yandexie zaczęły pojawiać się UGC (treści generowane przez użytkowników) - wiadomości pisane przez samych użytkowników, a Yandex je tylko publikuje. Z podanych wyżej powodów wiele wiadomości nie można było publikować bez sprawdzania - wymagana była moderacja. Wtedy postanowiono stworzyć serwis, który zapewniałby ochronę przed spamem i złoczyńcami dla wszystkich produktów UGC Yandexu i wykorzystał prace nad filtrowaniem niepożądanej treści w Wyszukiwarce. Serwis nazwano „Czysta Sieć”.
Nowe zadania i pomoc tłumaczy
Na początku korzystaliśmy tylko z prostej automatyki: serwisy przesyłały nam teksty, a my uruchamialiśmy na nich słowniki wulgaryzmów, słowniki pornograficzne oraz wyrażenia regularne - analitycy opracowywali wszystko ręcznie. Ale serwis z czasem był stosowany w coraz większej liczbie produktów Yandexu, więc musieliśmy nauczyć się radzić sobie z nowymi problemami.
Często zamiast recenzji użytkownicy publikują bezsensowny zbiór liter, starając się zdobyć osiągnięcie, czasami reklamują swoją firmę w recenzjach o firmach konkurencyjnych, a czasami po prostu mylą organizacje i w recenzji o sklepie zoologicznym piszą: „Pięknie przygotowana ryba!”. Możliwe, że pewnego dnia sztuczna inteligencja nauczy się idealnie uchwycić sens dowolnego tekstu, ale obecnie automatyka czasami radzi sobie gorzej niż człowiek.
Okazało się, że nie da się obejść bez ręcznej moderacji, więc dodaliśmy do naszego obiegu drugi etap — wysyłkę do ręcznej weryfikacji przez człowieka. Trafiały tam opublikowane teksty, w przypadku których klasyfikator nie dostrzegł problemów. Można sobie łatwo wyobrazić rozmiary tego zadania, dlatego nie tylko polegaliśmy na oceniających, ale również skorzystaliśmy z „mądrości tłumów”, czyli zwróciliśmy się o pomoc do wolontariuszy. To właśnie oni pomagają nam wychwycić to, co umknęło maszynie, i tym samym uczą ją.
Inteligentne buforowanie i LSH-hashing
Kolejnym problemem, z którym się zmagaliśmy podczas pracy z komentarzami, był spam, a dokładniej jego ilość i szybkość rozprzestrzeniania się. Gdy społeczność Yandex.Rajon szybko rosła, pojawiły się tam spamery. Nauczyli się omijać reguły, nieznacznie zmieniając tekst. Spam oczywiście dalej znajdowano i usuwano, jednak w skali Yandexa nawet nieodpowiedni post wyświetlony przez 5 minut mógł zobaczyć setki osób.

Oczywiście nas to nie satysfakcjonowało, więc wprowadziliśmy inteligentne buforowanie tekstów oparte na LSH (). Działa to w ten sposób: normalizowaliśmy tekst, usuwaliśmy z niego linki i dzieliliśmy go na n-gramy (ciągi z n znaków). Następnie obliczaliśmy hashe dla n-gramów, a następnie budowaliśmy wektor LSH dokumentu. Istotą jest to, że podobne teksty, nawet jeśli zostały nieznacznie zmodyfikowane, przekształcały się w podobne wektory.
To rozwiązanie pozwoliło na ponowne wykorzystanie werdyktów klasyfikatorów i wolontariuszy dla podobnych tekstów. Podczas ataku spamowego, gdy pierwsza wiadomość przeszła weryfikację i trafiła do bufora z werdyktem „spam”, wszystkie nowe podobne wiadomości, nawet zmodyfikowane, otrzymywały ten sam werdykt i były automatycznie usuwane. Później nauczyliśmy się uczyć i automatycznie ponownie uczyć klasyfikatory spamu, ale ten „inteligentny bufor” pozostał z nami i do dziś często nam pomaga.
Klasyfikator dobrych tekstów
Nie zdążywszy odpocząć od walki ze spamem, zdaliśmy sobie sprawę, że 95% treści jest moderowane ręcznie: klasyfikatory reagują tylko na naruszenia, a większość tekstów jest dobra. Zatrudniamy pełnoetatowych pracowników, którzy w 95 przypadkach na 100 oceniają, że "wszystko w porządku". Musieliśmy zająć się nietypową pracą – tworzeniem klasyfikatorów dobrych treści, tym bardziej, że do tej pory zgromadziliśmy wystarczająco dużo oznaczeń.
Pierwszy klasyfikator wyglądał tak: lematyzujemy tekst (przywracamy słowa do formy podstawowej), usuwamy wszystkie części mowy i stosujemy wcześniej przygotowany „słownik dobrych lem”. Jeśli w tekście wszystkie słowa są „dobre”, to tekst w całości nie zawiera naruszeń. W różnych serwisach takie podejście przyniosło od 25 do 35% automatyzacji ręcznego oznaczania. Oczywiście, takie podejście nie jest idealne: łatwo jest zestawić kilka niewinnych słów i uzyskać bardzo obraźliwe stwierdzenie, ale umożliwiło nam szybkie osiągnięcie dobrego poziomu automatyzacji oraz czas na wytrenowanie bardziej złożonych modeli.
Kolejne wersje klasyfikatorów dobrych tekstów zawierały już zarówno modele liniowe, jak i drzewa decyzyjne oraz ich kombinacje. Na przykład, do oznaczania wulgaryzmów i obraźliwości próbujemy sieci neuronowej BERT. Ważne jest uchwycenie znaczenia słowa w kontekście oraz związku słów z różnych zdań, a BERT dobrze sobie z tym radzi. (Nawiasem mówiąc, niedawno koledzy z wiadomości, jak stosują tę technologię do nietypowego zadania — wyszukiwania błędów w nagłówkach.) W efekcie udało się zautomatyzować do 90% strumienia w zależności od usługi. Dokładność, pełnia i szybkość.
Aby się rozwijać, musimy zrozumieć, jakie korzyści przynoszą różne automatyczne klasyfikatory, zmiany w nich oraz czy jakość ręcznych kontroli nie ulega degradacji. W tym celu stosujemy wskaźniki dokładności i pełni.
Чтобы развиваться, нужно понимать, какую пользу приносят те или иные автоматические классификаторы, изменения в них, а также не деградирует ли качество ручных проверок. Для этого мы применяем показатели точности и полноты.
Dokładność to odsetek poprawnych werdyktów wśród wszystkich werdyktów dotyczących złej treści. Im wyższa dokładność, tym mniej fałszywych alarmów. Jeśli nie dbać o dokładność, teoretycznie można usunąć cały spam i wulgaryzmy, a razem z nimi połowę dobrych wiadomości. Z drugiej strony, jeśli polegać tylko na dokładności, najlepsza byłaby ta technologia, która w ogóle nikogo nie wykrywa. Dlatego istnieje jeszcze wskaźnik pełności: odsetek wykrytej złej treści wśród całkowitego wolumenu złej treści. Te dwa wskaźniki równoważą się nawzajem.
Aby to zmierzyć, próbkujemy cały napływ danych z każdego serwisu i przekazujemy próbki treści oceniającym ekspertom do oceny i porównania z decyzjami maszyny.
Ale jest jeszcze jeden ważny wskaźnik.
Wyżej wspomniałem, że nieodpowiedni przekaz może być widziany przez setki osób w zaledwie 5 minut. Dlatego liczymy, ile razy zdążyliśmy pokazać ludziom złą treść zanim ją ukryliśmy. To ważne, ponieważ nie wystarczy działać skutecznie — trzeba też działać szybko. Kiedy budowaliśmy ochronę przed wulgaryzmami, poczuliśmy to w pełni.
Anty-wulgaryzmy na przykładzie kotków i piesków
Małe liryczne dygresje. Ktoś może mówić, że wulgaryzmy i obraźliwe wypowiedzi nie są tak niebezpieczne, jak złośliwe linki, i nie są tak irytujące, jak spam. Ale dążymy do stworzenia komfortowych warunków do komunikacji dla milionów użytkowników, a ludzie nie lubią wracać tam, gdzie ich obrażają. Nic dziwnego, że zakaz wulgaryzmów i obraźliwych słów jest zapisany w zasadach wielu społeczności, w tym na Habrze. Ale odciągnęliśmy się od tematu.
Słowniki wulgaryzmów nie radzą sobie z całym bogactwem języka rosyjskiego. Mimo że są tylko cztery główne rdzenie wulgaryzmów, można z nich utworzyć niezliczoną ilość słów, których nie da się uchwycić żadnymi wyrażeniami regularnymi. Ponadto można pisać część słowa transliteracją, zastępować litery podobnymi zestawieniami, przestawiać litery, dodawać gwiazdki itd. Czasami bez kontekstu w ogóle nie da się określić, co użytkownik miał na myśli, używając wulgaryzmu. Szanujemy zasady Habra, dlatego zademonstrujemy to nie na żywych przykładach, a na kotkach i pieskach.

„Miau”, powiedział kotek. Ale rozumiemy, że kotek powiedział inne słowo…
Zaczęliśmy myśleć o algorytmach „niedokładnego dopasowania” naszego słownika oraz o bardziej inteligentnym wstępnym przetwarzaniu: przekształcaliśmy transliterację, łączyliśmy spacje i interpunkcję, szukaliśmy wzorców i pisaliśmy oddzielne wyrażenia regularne. Takie podejście przynosiło rezultaty, ale często obniżało dokładność, nie zapewniając pożądanej kompletności.
Wtedy postanowiliśmy „myśleć jak wulgaryści”. Zaczęliśmy sami wprowadzać szum do danych: przestawialiśmy litery, generowaliśmy błędy pisowni, zamienialiśmy litery na podobne i tak dalej. Początkowe oznaczenia braliśmy z zastosowaniem słowników przekleństw do dużych korpusów tekstów. Jeśli weźmiemy jedno zdanie i zniekształcimy je na kilka sposobów, otrzymamy już wiele zdań. W ten sposób można zwiększyć zbiór szkoleniowy dziesięciokrotnie. Pozostało tylko nauczyć na uzyskanej próbce jakikolwiek bardziej lub mniej inteligentny model, uwzględniający kontekst.

Ostateczne rozwiązanie to wciąż przedmiot dyskusji. Wciąż eksperymentujemy z podejściami do tego problemu, ale już widzimy, że prosta konwolucyjna sieć symboli z kilku warstw wyraźnie przewyższa słowniki i wyrażenia regularne: udało się zwiększyć zarówno dokładność, jak i kompletność.
Oczywiście rozumiemy, że zawsze znajdą się sposoby na obejście nawet najbardziej zaawansowanej automatyki, zwłaszcza gdy sprawa jest tak ekscytująca: napisać tak, aby głupia maszyna nie zrozumiała. Tutaj, tak jak w przypadku walki ze spamem, nie mamy na celu wykorzenienia samej możliwości napisania czegoś niecenzuralnego, naszym zadaniem jest sprawić, by gra nie była warta świeczki.
Otwarcie możliwości dzielenia się swoją opinią, komunikowania się i komentowania – to nie jest trudne. O wiele trudniej jest osiągnąć bezpieczne, komfortowe warunki i szacunek dla ludzi. A bez tego nie będzie rozwoju żadnej społeczności.
Źródło: habr.com
