- PVSM.RU - https://www.pvsm.ru -
Графовые рекомендательные системы показывают state of the art результаты, но про них редко пишут и еще реже используют в продакшене. В этой статье мы расскажем про опыт Одноклассников в применении графового подхода для задачи рекомендации групп, разберем причем тут нейросети и что делать, если не все рекомендации одинаково полезны для пользователей и портала.
Привет! Меня зовут Андрей, и я занимаюсь разработкой рекомендательных систем в команде групп. В Одноклассниках много сервисов используют рекомендательные системы, построенные на разных подходах и экосистема групп здесь не исключение. Прежде чем углубляться в детали реализации нашего подхода к рекомендациям, стоит рассказать о том, что представляют собой группы на портале и в чем их особенность как объектов рекомендаций.
Группы в Одноклассниках — одна из важнейших частей портала, которые помогают находить нашим пользователям сообщества единомышленников, а брендам и малому бизнесу — своих клиентов. На сегодняшний день у нас зарегистрировано больше 11 миллионов групп очень разных по содержанию и назначению. Мы стараемся каждому нашему пользователю подобрать что-то по вкусу, впрочем, о вкусах речь пойдет дальше.
Мы рекомендуем группы как на отдельной "витрине групп", так и в ленте пользователя.
А еще есть внутренний пользователь — сервис "Рекомендации", который использует групповые рекомендации для отбора постов-кандидатов. Каждый день мы показываем пользователям 2 миллиарда рекомендованных им групп.
Группы, как объект рекомендаций, имеют свой уникальный набор сложностей по сравнению с классическими примерами вроде товаров в онлайн-магазинах:
Все эти особенности требуют аккуратной подготовки данных для обучения, а также механизма пост-фильтрации рекомендаций.
В отличии от других областей машинного обучения в задачах рекомендаций нет универсального набора моделей. C одной стороны, глубокое обучение все чаще используется для построения рекомендательных систем, в большом количестве публикуются соответствующие статьи, а Google регулярно рассказывает о том, как они используют [1 [1],2 [2],3 [3],4 [4]] нейронные сети для рекомендаций в YouTube.
С другой стороны, эти успехи не так очевидны даже на фоне классических алгоритмов. Так в работе "Are we really making much progress? A worrying analysis of recent neural recommendation approaches" [5], которая получила приз за лучшую статью на последней RecSys [6] авторы приходят к таким выводам:
Помимо этого, другая группа авторов на том же RecSys показала [7], что графовый алгоритм на Random Walks [8] с доработанным механизмом формирования графа и персонализированной глубиной случайного блуждания с заметным отрывом превосходит все существующие подходы. Помимо превосходных результатов в качестве рекомендаций графовый подход ультра-эффективен в плане производительности.
Несмотря на стабильно хорошие результаты графовых подходов для рекомендаций в научных статьях, зрелых открытых библиотек для них до сих пор не появилось.
В своем решении мы ставили целью совершенствование подхода Random Walks для задачи рекомендаций групп. В результате этой работы получилось найти, как общеприменимые подходы к улучшению оригинального подхода, так и эвристики, позволяющие решать конкретно нашу задачу.
Вершинами графа для случайного блуждания являются объекты рекомендаций (в нашем случае группы), а веса рёбер между этими вершинами — оценка похожести групп на основе пользовательской обратной связи. В самом простом случае такую оценку можно получить на основе пересечений аудиторий групп, посчитав косинусное расстояние между векторами групповых членств пользователей. Для каждой вершины-группы мы оставляем только top-k похожих на нее групп в исходящих ребрах и нормируем их значения.
Помимо самого графа, который мы держим в памяти, необходимо иметь начальные вершины, с которых начинается его обход. Их набор и добавляет персонализацию в этот подход (сам граф один на всех), поскольку зависит от интересов пользователей, которые мы называем “групповыми вкусами”. В самом простом приближении ими могут быть группы, в которых состоит пользователь.
Для отбора кандидатов проводятся тысячи итераций обхода графа, которые начинаются с виртуальной “нулевой вершины” — самого пользователя к одной из его начальных вершин входящих в “групповые вкусы” с соответствующим весом и далее по графу. Вес ребра определяет вероятность перехода между вершинами, при этом в каждой вершине есть вероятность телепортироваться в начало обхода. Конечные вершины каждого обхода становятся кандидатами для рекомендаций.
Подход к расчету похожести групп при построении рекомендательного графа аналогичен ItemKNN [11] подходу, где для описания объекта рекомендаций служит вектор пользовательских рейтингов (взаимодействий).
На практике, при использовании такого подхода из графа выпадают небольшие группы, которые получают слишком малый вес близости из-за небольшого числа участников. Для решения этой и других проблем мы решили усовершенствовать механизм формирования графа, использовав модель нейронной сети word2vec.
Word2vec — модель нейронной сети предназначенная для решения задач обработки естественного языка. Подробное описание того как это работает есть в переводе отличной статьи [12]. Если вкратце, то с помощью word2vec можно получать векторные представления (эмбеддинги) слов, подавая на вход нейронной сети контекст, в которых они встречаются. Для задач рекомендаций [13] вместо предложений из слов на естественном языке, мы формируем последовательности из объектов, относящихся к одному пользователю или пользовательской сессии, и на выходе получаем эмбеддинги для этих объектов.
Например, подавая на вход нейронной сети, списки групп, в которых состоят пользователи, нейронная сеть сможет расположить их в векторном пространстве так, что они сформируют некоторые осмысленные кластера.
Обучив первую модель на данных об участиях пользователей в группах, мы получили эмбеддинги групп. Взяв top-k групп близких по косинусу эмбеддингов для каждой группы как исходящие ребра, получился более богатый на небольшие группы граф (число групп увеличилось в 4 раза). Результаты А/Б эксперимента показали +25% к общим вступлениям в группы, при этом вступления в группы меньше 1 тысячи участников выросли в 13 раз.
Классические упражнения для проверки интуиции с полученными векторами групп также показали, что модель выучила что-то осмысленное.
Интуитивно кажется, что все верно: если из большого СМИ про все на свете (ТАСС) вычесть деловое издание (РБК), то останется группа нишевого издания про науку (Образовач — N+1).
В первой итерации для обучения брали просто факт участия в группе и это было неплохим приближением. Однако, несколько артефактов, замеченных при внимательном изучении результатов, заставили нас задуматься о том, что сам факт участия в группе не является железобетонным указанием того, что пользователю она интересна.
В качестве хорошего примера можно взять группу музыкального проекта “Нейромонах Феофан” [14]. Стилистика оформления у коллектива очень аутентичная (говорят, что там даже поет медведь) и не все пользователи по названию, аватару и даже фотографиям группы сразу понимают ее назначение. Поэтому, среди участников группы Феофана есть пользователи, которые на самом деле попали туда по ошибке. Из-за этого оказалось, что в первых вариациях модели, наряду с музыкальными проектами к Феофану в топ похожих, попали группы религиозной направленности.
Кроме этого случая, удалось выловить несколько примеров групп, радикально изменивших свою тематику, при этом понятно, что аудитория измениться не успела и выученные эмбеддинги таких групп попадали в абсолютно нерелевантные кластера. Так крупная группа для автомобилистов с постами/обзорами машин превратилась в кулинарное сообщество.
Из-за того, что “групповые вкусы” являются еще и начальными точками обхода графа, попадание туда случайной группы приводило к тому, что пользователь мог систематически получать нерелевантные рекомендации.
Для расширения и уточнения “групповых вкусов” мы решили использовать все доступные данные о пользовательских взаимодействиях с группами и групповым контентом, взвешивая их по времени получения (новые имеет больший вес):
После обучения модели на этих данных и настройки параметров word2vec обнаруженные ранее артефакты исчезли, а А/Б эксперимент показал +23% к вступлениям в группы меньше 1 тысячи человек и 9,5% в группы с от 1 до 10 тысяч участников.
Что делать, если пользователь потребляет мало контента и собранных "вкусов" недостаточно, чтобы предложить ему полноценную витрину рекомендаций? Как всегда на помощь приходят друзья, в нашем случае это друзья самого пользователя. Мы считаем, что скорее всего человек разделяет "вкусы" своих друзей (особенно той же соцдем-группы), и подмешиваем их в начальное множество вершин обхода графа.
В худшем случае берем соцдемы (Top-N популярных с группировкой по полу, возрасту и географии), которые почти всегда являются универсальной палочкой-выручалочкой. Наконец, если вдруг мы совсем ничего не знаем про пользователя (он только зарегистрировался и даже не успел заполнить профиль), есть общий топ популярных на портале групп. Кстати, его же мы используем как резерв, если рекомендательный сервис по какой-то причине недоступен.
Существенная часть групп в Одноклассниках состоит из сообществ единомышленников, но в то же время, большое число групп ведутся профессионалами в коммерческих целях: от крупных брендов с интересным содержанием до банального спама.
Иногда в группу вкладывают много сил и создают практически отдельное сильное медиа, но потом передают её тем, кого волнует только монетизация. Такие группы быстро теряют прежний объём фидбека, но по инерции могут ещё долго занимать выгодное положение в выдаче рекомендательной системы. Так как две трети от всех вступлений в группы в Одноклассниках происходят через рекомендации, мы должны следить за тем, чтобы пользовательское внимание занимали не просто релевантные, но и качественные группы с вовлекающим контентом.
Граф близости групп не может обеспечить это сам по себе, поскольку некоторым очень хорошим группам может не повезти и они не наберут входящих связей от крупных групп, а некоторым некачественным группам, наоборот, алгоритм может присвоить одну-две связи от крупных групп. Это может привести к существенному разбросу числа их рекомендательных показов, так как связи от крупных групп приведут большее число пользователей первым шагом обхода графа.
Для решения этой проблемы мы разработали алгоритм построения графа, учитывающий помимо похожести групп два дополнительных фактора: “мощности” исходной вершины и “качества” конечной.
“Мощность” из этих двух нововведений посчитать проще всего: чем больше активных участников у группы, тем она мощнее, поскольку её исходящие связи в графе будут оказывать влияние на рекомендации большему числу пользователей. “Качество” посчитать значительно сложнее и мы продолжаем совершенствовать механизм его оценки так, чтобы с одной стороны точно убрать из рекомендаций неинтересные группы, а с другой, не допустить случаев, когда группа интересная, но проваливается в “некачественные”.
Для подсчёта “качества” мы собираем около ста характеристик каждой группы для обученной логистической регрессии. Модель для этого этапа выбрали наиболее простую для удобства интерпретации результатов.
Далее, имея исходный граф близости групп, “мощность” и “качество” каждой группы, остается решить только задачу балансирования этих трёх факторов: т.е. построить граф, в котором от наиболее “мощных” групп связи идут к наиболее “качественным”, при этом вес связи должен в неменьшей степени учитывать схожесть. К сожалению, решить её за разумное время можно только приблизительно, поскольку это задача из класса NP [15]. Однако, уже за 10 итераций фильтрации входящих и исходящих связей с учётом “мощности” и “качества” соответственно, приближённое решение оказывается вполне достойным.
В сухом остатке, word2vec, дополнительные данные и учёт мощности и качества групп при формировании графа по сравнению с оригинальным подходом дали:
Рекомендательные системы в Одноклассниках работают во всех ключевых сервисах и помимо графового рекоммендера мы используем широкий спектр технологий:
В статье мы намеренно не касались технических аспектов реализации и внедрения разработанного решения в нашу инфраструктуру — это отдельная тема, но некоторые детали есть в докладе [20] с прошедшего Data Толк #3 [21].
Мы всегда открыты новому и стараемся использовать в продакшене самые продвинутые решения. Если вам интересно поработать с действительно большими данными, то приходите к нам — мы ищем новых коллег.
Автор: Андрей Кузнецов
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/data-mining/353018
Ссылки в тексте:
[1] 1: https://daiwk.github.io/assets/youtube-multitask.pdf
[2] 2: https://arxiv.org/pdf/1812.02353.pdf
[3] 3: https://dl.acm.org/doi/10.1145/3298689.3346996
[4] 4: https://research.google/pubs/pub45530/
[5] "Are we really making much progress? A worrying analysis of recent neural recommendation approaches": https://arxiv.org/abs/1907.06902
[6] RecSys: https://recsys.acm.org/
[7] показала: http://www.nikolako.net/papers/NBKG_RecSys2019.pdf
[8] Random Walks: https://arxiv.org/pdf/1711.04101.pdf
[9] Здесь: https://github.com/MaurizioFD/RecSys2019_DeepLearning_Evaluation
[10] релизация: https://github.com/nikolakopoulos/Personalized-Diffusions
[11] ItemKNN: https://towardsdatascience.com/prototyping-a-recommender-system-step-by-step-part-1-knn-item-based-collaborative-filtering-637969614ea
[12] переводе отличной статьи: https://habr.com/ru/post/446530/
[13] задач рекомендаций: https://arxiv.org/pdf/1603.04259.pdf
[14] “Нейромонах Феофан”: https://ok.ru/neurofeofan
[15] класса NP: https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%81_NP
[16] интересной историей: https://www.youtube.com/watch?v=CtXclbJFO5g
[17] LightFM: https://github.com/lyst/lightfm
[18] используются нетривиальные графовые эвристики: https://www.youtube.com/watch?v=C9_eQKzku1k
[19] байесовские многорукие бандиты: https://habr.com/ru/company/ods/blog/325416/
[20] докладе: https://ok.ru/video/2393966250603
[21] Data Толк #3: https://habr.com/ru/company/odnoklassniki/blog/475702/
[22] Источник: https://habr.com/ru/post/499192/?utm_source=habrahabr&utm_medium=rss&utm_campaign=499192
Нажмите здесь для печати.