«Для тега love существуют миллионы примеров»

«Для тега love существуют миллионы примеров»

ML-инженер Proxet Дмитрий Войтех — о работе с Giphy.

Компания Proxet разрабатывает решения для онлайн-базы и поисковика гифок Giphy.

Дмитрий Войтех, Machine Learning Engineer в Proxet, рассказал robot_dreams, как обучить модель понимать смысл гифок, зачем нужна собственная система определения речи и почему знаменитости влияют на точность алгоритмов.

Что делает Proxet для Giphy
 

Штаб Giphy находится в США, но с технической и продуктовой стороны мы интегрированы в основную команду. Proxet работает с Giphy не только в области Machine Learning. Есть несколько команд, у каждой — свои задачи.

  • Команда, которая работает над высоконагруженными сервисами и пайплайнами. Она отвечает за обновление контента и обработку данных для аналитики.
  • Разработчики API проекта (backend Giphy и интерфейс сайта, мессенджеров, Slack).
  • Команда, которая занимается реализацией технических задач от других команд с помощью машинного обучения и data science, а также делится идеями по улучшению работы Giphy. В этой команде работаю я.

Как подобрать релевантный контент
 

Одна из функций, над которой работает наша команда, — related gifs.

Когда вы заходите на страницу отдельной гифки, то видите под ней список связанных изображений (как в ленте похожих видео на YouTube). Это основная фича Giphy (наряду с поиском), которая повышает трафик и привлекает пользователей.

В качестве архитектуры модели мы выбрали подход word2vec. Для обучения модели использовали агрегированные данные взаимодействий юзеров с контентом Giphy — клики или выбор гифок. 

Датасет формировался из последовательности поисковых запросов, гифок, а также их тегов. Данные в нем анонимизированы. 

В результате обучения мы получили компактные репрезентации для всех сущностей Giphy (запросов, тегов, гифок). Мы используем их для поиска ближайших соседей и создания рекомендаций. На следующем этапе список рекомендаций ранжируется с помощью LTR-модели, которая использует широкий спектр признаков, полученных как из метаданных гифки, так и из ее визуальной части. Более подробно о создании технологии мы рассказываем в блоге Giphy.

Алгоритм работает гораздо лучше, чем классические текстовые подходы. Показатели кликабельности (CTR) относительно предыдущей модели выросли на 30%.

Большой объем данных, которые логируются от взаимодействия пользователей, позволяет обучить модель не только находить на изображениях объекты. Но и семантику и понимание смысла контента. Если у вас на гифке ирония или сарказм, в related gifs будут подобные эмоции. Поэтому функция related gifs настолько популярна среди пользователей. 

О системе определения языка
 

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

Нынешние системы распознавания речи могут классифицировать небольшое количество языков. При этом системы заточены под формальный язык — датасеты созданы из слов, используемых в публикациях и видео. А лексика пользователей Giphy насыщена сленговыми словами, которые трудно найти в открытых датасетах. Поэтому нам не подошли ни opensource-решения, ни SaaS-системы облачных провайдеров.

Нам понадобилась собственная система распознавания речи, чтобы определять язык поискового запроса и адаптировать релевантную выдачу.

Мы собирали датасет на базе нашей платформы и данные на основе субтитров к фильмам с современным языком. Сейчас мы работаем с 25 языками.

Система автотегинга и проблемы обучения
 

Теги влияют на место гифки в нашем поисковом пространстве. Они могут быть добавлены вручную пользователем или распознаны автоматически (например, с помощью Google Cloud Vision). 

Ручные теги — часто конкретные термины. Но иногда пользователи неверно используют тег. Это снижает популярность гифки в выдаче.

Google Cloud Vision теги — небольшой набор (около 50) общих сущностей, например, «природа», «животное», «авто». На выдачу такой тег влияет гораздо меньше, чем точный тег, заданный пользователем. Кроме этого, модель была обучена на открытых датасетах изображений (например, Imagenet), а потому точность предсказаний на анимированном и часто специфическом контенте Giphy может быть низкой.

Поэтому мы решили разработать кастомную computer vision модель, генерирующую для гифки набор тегов, свойственных Giphy, используя только внутренние данные.

В датасете Giphy — диспропорция по тегам. Для самого популярного тега love существуют миллионы примеров, а для специфических тегов, например, handball, — контента в разы меньше. 

Для обучения мы выбрали 2-3 тыс. популярных тегов. Большее количество ухудшает модель. Кроме того, многие теги близки по смыслу, что тоже мешает модели. Кластерный анализ и система распознавания речи, которая выбрала только английские теги, помогли нам оставить относительно уникальные строки.

Обучая модель, мы заметили, что ее точность для тегов, связанных с людьми, значительно ниже, чем для других классов. В размеченном датасете мы нашли ошибки: на гифки с селебрити пользователи добавляли теги не только с их именами, но и с именами связанных с ними знаменитостей. Например, представим гифку с Анджелиной Джоли на кинофестивале, где также был Брэд Питт. Хотя его нет на гифке, пользователь упомянул его в тегах.

Чтобы избежать таких ошибок, мы определили имена людей в лейблах с помощью Google Knowledge Graph и объединили их в тег celebrity. Модель для распознавания знаменитостей мы разработали несколько лет назад.

Для равномерного обучения мы использовали down- и upsampling. Для слишком популярных классов случайным образом удаляли часть контента (downsampling). 

Для генерации новых данных применяли upsampling — меняли цвет или контрастность на гифке, обрезали часть изображения. Это помогло нейросети генерализировать больше данных для классов, которым не хватало информации.

Как ищут гифки
 

На сайте есть система автотегинга: для гифки подбирается список самых релевантных тегов. Они улучшают шансы выйти в топ выдачи. Также теги — основной инструмент поиска. 

В дополнение к auto tagging модели мы решили использовать word2vec-модель для предсказания синонимических тегов. Когда пользователь принимает один из предложенных тегов, список рекомендаций дополняется его синонимами. Это позволяет разнообразить генерируемые теги и следующую версию тренировочной выборки. 

После этого возросло количество файлов с тегами и в систему практически не поступают гифки без подписи. 

В поисковом движке Elasticsearch, который мы используем, есть много поисковых признаков на основе тегов. В них отмечаются теги, в том числе от Google Cloud Vision и пользовательские. Если пользовательских тегов нет, система автоматически добавит их в отдельное поле на основании прогноза нейросети. Их вес будет меньшим, чем оригинальные подписи, что также может влиять на выдачу.

Запросы: популярные, не очень и long tail
 

Поиск гифок на нашей платформе подчиняется правилу Парето: 20% запросов получают 80% внимания пользователей. Остальные 80% менее популярных специфических запросов называются long tail. 

Если пользователь ищет очень популярный контент, Giphy применяет механизм ранжирования. Например, если у новых гифок возрастает кликабельность (CTR), с большой вероятностью они будут в топе выдачи.

У запросов из «хвоста» есть свои механизмы поиска. Например, query expansion — расширение запросов. Если запросить «красная машина Феррари», на платформе будет мало информации. Мы используем модель, которая прогнозирует теги для поискового запроса. Чтобы обогатить выдачу, система расширяет поиск более популярными запросами. В этом случае, например, «машины», «транспорт».

Query expansion — базовый метод. Но у Giphy есть и команда редакторов, которая следит за популярностью, а также content safety запросов и выдачи. Если ранее малопопулярная категория начинает набирать больше просмотров, редактор проверяет выдачу и добавляет релевантный контент к запросу.

Отдельный интерфейс для платформ
 

Интерфейс интеграций в Instagram, Slack или Telegram зависит от соцсети. Список результатов отображается на сетках разных размеров и форматов. Например, на сайте Giphy большие и маленькие гифки распределены несимметрично, а в Instagram они равных размеров. 

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

В Giphy поисковик построен на базе Elasticsearch. Ранжирование основывается на множестве признаков (результаты предсказаний моделей, метаданные контента, трендовость). Мы также учитываем разный стиль поведения пользователей на платформах и модерируем выдачу согласно требованиям соцсети.

О других проектах компании
 

В Proxet много ML-проектов — от стартапов до больших продуктов. Среди интересных направлений — создание автопилота для наземных и водных видов транспорта, AI-based помощник рекрутера и генерация видео с использованием face swap подходов.

Ещё статьи
Инструкция от Product Analyst Lead в SQUAD.
История, архитектура и основы обучения.