Как модерираме обявите

Как модерираме обявите

Всяка услуга, чийто потребители могат да създават свои собствени съдържания (UGC — съдържание, генерирано от потребители), е принудена не само да решава бизнес задачи, но и да поддържа ред в UGC. Лошата или некачествена модерация на съдържанието в крайна сметка може да намали атрактивността на услугата за потребителите, дори до спиране на нейното функциониране.

Днес ще ви разкажем за синергията между Юла и Однокласници, която ни помага да модернизираме ефективно обявите в Юла.

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

Така помислихме и ние, когато пред нас застана задачата за модерация на потребителското съдържание — изображения, текст и връзки. Нашите потребители ежедневно качват в Юла милиони единици съдържание, и без автоматична обработка, ръчното модериране на всичките тези данни е напълно нереалистично.

Затова се възползвахме от готова платформа за модерация, която по онова време нашите колеги от Однокласници бяха доработили до състояние на "почти съвършенство".

Защо Однокласници?

Ежедневно в социалната мрежа идват десетки милиони потребители, които публикуват милиарди единици съдържание: от снимки до видеа и текстове. Платформата за модерация на Однокласници помага да се проверяват много големи обеми данни и да се противодейства на спамери и ботове.

Екипът по модерация на ОК е натрупал много голям опит, тъй като усъвършенства своя инструмент вече 12 години. Важно е, че те не само могат да споделят своите готови решения, но и да настроят архитектурата на своята платформа според нашите специфични задачи.

Как модерираме обявите

За краткост, по-нататък ще наричаме платформата за модерация на ОК просто "платформа".

Как е всичко устроено

Обменът на данни между Юла и Однокласници се осъществява чрез Apache Kafka.

Защо избрахме този инструмент:

  • В Юла всички обяви преминават постмодерация, затова първоначално синхронен отговор не беше необходим.
  • Ако възникне тежка ситуация и Юла или Одноклассники станат недостъпни, в това число поради пикови натоварвания, данните от Kafka няма да изчезнат и по-късно ще могат да бъдат прочетени.
  • Платформата вече е интегрирана с Kafka, така че повечето въпроси свързани с безопасността са решени.

Как модерираме обявите

За всяко създадено или променено от потребителя обявление в Юла се генерира JSON с данни, което се поставя в Kafka за последваща модерация. От Kafka обявленията се зареждат в платформата, където решенията се вземат автоматично или ръчно. Лошите обявления се блокират с посочена причина, а тези, в които платформата не открива нарушения, се маркират като 'добрия'. След това всички решения се изпращат обратно в Юла и се прилагат в услугата.

В крайна сметка, за Юла всичко се свежда до прости действия: да изпрати обявление в платформата Одноклассники и да получи обратно резолюция 'ок' или обяснение защо не е 'ок'.

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

Какво се случва с обявлението след като попадне в платформата? Всяко обявление се разбива на няколко единици:

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

Как модерираме обявите

След това платформата провежда кластеризация по всяка единица, за да намери дубликати. Текстовете и снимките се кластеризират по различни схеми.

Текстовете преди кластеризацията се нормализират, за да се изхвърлят специални символи, изменени букви и подобен отпадък. Получените данни се разделят на N-грамми, всяка от които се хешира. В крайна сметка получаваме множество уникални хешове. Сходството между текстовете се изчислява по индекса на Жакард между двете получени множества. Ако сходството е над прага, текстовете се обединяват в един кластер. За ускоряване на търсенето на подобни клъстери се използват MinHash и Locality-sensitive hashing.

За снимките са измислени различни варианти за обединяване на изображения, от сравнение на pHash на картинките до търсене на дубликати чрез невронна мрежа.

Последният метод е най-"строгият". За обучението на модела бяха подбрани тройки изображения (N, A, P), при които N не прилича на A, а P — прилича на A (являва се полудубликат). После невронната мрежа се учи да направи A и P максимално близки, а A и N — максимално далечни. Така получаваме по-малко фалшиви срабатывания в сравнение с простото вземане на ембеддинги от предварително обучена мрежа.

Когато невронната мрежа получава изображения, тя генерира N(128)-мерен вектор за всяко от тях и прави запитване за оценка на близостта на изображението. След това се изчислява праховият елемент, при който близките изображения се считат за дубликати.

Моделът умее да открива спамери, които специално снимат един и същ продукт от различни ъгли, за да заобиколят сравнението по pHash.

Как модерираме обявитеКак модерираме обявите
Пример за спамерски снимки, свързани от невронната мрежа като дубликати.

На крайната стъпка дубликатите на обявите се търсят едновременно и по текст, и по изображение.

Ако в клъстера се свържат две или повече обяви, системата стартира автоматично блокиране, което според определени алгоритми избира кои дубликати да бъдат премахнати и кои да останат. Например, ако двама потребители имат идентични снимки в обявите си, системата ще блокира по-новата обява.

След създаването всички клъстери преминават през редица автоматични филтри. Всеки филтър задава на клъстера определен брой точки (score): с каква вероятност той съдържа заплаха, която идентифицира този филтър.

Например, системата анализира описанието в обявата и избира потенциални категории за нея. След това взема тази, при която вероятността е максимална, и сравнява с категорията, посочена от автора на обявата. Ако те не съвпадат, обявата се блокира за неправилна категория. А понеже сме добри и честни, казваме на потребителя коя категория трябва да избере, за да премине обявата модерация.

Как модерираме обявите
Уведомление за блокиране за неправилна категория.

В нашата платформа машинното обучение се чувства като у дома си. Например, с него търсим забранени в Руската федерация стоки в заглавията и описанията. А моделите на невронните мрежи внимателно "разглеждат" изображенията за наличие на URL адреси, спамерски текстове, телефони и същия онзи "забранен".

В случаите, когато се опитват да се продадат забранени стоки, маскирани като нещо законно, и при това няма текст нито в заглавието, нито в описанието, използваме тагове за изображения. За всяко изображение могат да бъдат зададени до 11 хиляди различни тагове, описващи какво се съдържа в изображението.

Как модерираме обявите
Опитват се да продадат дрога, маскирана като самовар.

Паралелно с сложните филтри работят и прости, които решават очевидни задачи, свързани с текста:

  • лоши думи;
  • детектор на URL адреси и телефонни номера;
  • споменаване на мессенджъри и други контакти;
  • ниска цена;
  • обяви, в които нищо не се продава и т.н.

Днес всяка обява преминава през фино сито от над 50 автоматични филтъра, които се опитват да открият нещо лошо в обявата.

Ако нито един от детекторите не сработи, на Юлу се изпраща отговор, че с обявата "вероятно" всичко е наред. Ние използваме този отговор, и на потребителите, които са се абонирали за продавача, идва уведомление за нов продукт.

Как модерираме обявите
Уведомление, че на продавача е добавен нов продукт.

В резултат на това всяка обява "набъбва" с метаданни, част от които се генерират при създаването на обявата (IP адрес на автора, user-agent, платформа, геолокация и т.н.), а останалото е score, издадено от всеки филтър.

Опашки на обяви

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

Например, може да се създаде опашка от обяви в категорията "Мобилни телефони" от потребители на Юлу, които уж са от Санкт Петербург, но IP адресите им са от Москва или други градове.

Как модерираме обявите
Пример на обяви, публикувани от един потребител в различни градове.

Или може да се формират опашки на базата на баловете, които невронната мрежа присвоява на обявите, класирайки ги по низходящ ред.

Всяка опашка, според своята формула, присвоява окончателен score на обявата. След това може да се действа по различен начин:

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

Как модерираме обявите

Защо са необходими тези опашки? Да кажем, че потребителят е качил снимка на огнестрелно оръжие. Невронната мрежа й присвоява оценка между 95 и 100 и с 99-процентна точност определя, че на изображението има оръжие. Но ако стойността на оценката е под 95 %, точността на модела започва да намалява (такава е особеност на моделите на невронните мрежи).

В резултат се формира опашка на базата на оценката на модела, и тези от обявите, които получават оценка между 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster