Как мы запустили автоматическую модерацию видео в объявлениях Авито
Привет! Я Владимир Морозов, senior DS engineer в команде модерации Авито: в основном занимаюсь автомодерацией видео, но развиваю и другие проекты.
В статье рассказываю, с какими трудностями мы столкнулись при модерации видео в условиях небольшого количества данных, и как их решили. Думаю, материал будет полезен всем, кто занимается похожими задачами в крупных продуктовых компаниях.
Что внутри статьи:
Зачем Авито следить за видео и какие воообще есть подходы к модерации
Какой была наша первая система модерации видео и с какими проблемами мы столкнулись
Как мы собрали данные для автоматической модерации
Какие технологии используются в модерации сейчас — разбираю по доменам данных
Как мы анализируем работы модели автомодерации
Зачем Авито следить за видео и какие вообще есть подходы к модерации
Модерация в Авито — это выявление проблем в объявлениях, которые люди публикуют на площадке. Размещения проверяют на соответствие правилам сервиса и могут отклонить их, если что-то не так.
Сейчас в объявления можно добавлять видео — это помогает покупателям быстрее выбирать товары, а продавцам — подтолкнуть заинтересованных людей к сделке. Но видео тоже нужно модерировать, ведь там могут быть нарушения.
Подходы к модерации бывают разные, и их выбор зависит от задачи. Например:
Премодерация или постмодерация. Если риски нарушений большие, а модерация проходит быстро — лучше проверять объявления перед публикацией. А если рисков мало, то можно делать использовать постмодерацию.
Ручная или автоматическая модерация. Ручную модерацию проще запустить: достаточно привлечь людей, чтобы они начали искать нарушения. Но тут есть сложности: например, нужно следить, чтобы они работали добросовестно.
У автоматической модерации тоже есть свои минусы — о них подробнее расскажу ниже — и её сложнее запустить. Но в сравнении с ручным подходом у неё много преимуществ, которые помогают быстро масштабироваться: такая модерация дешевле, быстрее и даёт более предсказуемый результат.
Какой была наша первая система модерации видео и с какими проблемами мы столкнулись
Видео — новый домен, с которым в Авито раньше не работали. К тому же быстро построить автоматическую модерацию проблематично. Поэтому на первом этапе мы сделали такую систему:
Суть подхода: если в самом объявлении нет нарушений, мы публикуем его, но сначала без видео. Затем ролик проходит премодерацию и ручную модерацию. Если всё в порядке — он появляется в объявлении. Мы сделали так для того, чтобы не увеличивать время модерации из-за возможности добавить видео.
Теперь поговорим о нарушениях, которые мы ищем во время модерации. В задаче можно выделить две составляющие:
причина нарушения — например, люди на видео просят людей переходить на другой сайт;
домен нарушения — в кадрах видео, его качестве, в аудио или в связи публикации и ролика. Например, если в объявлении о продаже квартиры добавляют видео с котиками.
Так как все видео раньше проходили только через ручную модерацию, то проявились все недостатки такой системы. А именно:
Затраты на ручную модерацию. Чем сложнее объект, тем дороже модерация, и видео требует больше затрат, чем изображения.
Сложно управлять потоком модерации. Если количество контента вырастет, придётся нанимать новых сотрудников. А если его станет меньше, освободившихся людей нужно будет чем-то занять.
Человеческий фактор. Ручную модерацию нужно очень качественно проверять, но это не всегда получается — иногда бывают конфликты.
Время проверки. Ручная модерация в разы медленней автоматической.
Поэтому мы решили начать постепенный переход на автоматическую модерацию.
Как мы собрали данные для автоматической модерации
Когда к нам в отдел пришли за созданием автоматической модерации видео, мы думали, что у нас будет много данных хорошего качества и с явной разметкой, — так что мы сможем легко обучить модели. Реальность оказалась сложнее и вот почему:
Данных было мало. На тот момент возможность добавить видео внедрили совсем недавно, ей мало пользовались, нарушений в большинстве роликов не было. Поэтому поиск данных для обучения моделей оказался непростой задачей.
Разметка была шумной, потому что в первую очередь предназначалась для оценки работы ручной модерации. Например, не было разметки на домены или подробной разметки на причины нарушений.
По правилам хранения, видео с нарушениями удалялись спустя несколько дней после замены на исправленные версии, поэтому важные данные не накапливались в значительном объеме.
Поэтому для большого количества задач нам пришлось использовать открытые датасеты, парсить YouTube и разные видео-стоки.
Встречались забавные датасеты — например, датасет на насилие, где пара людей в комнате разыгрывали разные сцены. Но по реакции было непонятно, насилие это или нет: один изображал, что бьёт второго палкой, а при этом оба смеялись.
Какие технологии используются в модерации сейчас — разбираю по доменам данных
В итоге мы собрали видео и разбили их на домены, о которых я писал выше: видеоряд, аудио, метаданные и информация из объявления. Расскажу про каждый.
Модерация видеоряда. Вот как работает наша модель:
Выбираем фреймы из видео. Эту задачу можно решать по-разному: например, брать случайно, брать каждый N-й, ключевые фреймы или проводить кластеризацию. Главное учитывать, что некоторые методы можно легко взломать (привет, 25 кадр).
Преобразуем фреймы для классификации. В качестве энкодера можно использовать CNN/CLIP/BLIP. Третий по нашим бенчмаркам показывает лучшее качество, но можно начать и с CLIP, что мы и сделали.
Агрегируем фреймы в один эмбеддинг с помощью Joint Net. В качестве бейзлайна всегда можно взять усреднение или максимум, а потом постепенно перейти к нейронкам. Для коротких видео это весьма качественный бейзлайн, который даёт хорошие метрики.
Обучаем классификационные головы под каждую из причин. Получается, что у нас много голов под разные задачи, их легко добавлять и трекать качество, а самая тяжёлая часть — получение эмбеддинга видео — считается всего один раз. Всё прекрасно.
Тут мы не используем никакие дополнительные фичи, например аудио, потому что на старте проекта это значительно усложняет разработку.
Но иногда бывает, что данных нет вообще — как и времени их собирать. Например, хочется быстро покрыть какую-то не очень важную причину. Скажем, отклонять видео, если на них появляется кальян.
Тогда можно использовать, например, Zero Shot-подход для CLIP, так как он обучался на сопоставление текста и изображений. Мы кодируем промпты для поиска и фреймы, а затем вероятность класса вычисляется как максимальный скор между промптом и перебором всех фреймов:
Но на самом деле, связь между фреймами не всегда важна, в основном это action recognition или какие-то сложные уловки нарушителей. Так что если у вас в компании есть картиночные классификаторы для нахождения нарушений, то можно попробовать и их.
Также большой пласт нарушений кроется в логотипах — например, недобросовестные пользователи могут уводить на видео людей к конкурентам. Такие проблемы мы тоже научились находить, используя детектор и потом векторный поиск по базе логотипов:
С выявлением лиц немного сложнее — их тоже важно находить, потому что недобросовестные пользователи могут, например, нарушать авторские права и брать чужие фото. Тут мы прогоняем кадры через какой-то легковесный классификатор, который точно говорит, есть ли на фрейме изображение. Оставляем только фреймы, где точно есть нарушение, и сравниваем картинки с лицами, которые есть у нас в базе:
Модерация текстов в видео. Большой пласт нарушений кроется в текстах на видео — например, там могут быть оскорбления или попытка увести на сайты конкурентов.
Здесь на помощь приходит OCR, который может дать нам весь текст из видео, а дальше нужно найти в этом тексте нарушения. В качестве бейзлайна, — особенно когда у вас нет данных, но вы знаете, что хотите находить, — можно использовать регулярочные модели:
Модерация аудио. Здесь работа похожа на ту, что происходит с OCR, только мы используем транскрибатор для аудио. В качестве бейзлайна мы взяли Whisper — он мультиязычный и весьма хорошо работает, — и дообучили на данных Авито. Далее схема такая: аудио поступает на вход, мы транскрибируем его через Whisper и прогоняем через всевозможные текстовые классификаторы для поиска нарушений:
Ещё часть нарушений в аудио можно найти не в речи, а по звукам — например, громкие посторонние шумы. Для покрытия таких кейсов мы используем аудио-классификатор Audio Spectrogram Transformer, который прекрасно находит разные нарушения в звуках.
Модерация качества видео. Чтобы исключить ролики совсем плохого качества, можно проанализировать метаданные видео: смотреть на битрейт или FPS (frames per second). Битрейт показывает, сколько битов меняется при изменении нового фрейма, а FPS — сколько фреймов меняется за секунду. На метаданных можно обучить какой-то базовый классификатор, чтобы он предсказывал качество видео.
Проверка: подходит ли видео для объявления. Здесь мы тоже решили не изобретать велосипед и переиспользуем CLIP: получаем эмбеддинги для всех фреймов, то же самое делаем для картинок и текста в объявлении. Потом все эти эмбеддинги аггрегируем и прогоняем через классификационную голову, которая подсказывает, есть нарушение данного типа или нет:
Что в итоге: общая схема автомодерации. Это не одна большая модель, а скорее множество моделей разной сложности — они взаимодействуют и вместе говорят, есть нарушение в видео или нет.
Сейчас большинство роликов проходят автомодерацию и публикуются на сайте гораздо быстрее, чем раньше, когда всё работало в ручном режиме. Сейчас ручную проверку проходят только те видео, где автоматическая модерация обнаружила нарушения, а это небольшой процент роликов.
Как мы анализируем работу модели автомодерации
Обычно смотрят на два типа метрик:
Бизнес-метрики. Например, уровень автоматизации или доля ошибок.
ML-метрики: Recall, Precision в целом и в разных разрезах — по доменам, по моделькам.
Чтобы оценить ML-метрики, мы ввели два основных изменения: поменяли инструкцию по разметке видео и добавили небольшой сэмплер, который кидает часть видео, где мы не нашли нарушения, на ручную модерацию.
Если автомодерация нашла нарушение, мы можем найти True positive и False positive. Если автомодерация ничего не нашла, основная часть видео публикуется на сайт, и какой-то сэмпл отправляется на ручную модерацию, из которого мы достаем False negative и True Negative для оценки ML-метрик.
Вместо выводов
В итоге благодаря грамотной декомпозиции задач и использованию уже существующих решений нам удалось покрыть все ключевые причины нарушений в видео без необходимости «изобретать велосипед». Это помогло оптимизировать процессы модерации видео — повысить их эффективность и снизить затраты.
Помимо модерации сложных доменов вроде видео, у нас в команде есть и другие амбициозные проекты. Например, автоматическое исправление нарушений за пользователя, применение методов few-shot для текстов и изображений, блокировка дублей и всё это — в высоконагруженной системе с большим влиянием на всю компанию.
Спасибо за уделенное статье время! На любые вопросы о нашем опыте в модерации видео я с радостью отвечу в комментариях или же пишите мне, контакты для связи:
Telegram: @vladitm
LinkedIn: Vladimir Morozov
А если вам интересны подобные задачи, приглашаем вас присоединиться к нашей команде — скучно точно не будет! О том как это сделать — по ссылке.