
Все услуги, пользователи которых могут создавать собственный контент (UGC — контент, созданный пользователями), должны не только решать бизнес-задачи, но и приводить в порядок UGC. Плохая или некачественная модерация контента может снизить привлекательность услуги для пользователей, вплоть до прекращения ее работы.
Сегодня мы расскажем о синергии между Юлой и Одноклассниками, которая помогает нам эффективно модерировать объявления в Юле.
Синергия — это на самом деле очень полезная вещь, а в современном мире, где технологии и тенденции меняются очень быстро, она может стать настоящей палочкой-выручалочкой. Зачем тратить ограниченные ресурсы и время на изобретение того, что уже было изобретено и отшлифовано?
Так же подумали и мы, когда столкнулись с задачей модерации пользовательского контента — изображений, текста и ссылок. Наши пользователи ежедневно загружают в Юлу миллионы единиц контента, и без автоматической обработки вручную промодерировать все эти данные было бы совершенно невозможно.
Поэтому мы воспользовались уже готовой платформой модерации, которую наши коллеги из Одноклассников довели до состояния «почти совершенство».
Почему Одноклассники?
Ежедневно в социальную сеть приходит десятки миллионов пользователей, которые публикуют миллиардные объемы контента: от фотографий до видео и текстов. Платформа модерации Одноклассников помогает проверять огромные объемы данных и противодействовать спамерам и ботам.
Команда модерации ОК накопила большой опыт, совершенствуя свой инструмент в течение 12 лет. Важно, что они смогли не только поделиться своими готовыми решениями, но и адаптировать архитектуру своей платформы под наши специфические задачи.

Для краткости будем называть платформу модерации ОК просто «платформа».
Как е устроено всичко
Обмен данными между Юлой и Одноклассниками организован через .
Почему мы выбрали этот инструмент:
- В Юле все объявления проходят постмодерацию, поэтому изначально синхронный ответ не был необходим.
- Если произойдет сбой, и Юла или Одноклассники окажутся недоступными, в том числе из-за пиковых нагрузок, данные из Kafka не пропадут и позже их можно будет прочитать.
- Платформата вече беше интегрирана с Kafka, така че повечето въпроси за сигурността бяха решени.

За всяко създадено или променено от потребителя обявление в Юла се генерира JSON с данни, който се поставя в Kafka за последваща модерация. От Kafka обявленията се зареждат в платформата, където решенията за тях се взимат автоматично или ръчно. Лошите обявления се блокират с посочване на причина, а тези, в които платформата не е намерила нарушения, се маркират като "добри". След това всички решения се изпращат обратно в Юла и се прилагат в услугата.
В крайна сметка, за Юла всичко се свежда до прости действия: да изпрати обявление в платформата на Однокласници и да получи обратно резолюция „ок“, или защо не е „ок“.
Автоматична обработка
Какво се случва с обявлението след като попадне в платформата? Всяко обявление се разделя на няколко сущности:
- заглавие,
- описание,
- снимки,
- избраната от потребителя категория и подкатегория на обявлението,
- цена.

След това платформата провежда кластеризация по всяка сущност, за да намери дубликати. Текстовете и снимките се кластеризират по различни схеми.
Текстовете преди кластеризация се нормализират, за да се отстранят специални символи, изменени букви и друг боклук. Получените данни се разделят на N-грамове, от които всеки се хешира. В крайна сметка се получава множество уникални хешове. Сходството между текстовете се определя по между двете получени множества. Ако сходството е по-голямо от прага, текстовете се съединяват в един кластер. За ускоряване на търсенето на подобни клъстери се използват MinHash и хеширане, чувствително към локалността.
За снимките са предложени различни варианти за съединяване на изображения, от сравнение на pHash изображения до търсене на дубликати с помощта на невронна мрежа.
Последният метод е най-„строг“. За обучението на модела се подбираха тройки изображения (N, A, P), където N не е подобен на A, а P — подобен на A (являва се полудубликат). След това невронната мрежа се учи да прави така, че A и P да са максимално близки, а A и N — максимално далечни. Така се получават по-малко фалшиви срабатывания в сравнение с просто взимане на вградени от предварително обучена мрежа.
Когато невронната мрежа получава изображения, тя генерира N(128)-мерен вектор за всяко от тях и прави запитване за оценка на близостта на изображението. След това се изчислява праг, при който близките изображения се считат за дубликати.
Моделът умело открива спамери, които умишлено фотографират един и същ продукт от различни ъгли, за да заобиколят сравнението по pHash.


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

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

Калян се опитват да продадат, прикривайки го под самовар.
Паралелно с комплексните филтри работят и простите, решаващи очевидни задачи, свързани с текста:
- антимат;
- детектор на URL адреси и телефонни номера;
- споменаване на мессенджъри и други контакти;
- намалена цена;
- обяви, в които нищо не се продава и т.н.
Днес всяка обява преминава през фино сито от над 50 автоматични филтри, които се опитват да намерят нещо лошо в обявата.
Ако нито един от детекторите не сработи, на Юлу се изпраща отговор, че с обявата „най-вероятно“ всичко е наред. Ние прилагаме този отговор у нас и на потребителите, които са се абонирали за продавача, изпращаме уведомление за нов продукт.

Уведомление, че продавачът е добавил нов продукт.
В резултат на това всяка обява „обрасте“ с метаданни, част от които се генерират при създаването на обявата (IP адрес на автора, user-agent, платформа, геолокация и т.н.), а останалото са резултатите, издадени от всеки филтър.
Опашки от обяви
Когато обявата попада в платформата, системата я поставя в една от опашките. Всяка опашка се формира с помощта на математическа формула, която комбинира метаданните на обявата, за да открие някакъв лош модел.
Например, може да се създаде опашка от обяви в категория „Мобилни телефони“ от потребители на Юла, които уж са от Санкт Петербург, но в същото време техните IP адреси са от Москва или други градове.

Пример за обяви, публикувани от един потребител в различни градове.
Или може да се формират опашки на базата на баловете, които невронната мрежа присъжда на обявите, подреждайки ги по намаляване.
Всяка опашка, според своята формула, присъжда заключителен резултат на обявата. След това може да се действа по различни начини:
- да се зададе прагова стойност, при която обявата ще получи определен тип блокировка;
- всички обяви в опашката да бъдат изпратени на модераторите за ръчна проверка;
- или да се комбинират предишните варианти: да се зададе праг на автоматична блокировка и да се изпратят на модераторите тези обяви, които не са достигнали този праг.

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

Шоколадова Beretta с патрони. Само за ръчна модерация! 🙂
Ръчна модерация
В началото на 2019 година около 94 % от всички обяви в Юла се модерират автоматично.

Ако платформата не може да определи някои обяви, те се изпращат за ръчна модерация. Одноклассники разработиха собствен инструмент: в задачите за модераторите веднага се показва всяка необходима информация за вземане на бързо решение — обявата е допустима или трябва да бъде блокирана с указание за причина.
За да не пострада качеството на услугата при ръчната модерация, работата на хората постоянно се контролира. Например, в потока от задачи на модератора се показват „капани“ — обяви, за които вече има готови решения. Ако решението на модератора не съвпада с готовото, на модератора се зачита грешка.
За проверка на една обява модераторът средно отделя 10 секунди. При това броят на грешките не надвишава 0.5 % от всички проверени обяви.
Народна модерация
Колегите от Одноклассники отидоха още по-далеч, използвайки „помощта на залата“: написаха за социалната мрежа приложение-игра, в което може бързо да се маркират голямо количество данни, подчертавайки някакъв лош признак — Модератор Одноклассников (). Добър начин да се възползвате от помощта на потребителите на ОК, които се стараят да направят съдържанието по-приятно.

Игра, в която потребителите маркират снимки, на които има телефонен номер.
Всички обяви на платформата могат да бъдат пренасочени към играта Модератор на Одноклассники. Всичко, което потребителите на играта маркират, след това попада при вътрешните модератори за проверка. Тази схема позволява блокиране на обяви, за които все още не са създадени филтри, и в същото време създаване на обучителни извадки.
Съхранение на резултатите от модерацията
Запазваме всички решения, взети по време на модерацията, за да не обработваме повторно обявите, за които вече е било взето решение.
Ежедневно за обявите се създават милиони клъстери. С времето всеки клъстер получава етикет „добър“ или „лош“. Всяка нова обява или нейна редакция, попадаща в клъстера с етикет, автоматично получава резолюция от самия клъстер. Такива автоматични резолюции на ден се натрупват около 20 хиляди.

Ако в клъстера не постъпват нови обяви, той се изтрива от паметта, а неговият хаш и решение се записват в Apache Cassandra.
Когато платформата получи нова обява, първо се опитва да намери подобен клъстер сред вече създадените и да вземе решение от него. Ако такъв клъстер няма, платформата отива в Cassandra и търси там. Намерено? Супер, прилага решението на клъстера и го изпраща в Юла. Такива „повторни“ решения ежедневно натрупват средно 70 хиляди — 8% от общия брой.
В обобщение
Ползваме платформата за модерация на Одноклассники вече две и половина години. Резултатите ни удовлетворяват:
- Автоматично модернизираме 94% от всички обяви дневно.
- Разходите за модериране на една обява намалиха от 2 рубли до 7 копейки.
- Благодарение на готовия инструмент забравихме за проблемите с управлението на модераторите.
- Увеличихме броя на обработените ръчно обяви 2,5 пъти при същия брой модератори и бюджет. Освен това качеството на ръчната модерация се повиши благодарение на автоматизирания контрол и варира около 0,5% грешки.
- Бързо покриваме нови типове спам с филтри.
- Бързо свързваме нови подразделения с модерацията . От 2017 година в Юла се появиха вертикали Н недвижими имоти, Вакансии и Авто.
Източник: habr.com
