Кейс Авито: как ML модернирует видео, чтобы не пропустить мошенников и 18+
Кейс Авито: как ML модернирует видео, чтобы не пропустить мошенников и 18+
Нашему выпускнику
на собеседовании с командой предложили интересный кейс. Что общего у объявления о диване и схемы злоумышленников? Ответ: видео.
Каждый день на Авито загружают тысячи роликов. Раньше их проверяли руками, но с ростом платформы - это стало нереально: 100 000 видео в сутки, 2 минуты на каждое = 3 000+ человеко-часов ежедневно.
Задача:
автоматизировать модерацию, не потеряв в качестве и не разорив бизнес.
Бизнес-метрики
В приоритете OPEX (расходы), CAC (привлечение клиентов) и качество сервиса.
Но этого мало, нужны конкретные показатели работы модели:
• Автобан = отменённые апелляции после автобана / все апелляции после автобана. Показывает, насколько модель права, когда банит сама.
• Ручная модерация = подтверждённые нарушения / весь контент на ручной проверке. Показывает эффективность работы модераторов.
• Пропуск = хорошие видео в случайном сэмпле / размер сэмпла. Показывает сколько нарушений модель пропустила (главная метрика безопасности).
• Модерация = контент, не отправленный на ручную проверку / весь контент. Балансирует, чтобы не перегружать людей и не пропускать опасное.
Постановка ML-задачи
Нам нужно бинарно классифицировать видео: 0 - ок, 1 - нарушение.
Но на деле задача распадается на две независимые:
1. Распознавание текст
а
(личные данные, ссылки, нецензурная лексика)
2. Распознавание объектов (оружие, наркотики, 18+ и т.д.)
Распознавание текста: OCR + NLP
Видео разбивается на кадры. Каждый кадр проходит через OCR - детектируем и распознаём текст.
Затем:
- удаляем дубликаты (чтобы не учитывать одно и то же на разных кадрах),
- парсим признаки:
has_phone
,
has_passport
,
has_url
,
has_mats
и др.,
- отправляем текст в NLP-классификатор - получаем вероятности
prob_spam
,
prob_fraud
и т.п.
На выходе вектор признаков для каждого видео.
Дальше либо решаем по порогу, либо подаём в обученную модель.
Схема:
Видео → кадры → OCR → NLP → вектор → результат
Распознавание объектов: CLIP + промпты
Здесь сложнее, но красивее.
- Создаём список текстовых промптов: "пистолет", "нож", "наркотики" и т.д.
- Прогоняем кадры через кодер CLIP → получаем визуальные эмбеддинги.
- Прогоняем каждый промпт через текстовый кодер CLIP → текстовые эмбеддинги.
- Считаем косинусное расстояние между визуальным и текстовыми векторами.
Важно: классы не взаимоисключающие, в видео может быть и пистолет, и нож одновременно. Поэтому вместо Softmax применяем пороговое сравнение (или сигмоиду) для каждого промпта отдельно.
Схема:
Видео → кадры → CLIP (эмбеддинги) → вычисление схожести → пороги / модель → результат
(Аудио пока оставим за скобками — отдельная большая тема.)
Офлайн-метрики
• Precision: качество автобана (меньше ложных срабатываний)
• Recall: сколько нарушений нашли (меньше пропусков)
• F1: гармоническое среднее
• PR-AUC: особенно полезна при сильном дисбалансе классов (нарушений мало)
Данные
• X - признаки из кадров (текстовые и визуальные).
• Y - бинарная метка (1 - нарушение).
Обучаемся на исторических данных ручной модерации.
Чтобы снизить нагрузку, кадры сэмплируем (не все подряд).
При дисбалансе классов используем Focal Loss, он фокусируется на сложных примерах.
Эксплуатация модели
Мониторинг трёх уровней:
- Системный: CPU / RAM / GPU, задержки.
- Качество модели: Data Drift, падение метрик.
- Бизнес-метрики: если резко упали, ищем проблему в данных или инфраструктуре.
Стратегия при Data Drift:
- небольшой → корректируем пороги
- средний → дообучаем модель на новых данных
- сильный → пересобираем пайплайн с нуля
Деплой и версионирование
Используем Canary Deployment:
- новая модель получает 5% трафика,
- старая 95%,
- если метрики стабильны, постепенно увеличиваем долю до 100%,
- при ухудшении откатываемся.
Перед релизом обязательные Unit-, Integration- и Validation-тесты.
Обсудить задачу/спросить совета можно в
нашем чате
.
Подписаться:
@zadachi_ds
Откликнуться в Telegram →
⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.