Разработчики социальной сети Pinterest
рассказали в корпоративном блоге о том, как создавалась обучающаяся система Pinnability, которая предназначена для составления новостной ленты пользователя в зависимости от релевантности контента.
В рубрике Growth Hacks — перевод заметки.
В социальной сети Pinterest на настоящий момент опубликовано более 30 миллиардов изображений. Десятки миллионов «пиннеров» (пользователей) заходят на ресурс
ежедневно и используют его в разных целях. Например, для просмотра или поиска изображений.
Основная лента состоит из «пинов» (публикаций) друзей, различных коллекций (досок), а
также индивидуальных рекомендаций. Например, раздел «Выбрано для вас» — сюда разработчики вкладывают особенно много времени и сил.
Посетители ресурса получают новый контент из основной ленты. Однако расположение «пинов» в ней не идеально и вызывает вопросы. Пользователи, как правило, подписаны сразу на большое количество источников, а это значит, что на странице может возникнуть
беспорядок. К тому же для «пиннера» релевантной является не вся информация. Чтобы исправить ситуацию с актуальностью новостей, в Pinterest придумали Pinnability.
Pinnability — это обобщенное название обучающегося алгоритма, который был разработан для того, чтобы пользователи могли находить интересный контент
в ленте.
Преимущества Pinnability
До запуска Pinnability весь контент в ленте располагался в хронологическом порядке, без учета того, что пользователю могло бы быть наиболее интересно. Иначе говоря, новые публикации были выше тех, которые появились
ранее. Такое расположение было простым и понятным, но, несмотря на это, релевантные «пины» могли потеряться.
Основная лента до применения Pinnability. Цвета отображают релевантность контента.
Использование Pinnability определяет, какие именно «пины» интересны пользователю. Таким образом контент в ленте располагается в
зависимости от его релевантности для «пиннера».
Основная лента после применения Pinnability. Контент отсортирован по релевантности для пользователя.
Обучающиеся алгоритмы в Pinnability
Для наиболее точного определения сценариев поведения пользователей мы применяли передовые технологии в области обучающихся моделей, например, логическую регрессию (LR), метод опорных векторов (SVM), дерево принятия решений (GBDT) и свёрточную нейронную сеть (CNN). Нами были протестированы тысячи различных элементов, которые
полезны для определения релевантости.
Перед тем как запустить A/B-тестирование, на основе уже имеющихся данных была тщательно изучена и
проверена работа алгоритмов в автономном режиме.
На рисунке ниже изображены все составляющие, необходимые для работы Pinnability: выбор сценария, выбор Pinnability-модели и организация основной ленты.
Принцип работы Pinnability-модели
Выбор сценария
Pinnability производит отбор данных опираясь на историю взаимодействий «пиннера» с публикациями из основной ленты. Например, после просмотра «пинов» пользователь может «лайкнуть» некоторые из них, разместить у себя на странице, прокомментировать или сделать еще
что-нибудь.
Все возможные действия разделены на «положительные» и «отрицательные», а также определены, как соответствующие сценарии. Как правило, общее количество публикаций гораздо больше тех, над которыми произведены какие-либо действия. Поэтому это было предусмотрено во время деления
на категории.
Вся работа Pinnability с большими наборами данных постоянно контролируется сотрудниками, поэтому вероятность ошибки крайне мала. Их можно разделить на три основных категории: особенности публикаций, особенности
пользователей и особенности взаимодействий.
- Особенности публикаций включают в себя такие
показатели, как качество изображения, популярность, актуальность и так далее. - Особенности пользователей раскрывают информацию, например, о том, насколько активен «пиннер» или о его половой принадлежности.
- Особенности взаимодействий рассказывают о последних действиях пользователя.
Во время проектирования системы мы столкнулись с проблемой обработки огромных наборов данных. Для решения задачи использовалась модель распределенных вычислений MapReduce. С ее помощью нам удалось создать большое количество сценариев, каждый из которых
представляет собой определенное взаимодействие пользователя с публикацией и содержит в себе три вида информации.
- Мета-данные (ID публикации, ID пользователя, источник информации и так далее) для группировки информации, проверки и анализа Pinnability-модели.
- Для определения, какие именно публикации вызвали «положительный» отклик, используются целевые значения.
- Информацию, предсказывающую взаимодействия пользователя с системой.
Выбор Pinnability-модели
Для тестирования Pinnability-моделей мы использовали площадь под ROC-кривой (AUC), индикатор линейной регрессии R-squared и среднеквадратическую ошибку. Применение площади под кривой обусловлено не только тем, что этот показатель широко используется в системах прогнозирования, но и тем, что мы наблюдали большую положительную
корреляцию между AUC, A/B-тестированием в офлайне и онлайне.
Тестирования проводились с различными обучающимися алгоритмами, включая LR, GBDT, SVM и CNN. Вдобавок к этому мы использовали показатели AUC для десятикратной перекрестной проверки и сплит-тестирование для оценки эффективности выбранной модели. В итоге мы заметили, что в
большинстве случаев лучшие результаты для Pinnability показали LR и GBDT.
Среди большого количества элементов, которые были выбраны для исследований, в качестве кандидатов для онлайн-A/B-тестирования мы оставили только те, которые существенно увеличивали показатели AUC.
Таким образом, в итоговом A/B-тестировании было проведено сравнение «пиннеров», использующих старые и новые функции. В случае положительных результатов, перед добавлением функций в Pinnability-модель, проводилась
оценка влияния нововведений на наши сервера. Также для определения производительности новых функций была оставлена небольшая группа пользователей, на которых не распространялась работа Pinnability.
На сегодняшний день для улучшения и тестирования Pinnability используются только офлайн-пакеты данных. Именно поэтому изменения в модель вносятся не сразу. С другой стороны, нам удалось выяснить, что результаты тестирования со свежими данными не сильно отличаются от результатов, полученных с данными некоторой давности, поэтому
целесообразность проведения онлайн-тестирования нужно проверить.
Мы также ищем пути научить наш алгоритм обучаться в онлайн-режиме, чтобы система проводила автоматическую калибровку после получения новых данных об
активности пользователя.
Организация основной ленты
Основная лента работает на базе внутренней новостной инфраструктуры. Например, когда пользователь совершает «репин» новой публикации, система отправляет запрос на сервера Pinnability для определения релевантности
между «пином» и остальными понравившимися «пиннеру» публикациями.
При авторизации или обновлении страницы пользователем умная система поиска новостей загружает новый контент из разных источников, учитывая при этом релевантность каждого из них, и выстраивает ленту «пиннера» согласно
актуальности той или иной записи.
Присылайте собственные кейсы, в результате которых вам удалось заметно улучшить (или, наоборот, ухудшить) показатели проекта. Интересные эксперименты обязательно попадут на страницы рубрики Growth Hacks.
About the author