История о том, как мы резко сократили ручную модерацию аватарок на BlaBlaCar.

Модерация аватарки на BlaBlaCar

В 2022 году на платформу совместного использования автомобилей BlaBlaCar было загружено более 19 миллионов фотографий профиля. Это составляет примерно 53 тысячи фотографий в день.

Эти фотографии профиля помогают укрепить доверие в нашем сообществе по совместному использованию автомобилей. Они помогают водителям узнавать, с кем они работают, и узнавать друг друга на месте встречи.

Наша команда по связям с общественностью занимается модерацией фотографий уже много лет с момента создания BlaBlaCar. Они помогают поддерживать высочайший уровень качества на платформе, гарантируя, что изображения профиля соответствуют набору правил. Из 53 000изображений, ежедневно модерируемых, примерно 25 % получают отказ.

До конца 2021 года вся модерация изображений профиля выполнялась вручную. Объем работы был значительным (примерно 12 FTE) и приводил к существенным задержкам в утверждении изображений профиля в часы пик на платформе. Например, во время забастовки во Франции в декабре 2019 года задержка приблизилась к трем дням, тогда как обычно против нескольких часов.

Проектирование автоматизированного конвейера

Команда Data Services предложила разработать автоматизированный конвейер для модерации изображений профиля. Наша цель состояла в том, чтобы автоматизировать большую часть работы по модерации изображений профиля без ущерба для наших стандартов качества.

Конвейер принимает изображение в качестве входных данных и возвращает следующее:

  • Ярлык: «отклонить», «принять» или «отправить на ручную маркировку».
  • Координаты: В случае принятого снимка делаем обрезку снимка вокруг лица.

Мы разделили задачу на подзадачи в зависимости от того, были ли они общими или специфичными для BlaBlaCar:

  1. Обнаружение лиц на изображении и их обрезка: Общий. Если нет ровно одного лица, то откажитесь от картинки. В противном случае обрежьте изображение по координатам лица. Для выполнения этой задачи мы использовали библиотеку с открытым исходным кодом под названием детекция лиц. Это позволило нам находить лица на изображениях с помощью однострочного кода Python с оценочной точностью более 99%.
  2. Предсказать, будет ли фотография принята или отклонена: Конкретно. Это требует обучения классификатора для изучения правил модерации BlaBlaCar. Мы сосредоточимся на этой задаче в следующем разделе.
  3. Обнаружение знаменитостей: общий. В некоторых странах загрузка изображения знаменитости в качестве изображения профиля является обычной практикой. В таких странах нам нужно обнаруживать фотографии знаменитостей и отказываться от них. Это сложная задача: обнаружение лиц — это одно, а распознавание лиц — совсем другое. К счастью, это не относится к нашему варианту использования. Для этой задачи мы решили использовать AWS Rekognition, платный API, благодаря которому менее 5 строк кода было достаточно, чтобы определить, принадлежит ли изображение знаменитости.

Сосредоточьтесь на задаче классификации, специфичной для BlaBlaCar.

Мы создали классификатор, цель которого состоит в том, чтобы предсказать, следует ли принимать изображение, обрезанное вокруг одного лица, или нет, учитывая правила модерации BlaBlaCar.

Создание набора данных

Мы собрали данные с помощью журналов ручной модерации изображения профиля, что дало нам доступ как к необработанному изображению (до кадрирования), загруженному пользователем, так и к связанному ярлыку («принять» или «отказаться»).

Затем, чтобы получить наш окончательный набор данных, мы применили ту же предварительную обработку, которая применялась бы в производственной среде:

  1. Обнаружение лиц на всех изображениях с помощью упомянутой выше библиотеки Python с открытым исходным кодом;
  2. Если нет ровно одного лица, то исключить из обучающего набора данных. В противном случае обрежьте изображение по координатам лица.

Обучение модели

Для обучения модели мы использовали метод под названием Transfer Learning. Согласно Википедии, эта методика состоит в запоминании знаний, полученных при решении одной задачи, и применении их к другой, но родственной проблеме.

Конкретно, мы выполнили следующие шаги:

  1. Мы взяли модель глубокого обучения с открытым исходным кодом, предварительно обученную в ImageNet, обширной базе данных изображений с открытым исходным кодом, для выполнения общих задач классификации.
  2. Мы заморозили все слои сети, кроме двух полносвязных слоев в самом конце. Они составляют то, что мы называем «уровнем специализации». При подгонке модели к нашему набору данных изображений профиля эти слои будут адаптировать общие знания, содержащиеся в предварительно обученной модели, к особенностям задачи модерации изображений профиля BlaBlaCar.

Используя этот подход, мы достигли ROC AUC выше 0,98, что в основном означает, что прогностическая способность модели была очень хорошей.

Частичная автоматизация модерации аватарки с помощью модели

Распределение ниже показывает, что модель способна очень хорошо разделять данные:

Однако посередине участка раздачи можно наблюдать участок, где количество отклоненных и принятых изображений примерно одинаково. Мы называем это «серой зоной». Это та часть, где наиболее сложно принять решение на основе прогноза модели, так как он не будет близок ни к 0%, ни к 100%. Это также та часть, где прогноз модели наименее надежен.

Чтобы поддерживать самые высокие стандарты качества на платформе, мы решили отправить изображения в серой зоне на ручную модерацию, как показано на следующем графике:

Кроме того, мы хотели постоянно следить за качеством модели. Таким образом, мы решили собрать объективные метки, отправив на ручную модерацию случайную выборку из 5% всех картинок вне зависимости от прогноза модели. Это позволило бы нам постоянно измерять производительность модели, особенно ее точность и полноту. Собранные метки (принятые или отклоненные) также помогают переобучить модель.

Используя этот подход, нам удалось автоматизировать 80% модерации изображений, увеличив ее точность до 97% (по сравнению с 93% при ручной модерации). Остальные 20% отправляются на ручную модерацию. Собранные метки также будут использоваться для переобучения модели и помогут ей лучше прогнозировать сложные случаи, которые в настоящее время близки к границе принятия решения.

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

Основные выводы

Если бы вам нужно было запомнить 3 вещи из этого чтения, вот что это могло бы быть:

  1. Чтобы создать конвейер автоматизированного машинного обучения или глубокого обучения, разделите работу между общими и нестандартными задачами. Если задача является общей, скорее всего, уже существует пакет, который делает именно то, что вы ищете. Таким образом, вы можете сосредоточить свое внимание и энергию на задачах, характерных для вашего варианта использования.
  2. Переносное обучение помогает добиться отличных результатов с минимальными усилиями и размеченными данными, используя предварительно обученные модели и адаптируя их к вашим конкретным задачам.
  3. Человеческий вклад по-прежнему ценен, поскольку он предоставляет исходный материал для обучения модели: метки. Но, автоматизируя простые решения, вы можете сосредоточить внимание человека именно там, где это имеет наибольшую ценность: на сложных случаях, ближе к границе принятия решений, и на мониторинге качества.