Улучшенные рекомендательные системы с LightGCN

Авторы: Юрий Настран, Эрмин Омерагич, Томаж Мартинчич

Если подумать, большинство крупнейших технологических компаний, от Amazon до Youtube, постоянно пытаются создать лучшие рекомендательные системы для своих конкретных приложений. Можно даже сказать, что рекомендательные системы — это самая эффективная задача машинного обучения в отрасли на сегодняшний день. И задача не становится легче, так как с каждым днем ​​мы ожидаем увидеть больше пользователей с большим количеством товаров на выбор. Поэтому лучшая модель завтрашнего дня должна давать не только оптимальные рекомендации, но и давать их эффективно. Давайте рассмотрим одну из таких моделей: Light Graph Convolution Network или LightGCN¹.

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

Пример набора данных

В качестве практического примера давайте рассмотрим примерный набор данных, в котором пользователями являются слушатели музыки, которые ищут музыкальных исполнителей («items»). Исходный набор данных доступен по адресу ³.

Набор данных содержит 1824 пользователя, 6854 исполнителя и 20 664 тега — подумайте о связях между пользователями и исполнителями на графике. Средний художник связан примерно с 3 пользователями, в то время как средний пользователь связан примерно с 11 художниками, поскольку количество художников значительно превышает количество пользователей в этом конкретном наборе данных. К счастью для нас, мы также можем видеть отметку времени каждогоновогоподключения, что очень важно, поскольку позволяет нам элегантно разделить подключения на обучающий набор (самое раннее время) и тестовый набор (самое последнее время)³. Теперь мы хотим создать рекомендательную модель системы, которая прогнозирует появление новых тегов/подключений в будущем.

Модели на основе встраивания

LightGCN — это модель, основанная на встраивании, что означает, что она пытается найти оптимальные вложения (векторы) для пользователей и элементов. В то же время он также ищет оптимальную функцию оценки f,целью которой является присвоение высоких оценок новым парам пользователь-элемент, которые действительно являются хорошими рекомендациями, и присваивают низкие баллы в противном случае¹.

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

Прежде чем перейти к lightGCN, давайте сначала рассмотрим гораздо более простую модель, основанную на встраивании, с богатым наследием в рекомендательных системах: подход Matrix Factorization², который послужит нашей базовой моделью:

В нашем конкретном случае мы внедрили матричную модель факторизации в качестве основы для сравнения с моделью LightGCN. Здесь оценочная функция f является просто скалярным произведением двух вложений, и модель обучается путем минимизации Фробениозной нормы > матрица (R — HW), где матрица R — это матрица смежности пользовательских элементов, тогда как матрица H содержит пользовательские вложения, а W содержит встраивания предметов². Функция оценки f такая же, как и в случае с lightGCN, но чтобы интуитивно понять модель, мы должны сначала подумать о том, как модель lightGCN будет стремиться оптимизировать его производительность.

Но как измерить производительность? … Вспомнить@К

Популярным методом измерения производительности является получение всех фактических новых ребер пользовательских элементов из тестового набора и подсчет доли этих новых ребер на самом деле. прогнозируется, если мы рассматриваем только K лучших прогнозов нашей модели (имеется в виду K новых ребер с наивысшими оценками f(user, item)) . Эта доля рассчитывается для каждого пользователя, после чего доли усредняются по всем пользователям, чтобы получить окончательную оценку, называемую Recall@K².

Однако метрика Recall@K не дифференцируема, а это означает, что нам нужно разработать суррогатную функцию потерь, которая была бы дифференцируемой, чтобы обучение модели lightGCN могло используйте градиенты, чтобы быстрее найти оптимум.

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

Мы используем сигмовидную функцию, чтобы сопоставить разницу двух оценок с интервалом [0, 1], что позволяет нам рассматривать оценку как вероятность, поэтому мы можем объединить оценки всех пар положительных и отрицательных ребер для данного пользователя u*в функцию потерь журнала этого конкретного пользователя u*. Затем мы усредняем эти потери журналов² по всем пользователям, чтобы получить окончательные потери журналов, которые называются потерями Байесовского персонализированного рейтинга (BPR):

Главное событие: LightGCN

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

Теперь, когда вложения инициализированы, мы подошли к самой важной части всей модели: как мы хотим, чтобы вложения взаимодействовали друг с другом таким образом, чтобы поощрялись вложения похожих пользователей/элементов? похоже? LightGCN делает это с помощью 3 слоев, где для каждого слоя каждый узел получает свое новое вложение, комбинируя вложения своих соседей. Это можно рассматривать как разновидность свертки графа (см. сравнение со сверткой изображений ниже):

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

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

Поскольку матрица распространения вычисляется из матрицы степеней D и матрицы смежности A, матрицу распространения необходимо вычислить только один раз, и она не содержит обучаемых параметров. Фактически, единственные изучаемые параметры находятся во вложениях неглубоких входных узлов, которые мы умножаем на матрицу диффузии K раз, чтобы получить (K + 1) вложения, которые затем мы просто усредняем, чтобы получить окончательные вложения:

Теперь, когда мы понимаем, как модель распространяет входные данные вперед, мы можем сами закодировать модель, используя PyTorch Geometric, которая будет использовать уже объясненные байесовские персонализированные потери при ранжировании для оптимизации. вложения элементов и пользователей. PyG (PyTorch Geometric) — это библиотека, созданная на основе PyTorch для простого написания и обучения графовых нейронных сетей (GNN) для широкого спектра приложений, связанных со структурированными данными. Как вы, наверное, заметили, PyTorch Geometric — это действительно удобная библиотека Python, предназначенная для простого написания графовых нейронных сетей, а также для их обучения. Не стесняйтесь читать о них здесь. Если вас интересуют блокноты Colab и видеоуроки по нейронным сетям на графах, есть также много замечательных руководств здесь.

Делаем прогнозы с LightGCN

После того, как мы обучим lightGCN с помощью функций, предоставляемых PyTorch Geometric, у нас теперь есть каждый пользователь и элемент из обучающего набора, представленные с оптимизированным внедрением, что означает, что пользователям с похожими внедрениями, вероятно, понравятся похожие элементы и они подобные предпочтения. Мы прогнозируем предпочтения каждого пользователя в отношении еще не просмотренных элементов, вычисляя новые оценки пользовательских элементов на основе окончательных вложений, возвращаемых моделью. Затем для каждого пользователя мы продолжаем рекомендовать K элементов (новых для пользователя) с наибольшей оценкой. Как и для матричной факторизации, оценочная функция f представляет собой просто скалярное произведение вложений, эффективно вычисляемое с помощью умножения матриц:

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

При кодировании рекомендателя LightGCN мы снова используем утилиты, предоставляемые в PyTorch Geometric:

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

Полученные результаты

Модель была запущена на трех тестовых наборах за три года: 2008, 2009 и 2010. Для данного тестового набора данные обучения состояли из всех соединений, сделанных в предыдущие годы, поэтому, например, модель, которая была протестирована на тестовый набор 2010 г. был обучен на тренировочном наборе соединений, сделанных за все предыдущие годы, включая 2008 и 2009 гг. Но модель, которая тестировалась на тестовом наборе 2008 г., обучалась только на данных 2007 г. и ранее.

Как только модель выдала прогнозы, мы оценили их с помощью Recall@K, представленного ранее. В первой таблице ниже показаны результаты, полученные с матричной факторизацией в качестве базовой линии, а во второй таблице ниже показаны результаты, полученные с помощью LightGCN:

Как и ожидалось, recall@K увеличивается с увеличением K, и модель, по-видимому, показала лучшие результаты на тестовом наборе 2010, возможно, потому, что обучающая выборка в этом случае была наибольшей. Обе таблицы, однако, ясно показывают, что LightGCN превзошла базовую модель матричной факторизации в отношении Recall@K. Гистограмма ниже показывает значения Recall@K, усредненные за три года.

Другой показатель, который мы могли бы использовать, — это средний взаимный рейтинг (MRR). Эта метрика пытается лучше объяснить, насколько наша модель уверена в прогнозируемом соединении. Он делает это, рассматривая все фактически правильные новые соединения Q. Для каждого из них он проверяет, сколько неправильных предсказанных соединений (ложных срабатываний) было сделано с большей уверенностью, чтобы получить ранг для этого соединения (минимально возможный ранг равен 1, потому что мы также считаем само правильное соединение). Каждый из этих рангов инвертируется, а инвертированные ранги усредняются для получения MRR:

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

Конечно, для обучения модели LightGCN требуется НАМНОГО больше времени, чем для модели Matrix Factorization, которая используется для инициализации ее вложений. Тем не менее, LightGCN очень легкий по сравнению с другими графовыми сверточными нейронными сетями, как следует из названия. Это связано с тем, что LightGCN не имеет никаких обучаемых параметров, за исключением входных вложений, что делает его намного быстрее для обучения, чем другие модели на основе GCN, используемые для рекомендательных систем.

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

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

Источники

  1. Xiangnan He, Kuan Deng, Xiang Wang, Yan Li, Yongdong Zhang и Meng Wang. Lightgcn: Упрощение и усиление сети свертки графов для рекомендаций. В материалах 43-й Международной конференции ACM SIGIR по исследованиям и разработкам в области информационного поиска, страницы 639–648, 2020 г.
  2. Визуализации взяты из лекции Юре Лесковца, доступны по адресу https://web.stanford.edu/class/cs224w/slides/13-recsys.pdf.
  3. Иван Кантадор, Петр Брусиловский и Цви Куфлик. 2-й семинар по неоднородности информации и слиянию в рекомендательных системах (hetrec 2011). В материалах 5-й конференции ACM по системам рекомендаций, RecSys 2011, Нью-Йорк, США, 2011. ACM.
  4. Полный код, используемый для этого проекта, доступен по адресу https://github.com/tm1897/mlg_cs224w_project/tree/main
    (Авторы: Эрмин Омерагич, Томаж Мартичич, Юрий Настран)