Як відкрити коментарі та не потонути в спамі

Як відкрити коментарі та не потонути в спамі

Коли твоя робота — створювати щось гарне, про неї особливо не розповідати, бо результат у всіх перед очима. А ось якщо ти стираєш написи із парканів, твою роботу ніхто не помічає, поки паркани виглядають пристойно або поки ти не зітреш щось не те.

Будь-який сервіс, де можна залишити коментар, відгук, відправити повідомлення або завантажити картинки, рано чи пізно стикається з проблемою спаму, шахрайства та нецензурщини. Цього не уникнути, але із цим треба боротися.

Мене звуть Михайло, я працюю в команді Антиспаму, яка захищає користувачів Яндекса від подібних проблем. Наша робота рідко буває помітною (і добре!), тому сьогодні я розповім про неї докладніше. Ви дізнаєтеся, в яких випадках марна модерація і чому точність - не єдиний показник її ефективності. А ще ми поговоримо про матюку на прикладі кішок і собак і про те, чому іноді корисно «мислити як матюка».

В Яндексі з'являється все більше сервісів, де користувачі публікують свій контент. Можна запитати або написати відповідь в Яндекс.Кью, обговорити новини двору в Яндекс.Районі, поділитися дорожньою обстановкою в розмовниках на Яндекс.Картах. Але коли аудиторія сервісу зростає, він стає привабливим для шахраїв та спамерів. Вони приходять та заповнюють коментарі: пропонують легкий заробіток, рекламують чудодійні кошти та обіцяють соціальні виплати. Через спамерів одні користувачі втрачають гроші, а інші — бажання проводити час на недоглянутому, зарослому спамом сервісі.

І це не єдина проблема. Ми прагнемо не лише захистити користувачів від шахраїв, а й створити комфортну атмосферу для спілкування. Якщо люди в коментарях стикаються з матом та образами, вони з великою ймовірністю підуть і більше не повернуться. Значить, із цим теж треба вміти боротися.

Чистий Веб

Як це у нас часто буває, перші напрацювання народилися у Пошуку, у тій частині, яка бореться зі спамом у видачі. Ще років десять тому там постало завдання фільтрації дорослого контенту для сімейного пошуку та для запитів, які не передбачають відповіді з категорії 18+. Так з'явилися перші, вручну набрані словники порно та мату, їх поповнювали аналітики. Основним завданням була класифікація запитів на ті, де можна показувати дорослий контент і де ні. Під це завдання збирали розмітку, будували евристики, навчали моделі. Так з'явилися перші доробки для фільтрації небажаного контенту.

Згодом в Яндексі став з'являтися UGC (user generated content) — повідомлення, які самі пишуть користувачі, а Яндекс тільки публікує. З описаних вище причин багато повідомлень не можна було публікувати не дивлячись — була потрібна модерація. Тоді вирішили зробити сервіс, який надавав би захист від спаму та зловмисників для всіх UGC-продуктів Яндекса і використовував напрацювання для фільтрації небажаного контенту в Пошуку. Сервіс назвали "Чистий Веб".

Нові завдання та допомога толокерів

Спочатку у нас працювала лише проста автоматика: сервіси надсилали нам тексти, а ми проганяли на них словники мату, словники порно та регулярки — аналітики складали все вручну. Але сервіс згодом застосовувався в дедалі більшій кількості продуктів Яндекса, і нам довелося вчитися працювати з новими проблемами.

Часто замість відгуку користувачі публікують безглуздий набір букв, намагаючись накрутити собі ачивку, іноді рекламують свою компанію у відгуках про компанію конкурента, а іноді просто плутають організації та у відгуку про зоомагазин пишуть: «Прекрасно приготовлена ​​риба!». Можливо, колись штучний інтелект навчиться ідеально вловлювати сенс будь-якого тексту, але зараз автоматика часом справляється гірше за людину.

Стало зрозуміло, що без ручної розмітки тут не обійтись, і ми прилаштували до нашого контуру другий щабель — відправку на ручну перевірку людиною. Туди потрапляли опубліковані тексти, щодо яких класифікатор не побачив проблем. Масштаби такого завдання ви можете собі легко уявити, тому ми не тільки поклалися на асесорів, але й скористалися «мудрістю натовпу», тобто звернулися по допомогу до толокерів. Саме вони допомагають нам виявляти те, що пропустила машина, і тим самим навчають її.

Розумне кешування та LSH-хешування

Ще одна проблема, з якою ми зіткнулися під час роботи з коментарями, — спам, а точніше, його обсяги та швидкість поширення. Коли аудиторія Яндекс.Району почала швидко зростати, туди прийшли спамери. Вони навчилися оминати регулярки, злегка змінюючи текст. Спам, звичайно, все одно знаходили і видаляли, але в масштабах Яндекса розміщене навіть на 5 хвилин неприйнятне повідомлення могли побачити сотні людей.

Як відкрити коментарі та не потонути в спамі

Нас, звичайно, це не влаштовувало, і ми зробили розумне кешування текстів на основі LSH (чутливе до місцевості хешування). Працює це так: ми нормалізували текст, викидали з нього посилання та різали його на n-грами (послідовності з n букв). Далі вважали хеші від n-грам, а з них вже будували LSH-вектор документа. Сенс у тому, що схожі тексти, навіть якщо їх трохи змінили, перетворювалися на схожі вектори.

Це рішення дозволило перевикористовувати вердикти класифікаторів та толокерів для схожих текстів. При спам-атаці, як тільки перше повідомлення проходило перевірку і потрапляло в кеш з вердиктом «спам», нові подібні повідомлення, навіть видозмінені, отримували той же вердикт і видалялися автоматично. Пізніше ми навчилися навчати та автоматично перенавчати класифікатори спаму, але цей «розумний кеш» залишився з нами і досі нас часто рятує.

Класифікатор хороших текстів

Не встигнувши відпочити від боротьби зі спамом, ми усвідомили, що 95% контенту у нас модерується вручну: класифікатори реагують тільки на порушення, а більшість текстів хороші. Ми навантажуємо толокерів, які у 95 випадках зі 100 ставлять оцінку «Все ОК». Довелося зайнятися незвичною роботою — робити класифікатори гарного контенту, благо розмітки за цей час нагромадилося достатньо.

Перший класифікатор виглядав так: лематизуємо текст (наводимо слова до початкової форми), викидаємо всі службові частини мови та застосовуємо заздалегідь заготовлений «словник хороших лем». Якщо в тексті всі слова «хороші», значить, і текст не містить порушень. На різних сервісах такий підхід одразу дав від 25 до 35% автоматизації ручної розмітки. Звичайно, такий підхід не ідеальний: нескладно скомбінувати кілька безневинних слів і отримати дуже образливе висловлювання, але він дозволив нам швидко вийти на хороший рівень автоматизації і дав час навчити складніші моделі.

Наступні версії класифікаторів хороших текстів вже включали і лінійні моделі, і вирішальні дерева, і їх комбінації. Для розмітки грубостей та образ ми, наприклад, пробуємо нейромережу BERT. Тут важливо вловити значення слова в контексті та зв'язок слів з різних речень, і BERT непогано справляється із цим. (До речі, нещодавно колеги з Новин розповідали, як використовують технологію для нестандартного завдання - пошуку помилок в заголовках.) У результаті вдалося автоматизувати до 90% потоку в залежності від сервісу.

Точність, повнота та швидкість

Щоб розвиватися, потрібно розуміти, яку користь приносять ті чи інші автоматичні класифікатори, зміни в них, а також чи не деградує якість ручних перевірок. Для цього ми застосовуємо показники точності та повноти.

Точність це частка коректних вердиктів серед усіх вердиктів про поганий контент. Чим вища точність, тим менше помилкових спрацьовувань. Якщо не стежити за точністю, то теоретично можна видалити весь спам і мат, а разом з ними — половину гарних повідомлень. З іншого боку, якщо спиратися лише на точність, то найкращою виявиться та технологія, яка взагалі нікого не ловить. Тому ще є показник повноти: частка виявленого поганого контенту серед усього обсягу поганого контенту. Ці дві метрики врівноважують одна одну.

Для вимірювання ми семплюємо весь вхідний потік по кожному сервісу та віддаємо вибірки контенту асесорам для експертної оцінки та порівняння з рішеннями машини.

Але є ще один важливий показник.

Вище писав, що неприйнятне повідомлення навіть за 5 хвилин можуть побачити сотні людей. Тому ми вважаємо, скільки разів ми встигли показати людям поганий контент, перш ніж приховали його. Це важливо, тому що недостатньо працювати якісно – потрібно працювати ще й швидко. І коли ми будували захист від матюка, то відчули це повною мірою.

Антимат на прикладі кішечок та собачок

Невеликий ліричний відступ. Хтось може сказати, що нецензурщина та образи не такі небезпечні, як шкідливі посилання, і не так дратують, як спам. Але ми прагнемо підтримувати комфортні умови для спілкування мільйонів користувачів, а люди не люблять повертатись туди, де їх ображають. Не дарма заборона мату та образ прописана в правилах багатьох спільнот, у тому числі і на Хабрі. Але ми відволіклися.

Словники мату не справляються з усім багатством російської. Незважаючи на те, що є всього чотири основні матюки, з них можна скласти незліченну кількість слів, яке не зловиш ніякими регулярками. До того ж можна писати транслітом частину слова, замінювати літери схожими поєднаннями, переставляти літери, додавати зірочки і т. д. Іноді без контексту в принципі не можна визначити, що користувач мав на увазі матюки. Ми поважаємо правила Хабра, тому продемонструємо це не на живих прикладах, а на котиках та собачках.

Як відкрити коментарі та не потонути в спамі

"Ляу", - сказав котик. Але ми розуміємо, що котик сказав інше слово.

Ми почали думати про алгоритми «нечіткого матчингу» нашого словника і про розумніший препроцессинг: наводили трансліт, склеювали прогалини та пунктуацію, шукали патерни та писали на них окремі регулярки. Такий підхід давав результати, але часто знижував точність, не даючи бажаної повноти.

Тоді ми вирішили «мислити як матюки». Ми почали самі вносити шум у дані: переставляли літери, генерували друкарські помилки, замінювали літери схожими за написанням і так далі. Початкову розмітку для цього брали, застосовуючи словники мату до великих корпусів текстів. Якщо взяти одну пропозицію і зіпсувати її кількома способами, вийде вже багато пропозицій. Так можна збільшити навчальну вибірку в десятки разів. Залишалося лише навчити на отриманому пулі якусь більш-менш розумну модель, яка враховує контекст.

Як відкрити коментарі та не потонути в спамі

Про фінальне рішення поки говорити зарано. Ми все ще експериментуємо з підходами до цієї проблеми, але вже бачимо, що проста символьна згорткова мережа з кількох шарів відчутно перевершує словники та регулярки: виходить збільшити і точність, і повноту.

Звичайно, ми розуміємо, що завжди знайдуться способи обійти навіть найпросунутішу автоматику, особливо коли справа така азартна: написати так, щоб дурна машина не зрозуміла. Тут, як і при боротьбі зі спамом, у нас немає мети викорінити саму можливість написати щось нецензурне, наше завдання зробити так, щоб гра не коштувала свічок.

Відкрити можливість ділитися своєю думкою, спілкуватися та коментувати — неважко. Куди складніше досягти безпечних, комфортних умов та поважного ставлення до людей. А без цього не буде розвитку будь-якої спільноти.

Джерело: habr.com

Додати коментар або відгук