- PVSM.RU - https://www.pvsm.ru -

Краткая история одной «умной ленты»

Краткая история одной «умной ленты» - 1

Социальные сети — это один из наиболее востребованных на сегодняшний день интернет-продуктов и один из основных источников данных для анализа. Внутри же самих социальных сетей самой сложной и интересной задачей в сфере data science по праву считается формирование ленты новостей. Ведь для удовлетворения всё возрастающих требований пользователя к качеству и релевантности контента необходимо научиться собирать информацию из многих источников, вычислять прогноз реакции пользователя и балансировать между десятками конкурирующих метрик в А/Б-тесте. А большие объемы данных, высокие нагрузки и жесткие требования к скорости ответа делают задачу ещё интереснее.

Казалось бы, задачи ранжирования на сегодня уже изучены вдоль и поперёк, но если присмотреться, то не всё так просто. Контент в ленте очень разнороден — это и фото друзей, и мемасики, вирусные ролики, лонгриды и научпоп. Для того, чтобы собрать всё воедино, необходимы знания из разных областей: компьютерное зрение, работа с текстами, рекомендательные системы, и, в обязательном порядке, современные высоконагруженные хранилища и средства обработки данных. Найти одного человека, обладающего всеми навыками, сегодня чрезвычайно сложно, поэтому сортировка ленты — это по-настоящему командная задача.

С разными алгоритмами ранжирования ленты в Одноклассниках [1] начали экспериментировать еще в 2012-м году, а в 2014-м к этому процессу подключилось и машинное обучение. Это стало возможным, в первую очередь, благодаря прогрессу в области технологий работы с потоками данных. Только начав собирать показы объектов и их признаки в Kafka [2] и агрегируя логи с помощью Samza [3], мы смогли построить датасет для обучения моделей и рассчитать самые «тянущие» [4] фичи: Click Through Rate объекта и прогнозы рекомендательной системы «по мотивам» работы коллег из LinkedIn [5].

Краткая история одной «умной ленты» - 2

Очень быстро пришло понимание того, что рабочая лошадка логистической регрессии не может вывезти ленту в одиночестве, ведь у пользователя может быть очень разнообразная реакция: класс, комментарий, клик, сокрытие и т.д., а контент при этом может быть очень разный — фото друга, пост группы или заклашенный другом видосик. У каждой реакции для каждого типа контента своя специфика и своя бизнес-ценность. В итоге мы пришли к концепции «матрицы логистических регрессий [6]»: для каждого типа контента и каждой реакции строится отдельная модель, а затем их прогнозы умножаются на матрицу весов, формируемую руками исходя из текущих бизнес-приоритетов.

Краткая история одной «умной ленты» - 3

Эта модель оказалась на редкость жизнеспособной и достаточно долго была основной. Со временем она обрастала всё более интересными признаками: для объектов, для пользователей, для авторов, для отношения пользователя с автором, для тех, кто взаимодействовал с объектом, и т.д. В результате первые попытки заменить регрессию нейросетью закончились грустным «фичи у нас слишком закрафченые, сетка буста не дает».

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

Краткая история одной «умной ленты» - 4

Отдельную сложность при экспериментах с обновлением модели создавал ребаланс контента — распределения прогнозов «новой» модели часто могли значимо отличаться от предшественника, что приводило к перераспределению трафика и обратной связи. В итоге, сложно оценить качество новой модели, так как сначала нужно откалибровать баланс контента (повторить процесс настройки весов матрицы по бизнес-целям). Изучив опыт коллег из Facebook [7], мы поняли, что модель нуждается в калибровке [8], и сверху логистической регрессии пристроилась регрессия изотоническая :).

Часто в процессе подготовки новых контентных признаков мы испытывали фрустрацию — простая модель, использующая базовые коллаборативные техники, может дать 80 %, или даже 90 % результата, тогда как модная нейросетка, обучавшаяся неделю на супердорогих GPU, идеально детектит котиков и машинки, но даёт прирост метрик только в третьем знаке. Подобный эффект часто можно увидеть и при внедрении тематических моделей, fastText и других эмбедингов. Побороть фрустрацию удалось, взглянув на валидацию под правильным углом: производительность коллаборативных алгоритмов существенно улучшается по мере накопления информации об объекте, тогда как для «свежих» объектов контентные признаки дают ощутимый буст.

Но, конечно, когда-нибудь результаты логистической регрессии должны были быть улучшены, и добиться прогресса удалось, применив недавно вышедший XGBoost-Spark [9]. Интеграция была непростой [10], но, в итоге, модель наконец-то стала модной-молодёжной, а метрики приросли на проценты.

Краткая история одной «умной ленты» - 5

Наверняка из данных можно извлечь гораздо больше знаний и вывести ранжирование ленты на новую высоту — и сегодня у каждого появилась возможность попробовать свои силы в этой нетривиальной задаче на конкурсе SNA Hackathon 2019 [11]. Соревнование проходит в два этапа: с 7 февраля по 15 марта загружайте решение одной из трех задач. После 15 марта будут подведены промежуточные итоги, и 15 человек из топа лидерборда по каждой из задач получат приглашения на второй этап, который пройдёт с 30 марта по 1 апреля в московском офисе Mail.ru Group. Кроме того, приглашения на второй этап получат три человека, оказавшиеся в лидерах рейтинга на конец 23 февраля.

Почему задачи три? В рамках онлайн-этапа мы предлагаем три набора данных, в каждом из которых представлен только один из аспектов: изображение, текст или информация о разнообразных коллаборативных признаках. И только на втором этапе, когда эксперты в разных областях соберутся вместе, будет раскрыт общий датасет, позволяющий найти точки для синергии разных методов.

Заинтересовала задача? Присоединяйтесь к SNA Hackathon [11] :)

Автор: dmitrybugaychenko

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/data-mining/307342

Ссылки в тексте:

[1] Одноклассниках: https://ok.ru

[2] Kafka: https://kafka.apache.org

[3] Samza: https://samza.apache.org

[4] рассчитать самые «тянущие»: https://www.youtube.com/watch?v=i0ugQhQjAXA

[5] работы коллег из LinkedIn: http://www.cse.lehigh.edu/~brian/pubs/2012/SIGIR/social-update-streams.pdf

[6] матрицы логистических регрессий: https://www.youtube.com/watch?v=AL9Yq9nTfIs

[7] опыт коллег из Facebook: http://quinonero.net/Publications/predicting-clicks-facebook.pdf

[8] нуждается в калибровке: https://www.cs.cornell.edu/~alexn/papers/calibration.icml05.crc.rev3.pdf

[9] XGBoost-Spark: https://xgboost.readthedocs.io/en/latest/jvm/xgboost4j_spark_tutorial.html

[10] была непростой: https://vk.com/video-133150806_456239018

[11] SNA Hackathon 2019: http://snahackathon.org

[12] Источник: https://habr.com/ru/post/438392/?utm_campaign=438392