Этот пост посвящен исследовательскому проекту, проведенному совместно с Decathlon Canada по рекомендации использования графических нейронных сетей. Код Python доступен на GitHub, и эта тема также была освещена в 40-минутной презентации + вопросы и ответы доступны на Youtube.

В последние годы популярность графических нейронных сетей (GNN) резко возросла. От многочисленных научных статей до конкретных реализаций множество исследователей продвинули понимание GNN.

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

В этой статье рассматривается весь процесс построения рекомендательной системы с использованием GNN, от получения данных до настройки гиперпараметров. Мы будем следить за примером Decathlon Canada, универсального магазина спортивных товаров с платформами электронной коммерции.

Оглавление

  1. Определение задачи
  2. Получение данных
  3. Построение графика
  4. Проектирование модели
  5. Обучение модели
  6. Сезонность
  7. Настройка гиперпараметров
  8. Результаты, следующие направления и заключение

Определение задачи

Рекомендовать предметы, интересующие пользователей

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

Рекомендация - сложная задача; потребители многогранны, и их предпочтения сложно предсказать. В Decathlon Canada рекомендации предоставляются участникам в разных местах, в частности на веб-сайте и по электронной почте.

Предыдущие модели пробовали

Чтобы решить эту задачу, команда специалистов по искусственному интеллекту Decathlon Canada опробовала множество моделей. Среди них можно выделить матричную факторизацию, модели RNN и ближайших соседей, как это было представлено в двух предыдущих статьях (здесь и здесь).

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

Почему GNNs

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

Наш подход

Проще говоря, мы предлагаем кодер-декодер или подход к репрезентативному обучению. Его можно разделить на два этапа.

  • Создавайте высококачественные вложения для всех пользователей и элементов (подробнее о встраиваниях здесь)
  • Для всех пользователей прогнозируйте предпочтения элементов, используя вложения

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

Для начала давайте посмотрим на доступные данные.

Получение данных

Доступны три основных набора данных, соответствующих поставленной задаче.

Взаимодействие пользователя с предметом

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

Особенности товара

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

Возможности пользователя

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

Построение графика

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

Графики распространены в реальном мире (например, в социальных сетях, молекулах).

Мы используем доступные данные для построения графика Decathlon. В нашем случае узлами являются пользователи, предметы и спорт. Ребра - это щелчок, покупка, избранное, связанное и принадлежащее, как показано на приведенном ниже примере диаграммы.

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

Проектирование модели: генерация встраивания

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

Вот псевдокод для данного узла:

  1. Получать входящие сообщения от всех соседей
  2. Сократите все эти сообщения в одно сообщение, выполнив среднюю агрегацию
  3. Умножение матрицы сообщения соседства на обучаемую матрицу весов
  4. Умножение матрицы исходного сообщения узла на обучаемую матрицу весов
  5. Подведите итоги шагов 3 и 4.
  6. Передайте сумму через функцию активации relu
  7. Повторите эти действия для любого количества слоев. Результат - результат последнего слоя.

Вот визуальный обзор процесса. Для простоты показанный график включает только пользователей, элементы и 2 типа ребер.

Математически процесс можно определить следующим образом:

(Обратите внимание, что агрегирование здесь представлено как сумма, но доступны другие параметры, в частности среднее, max и min .)

Мы используем Deep Graph Library для построения модели с PyTorch в качестве внутренней инфраструктуры. Код для одного уровня передачи сообщений можно упростить до следующего:

class ConvLayer(nn.Module):
  def __init__(self):
    self.fc_self = nn.Linear(in_feats, out_feats)        
    self.fc_neigh = nn.Linear(in_neigh_feats, out_feats)
  def forward(self, graph, x):      
    h_neigh, h_self = x       
    graph.srcdata['h'] = h_neigh            
    graph.update_all(fn.copy_src('h', 'm'),fn.mean('m', 'neigh'))
    h_neigh = graph.dstdata['neigh']
    z = self.fc_self(h_self) + self.fc_neigh(h_neigh)
    z = F.relu(z)

(Напоминание: код проекта доступен на GitHub.)

Разработка модели: оценка предпочтений

Сгенерированные вложения используются для прогнозирования вероятности существования соединения между двумя узлами. Прогнозируемая вероятность взаимодействия между пользователем u и элементом v дается следующим уравнением, где f (·) - функция подобия косинуса:

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

Обучение модели

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

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

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

Основная проблема: сезонность

Особенность дела Decathlon касается сезонности. Некоторые платформы электронной коммерции, такие как Decathlon, процветают за счет сезонности: велика вероятность, что никто не станет покупать ракетки для пляжного тенниса, когда популярны снежные перчатки, и наоборот. Сезонность объясняет множество вариаций в структуре интересов клиентов.

Использование сезонности представляет собой один из вкладов этого исследования. Предлагаются две основные корректировки.

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

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

Настройка гиперпараметров

Мы провели тесты для нескольких функций. В нашем конкретном случае производительность модели оказывается чувствительной к одним функциям и гораздо менее чувствительна к другим.

Добавление спорта в качестве узлов

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

Количество слоев

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

Дельта функции потерь

Как было показано в предыдущем разделе, функция потерь включает фиксированный гиперпараметр ∆. Оптимальная дельта составляет около 0,266. Слишком низкая дельта часто приводит к плохому обучению, когда модель не дает низкие оценки отрицательным парам, тогда как слишком высокая дельта часто приводит к отсутствию обучения вообще, так как задача слишком сложна для модели.

Размеры встраивания

При создании вложений мы должны определить размер скрытого скрытого пространства и выходного пространства. Оптимальное скрытое пространство составляет около 256 измерений, а оптимальное выходное пространство - около 128. Пространства с более низкой размерностью приводят к встраиванию меньшего качества, тогда как пространства с большей размерностью замедляют обучение модели, не улучшая ее производительность.

Размер отрицательной выборки

В функции потерь необходимо фиксировать количество отрицательных отсчетов. Оптимальное количество - от 700 до 3000; слишком мало образцов приводит к плохому обучению, а слишком большое количество замедляет обучение без повышения производительности.

Прочие соображения

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

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

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

Мы разделяем данные на обучающие и тестовые наборы, используя временные индикаторы. Для всех доступных пользователей для обучения используются данные за 50 недель, а для тестирования - 2 недели.

Производительность модели GNN сравнивается с простой базовой моделью, в которой всем пользователям рекомендуются самые популярные товары за последние 2 недели.

Метрики, используемые для сравнения, - это отзыв, точность и охват для рекомендаций из 10 пунктов.

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

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

Кроме того, для модели GNN доступно несколько дополнительных улучшений, в то время как существующие модели, похоже, достигли своих пиковых характеристик.

Следующие проспекты

Больше данных

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

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

Изучение других методологий GNN

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

Другие функции потерь, такие как Weighted Approximately Ranked Pairwise (статья здесь), также могут оказаться уместными. Также можно рассмотреть возможность усовершенствования методологии отрицательного отбора проб для получения более жестких отрицательных проб. Наконец, внимание привлекли несколько областей машинного обучения. В некоторых исследованиях изучалась его значимость для GNN, таких как сеть внимания сети знаний [2].

Заключение

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

GNN как НИОКР для опытных команд

На мой взгляд, GNN - это не приземистый плод. Методология все еще носит экспериментальный характер: объем работ по промышленной реализации и установленных библиотек ограничен, особенно по сравнению с CNN и RNN. Однако эта тема вызывает живой интерес; в ближайшие годы он должен быть все более и более документированным и доступным.

Изменение парадигмы данных: основные преимущества

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

Графические нейронные сети очень интересны; в Decathlon Canada мы с нетерпением ждем новых внедрений этой зарождающейся методологии. Вопросы, комментарии, идеи? Не стесняйтесь обращаться ко мне через LinkedIn!

Благодарим членов команды AI Decathlon Canada за комментарии и отзывы, в частности Самуэля Мерсье, Ченга Чжана и Яна Гобейля. Также благодарим профессора Laurent Charlin из HEC Montreal за полезные обсуждения, отзывы и рекомендации. Этот проект поддержан программой Mitacs Accelerate.

Decathlon Canada нанимает!

Вас интересует компьютерное зрение и применение искусственного интеллекта для повышения доступности спорта? Перейдите по ссылке https://joinus.decathlon.ca/en/annonces, чтобы увидеть различные интересные возможности, в частности роли разработчиков AI Backend.

использованная литература

[1] Инь, Рекс, Разрушая Хе, Кайфэн Чен, Понг Эксомбатчай, Уильям Л. Гамильтон и Юре Лесковец. Графические сверточные нейронные сети для рекомендательных систем веб-масштаба. Труды 24-й Международной конференции ACM SIGKDD по интеллектуальному анализу данных, 19 июля 2018 г., стр. 974–83. Https://doi.org/10.1145/3219819.3219890.

[2] Ван, Сян, Сяннань Хэ, Исинь Цао, Мэн Лю и Тат-Сэн Чуа. KGAT: Сеть знаний для рекомендаций. Труды 25-й Международной конференции ACM SIGKDD по интеллектуальному анализу данных при обнаружении знаний, 25 июля 2019 г., стр. 950–58. Https://doi.org/10.1145/3292500.3330989.

Другие известные ссылки