Як ми модеруємо оголошення

Як ми модеруємо оголошення

Кожен сервіс, чиї користувачі можуть створювати власний контент (UGC — User-generated content), змушений не лише вирішувати бізнес-завдання, а й наводити лад у UGC. Погана або неякісна модерація контенту в результаті може зменшити привабливість сервісу для користувачів, аж до припинення його роботи.

Сьогодні ми вам розповімо про синергію між Юлою та Однокласниками, яка допомагає нам ефективно модерувати оголошення в Юлі.

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

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

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

Чому однокласники?

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

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

Як ми модеруємо оголошення

Далі для стислості називатимемо платформу модерації ОК просто «платформа».

Як все влаштовано

Між Юлою та Однокласниками обмін даними налагоджено через Апач Кафка.

Чому ми вибрали цей інструмент?

  • У Юлі всі оголошення проходять постмодерацію, тому спочатку синхронна відповідь не була потрібна.
  • Якщо трапиться лютий абзац, і Юла або Однокласники будуть недоступні, в тому числі через якісь пікові навантаження, то дані з Kafka нікуди не пропадуть і пізніше їх можна буде дочитати.
  • Платформа вже була інтегрована з Kafka, тому більшість питань безпеки було вирішено.

Як ми модеруємо оголошення

На кожне створене або змінене користувачем оголошення Юлі формується JSON з даними, який кладеться в Kafka для наступної модерації. З Kafka оголошення завантажуються в платформу, де по них виносяться рішення автоматично або вручну. Погані оголошення блокуються із зазначенням причини, а ті, у яких платформа не знайшла порушень, позначаються як «хороші». Потім усі рішення відправляються назад у Юлу та застосовуються у сервісі.

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

Автоматична обробка

Що відбувається з оголошенням після того, як воно потрапляє до платформи? Кожне оголошення розбивається на кілька сутностей:

  • назва,
  • опис,
  • фотографія,
  • обрана користувачем категорія та підкатегорія оголошення,
  • ціна.

Як ми модеруємо оголошення

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

Тексти перед кластеризацією нормалізуються, щоб викинути спецсимволи, змінені літери та інше сміття. Отримані дані розбиваються на N-грами, кожна з яких хешується. У результаті виходить безліч унікальних хешів. Схожість між текстами вважається за мірі Жаккара між двома множинами. Якщо схожість більша за порогову, то тексти склеюються в один кластер. Для прискорення пошуку схожих кластерів використовується MinHash та Locality-sensitive hashing.

Для фотографій придумані різні варіанти склеювання зображень, від порівняння pHash картинок до пошуку дублікатів за допомогою нейронної мережі.

Останній спосіб найсуворіший. Для навчання моделі підбиралися такі трійки зображень (N, A, P), у яких N не схожий на А, а P — схожий на А (є напівдублікатом). Потім нейромережа вчилася робити так, щоб A і P були максимально близькі, а A і N максимально далекі. Так виходить менше хибних спрацьовувань порівняно з тим, щоб просто взяти ембеддінги від мережі.

Коли нейромережа отримує на вхід картинки, вона кожної з них генерує N(128)-мерный вектор і робиться запит на оцінку близькості зображення. Далі розраховується поріг, у якому близькі зображення вважаються дублікатами.

Модель вміє майстерно знаходити спамерів, які спеціально фотографують один і той самий товар з різних ракурсів, щоб обійти порівняння по pHash.

Як ми модеруємо оголошенняЯк ми модеруємо оголошення
Приклад спамерських фото, склеєних нейронною мережею як дублікати.

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

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

Після створення всі кластери проходять через низку автоматичних фільтрів. Кожен фільтр виставляє кластеру кількість очок (score): з якою ймовірністю той містить загрозу, яку виявляє цей фільтр.

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

Як ми модеруємо оголошення
Повідомлення про блокування за неправильну категорію.

У нашій платформі машинне навчання почувається як удома. Наприклад, з його допомогою ми шукаємо в назвах та описах заборонені в РФ товари. А моделі нейронних мереж прискіпливо «розглядають» зображення, чи немає на них URL-адрес, спамерських текстів, телефонів і тієї ж «заборонки».

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

Як ми модеруємо оголошення
Кальян намагаються продати, замаскувавши його під самовар.

Паралельно зі складними фільтрами працюють і прості, вирішальні очевидні завдання, пов'язані з текстом:

  • антимат;
  • детектор URL-адрес та телефонних номерів;
  • згадка месенджерів та інших контактів;
  • занижена ціна;
  • оголошення, у яких нічого не продається, тощо.

Сьогодні кожне оголошення проходить через дрібне сито із більш ніж 50 автоматичних фільтрів, які намагаються знайти в оголошенні щось погане.

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

Як ми модеруємо оголошення
Повідомлення про те, що продавець має новий товар.

У результаті, кожне оголошення «обростає» метаданими, частина з яких генерується під час створення оголошення (IP-адреса автора, user-agent, платформа, геолокація тощо.), а решта — це score, видані кожним фільтром.

Черги оголошень

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

Наприклад, можна створити чергу оголошень у категорії «стільникові телефони» від користувачів Юли нібито з Санкт-Петербурга, але при цьому їх IP-адреси з Москви чи інших міст.

Як ми модеруємо оголошення
Приклад оголошень, розміщених одним користувачем у різних містах.

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

Кожна черга, згідно зі своєю формулою, надає підсумковий score оголошення. Далі можна діяти по-різному:

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

Як ми модеруємо оголошення

Навіщо потрібні ці черги? Допустимо, користувач завантажив фотографію вогнепальної зброї. Нейросеть надає їй score від 95 до 100 і з 99-відсотковою точністю визначає, що на малюнку зброя. Але якщо значення score нижче 95%, точність моделі починає знижуватися (така особливість моделей нейромереж).

В результаті формується черга на основі моделі score, і ті з оголошень, які отримали від 95 до 100, автоматично блокуються як «Заборонений товар». Оголошення з кількістю балів нижче 95 вирушають на ручну обробку модераторам.

Як ми модеруємо оголошення
Шоколадна Beretta із патронами. Тільки для ручної модерації! 🙂

Ручна модерація

На початок 2019 року близько 94% усіх оголошень у Юлі модеруються автоматично.

Як ми модеруємо оголошення

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

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

На перевірку одного оголошення модератор у середньому витрачає 10 секунд. При цьому кількість помилок не перевищує 0,5 % від усіх перевірених оголошень.

Народна модерація

Колеги з Однокласників пішли ще далі, скористалися «допомогою зали»: написали для соцмережі програму-гру, в якій можна швидко розмічати велику кількість даних, виділяючи якусь погану ознаку, — Модератор Однокласників (https://ok.ru/app/moderator). Хороший спосіб скористатися допомогою користувачів ОК, які намагаються зробити контент приємнішим.

Як ми модеруємо оголошення
Гра, де користувачі відзначають фотографії, на яких є номер телефону.

Будь-яку чергу об'яв у платформі можна перенаправити в гру Модератор Однокласників. Все, що розмічають користувачі гри, потім надходить внутрішнім модераторам на перевірку. Така схема дозволяє блокувати оголошення, за якими ще не створені фільтри, і принагідно створювати навчальні вибірки.

Зберігання результатів модерації

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

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

Як ми модеруємо оголошення

Якщо до кластеру не надходять нові оголошення, він видаляється з пам'яті, а його хеш і рішення записуються в Apache Cassandra.

Коли платформа отримує нове оголошення, спочатку намагається знайти схожий кластер серед вже створених і взяти рішення з нього. Якщо такого кластера немає, платформа йде до Cassandra та шукає там. Знайшла? Відмінно, застосовує рішення до кластера та відправляє до Юли. Таких "повторних" рішень щодня набирається в середньому 70 тисяч - 8% від загальної кількості.

Підводячи підсумок

Ми користуємося платформою модерації Однокласників два з половиною роки. Результати нам подобаються:

  • Автоматично модеруємо 94% всіх оголошень за добу.
  • Вартість модерації одного оголошення знизили з 2 рублів до 7 копійок.
  • Завдяки готовому інструменту забули проблеми управління модераторами.
  • У 2,5 рази збільшили кількість оброблених вручну оголошень за тієї ж кількості модераторів та бюджету. Ще й якість ручної модерації зросла з допомогою автоматизованого контролю, і коливається близько 0,5 % помилок.
  • Оперативно покриваємо фільтрами нові типи спаму.
  • Швидко підключаємо до модерації нові підрозділи «Юла Вертикалі». З 2017 року у Юлі з'явилися вертикалі Нерухомості, Вакансії та Авто.

Джерело: habr.com

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