Проект Harvard Data Science Capstone, осень 2019 г.

Члены команды: Софи Чжао, Ичжоу Ван, Фэн Цянь

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

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

Данные

Мы используем Набор данных о сеансах потоковой передачи музыки (MSSD) », изначально опубликованный Spotify для конкурса. Набор данных содержит как данные сеанса прослушивания, так и таблицу поиска для функций песни.

Структура данных

Выше представлен график структуры имеющихся у нас данных. У нас есть два файла данных: один файл со строками сессий, а другой - со строками треков. Дорожки - это песни, а сеанс - это последовательность треков, которые слушает один пользователь. Spotify ограничивает максимальную продолжительность сеанса до 20.

Внутри сеанса записываются действия между дорожками и внутри них. Действия между дорожками включают в себя: skip_very_briefly, skip_briefly, most_played_before_skip, no_skip, указывая шаблон, который пользователь переносит с одной дорожки на другую. Действия в песне в основном включают move_forward, move_backward, no_move, указывающие на поведение пользователя при прослушивании трека; и no_pause_before_play, short_pause_before_play, long_pause_before_play, указывающие на поведение пользователя при приостановке. Вышеупомянутые ответы можно интерпретировать как предпочтения пользователя по каждому треку.

У нас также есть данные о функциях для каждой дорожки, и эти функции предоставляются Spotify вручную или автоматически. К таким характеристикам относятся акустичность, beat_strentgh, танцевальность и т. Д. И варьируются в пределах [0,1]. Мы можем включить эти функции в нашу модель.

Выборка данных

MSSD - это огромный набор данных, содержащий более 20 миллионов песен и 17 миллионов сессий, содержащих около 600 ГБ данных. Чтобы приспособить нашу модель к этому набору данных, мы берем подмножество песен и сессий, как мы объясним ниже.

Чтобы выбрать подмножество MSSD, мы делаем следующее: сначала мы делаем выборку данных сеанса, затем мы выбираем данные трека сеанса. В исходных данных мы решили выбрать 100 тысяч сеансов из данных. Поскольку данные разделены на 10 zip-файлов с одинаковыми размерами, нам нужно выбрать 10 тысяч сеансов из каждого zip-файла. Каждый zip-файл состоит из N файлов данных, поэтому нам нужно выбрать 10k / N тысяч сессий из каждого файла данных. Поскольку каждый файл данных содержит разное количество сеансов, нам нужно брать выборку из каждого файла данных с разной вероятностью. Например, если есть сеанс $ M $ в файле данных $ f_1 $, мы принимаем каждый сеанс в файле f1 случайным образом с вероятностью 10k / NM.

После выборки всех сессий нам нужно найти все треки, которые появляются в наших выборочных данных. Это может быть легко, если размер данных небольшой: мы могли бы использовать заданную структуру данных, чтобы найти набор идентификаторов дорожек. Однако, поскольку размер данных слишком велик для хранения в памяти, мы решили использовать базу данных (Mysql на Macbook Air 2014), чтобы позволить базе данных поддерживать древовидную структуру для нас. Используя базу данных, мы могли легко находить нужные нам треки.

Мы сделали выборку равномерно из более чем 300 файлов данных и сократили данные до 106 375 сеансов (376 МБ) и 281 185 треков (167 МБ).

Обзор модели

Модель обучения с подкреплением состоит из следующих компонентов: агент, среда, состояние, функция вознаграждения, функция ценности и политика. Чтобы упростить задачу, мы предполагаем, что это гипотетический пользователь, чей опыт объединен со всеми реальными пользователями. Наша рекомендательная модель будет агентом системы, обрабатывающей песни для этого гипотетического пользователя, который пропустит / не пропустит рекомендацию. Пользователь действует как среда системы, реагируя на рекомендации системы в зависимости от состояния системы. Отзывы пользователей определяют нашу награду, то есть один балл, только если пользователь не пропускает. Действие агента рекомендовано песней. Наше состояние определяется как особенности песни и соответствующие реакции пользователя за последние 5 шагов, исключая текущий шаг. Таким образом, обратная связь и действие вместе дают нам следующее состояние. Цель агента - изучить политику, которая максимизирует накопленное вознаграждение за 15 шагов. Мы установили длину прогнозирования равной 15, чтобы избежать холодного старта, то есть прогнозирования отсутствия достаточной истории, учитывая, что наша исходная длина сеанса - 20, а длина истории - 5.

Более формально математическое определение выглядит следующим образом:

Автоэнкодер

Обзор

Наши данные сначала проходят автокодировщик, состоящий из двух частей: цифрового компрессора и временного компрессора. Каждая точка данных изначально имеет размер 5 x 21, что соответствует 20 характеристикам песни для 5 песен и наблюдаемому действию пользователя (пропуск / запрет). Мы сжимаем 20 характеристик песни с помощью автокодировщика с прямой связью, который преобразует входные данные в 5 x 8. Мы объединяем ответ пользователя в конце, чтобы получилось 5 x 9. Затем мы вводим это скрытое представление в автокодировщик LSTM, который сжимает по временному измерению. в один вектор размером 1 x 9.

Реализация

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

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

Компрессор времени пытается сжать входной сигнал 5 x 9 в 1 x 9, а затем декодировать его в 5 x 9. Чтобы учесть данные смешанного типа, мы используем два временных декодера, один с потерями MSE для восстановления числовых значений, а другой с перекрестная потеря энтропии для восстановления поведения пользователя при пропуске двоичного кода. Окончательная потеря представляет собой линейную комбинацию этих двух потерь, и присвоенные веса влияют на производительность модели в этих двух задачах. Несмотря на использование двух декодеров, они используют скрытое представление единой длины 9 в качестве входных данных. Во время прогнозирования одним дополнительным этапом является то, что числовой декодер принимает выходные данные временного декодера и восстанавливает исходное измерение для числовых характеристик.

Возможное продление

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

Результат

Наши числовые характеристики нормализованы в пределах от 0 до 1. MSE для реструктуризации 5 x 20 из скрытого 1 x 9 составляет 0,0111, примерно 1% от диапазона признаков. Точность восстановления бинарного поведения пользователя составляет 88,89%. MSE от обучения числового компрессора составляет 0,0016. Вся статистика рассчитывается на тестовой выборке. Последние две строки - это статистика производительности экспериментального комбинационного компрессора. Экспериментальный комбинационный компрессор имеет точность одного извлечения двоичного поведения пользователя при пропуске на тестовом наборе и немного увеличенную MSE численной реконструкции на уровне 0,0064.

Обучение с подкреплением

Фреймворк

  • Состояние: скрытый вектор компрессора времени. Состояние длиной 9 содержит информацию о предыдущих пяти песнях и соответствующие ответы пользователей.
  • Действие: скрытый вектор числового компрессора. Действие - рекомендуемая песня. Чтобы уменьшить размерность, мы используем скрытое представление функций песни длиной 8.
  • Вознаграждение: сумма вероятности непропуска и разнообразия рекомендаций.

  • Агент: функция политики и Q-функция.

Среда

При задании пары состояние и действие окружение должно возвращать награду. Однако в этой проблеме мы не можем наблюдать реакцию пользователя в реальном времени. Что мы будем делать, так это использовать существующие данные для оценки поведения пропуска / непропуска.

Глубокий детерминированный градиент политики

DDPG, сокращение от Deep Deterministic Policy Gradient, представляет собой свободный от модели алгоритм критики субъектов вне политики, сочетающий DPG с DQN. Первоначальный DQN работает в дискретном пространстве, а DDPG расширяет его до пространства непрерывного действия с помощью структуры «субъект-критик» при изучении детерминированной политики.

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

Результат

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

Максимальный балл, который система рекомендаций может набрать за наши усеченные музыкальные сеансы, составляет 15. Поведение без пропуска занимает 34% всех данных, что соответствует эталонному баллу около 5. Как видно из графика слева, после Обучаясь всего лишь на нескольких сотнях эпизодов, наш агент набирает около 11 баллов, демонстрируя гораздо лучшую производительность, чем эталонный тест. Справа - оценка разнообразия. Если расстояние между текущим действием и предыдущим действием превышает определенный порог (0,4 стандартного отклонения), мы получаем оценку разнообразия, равную 1, в противном случае - 0. Она рассчитывается для каждого шага, следовательно, максимальная оценка также равна 15. Из сюжета видно, что вначале наш агент склонен рекомендовать похожие песни. Но примерно после 300 серий он учится учитывать разнообразие рекомендаций.

Заключение

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

Что касается обучения, мы обучаем разные компоненты модели отдельно из-за ограничений вычислительных ресурсов и времени. Было бы неплохо обучить модель от начала до конца, чтобы латентный подход лучше подходил для задачи обучения с подкреплением. Наконец, возможно, наиболее существенная модификация, которую можно внести в наши исследования, - это предоставить агенту обучения с подкреплением реальную среду. Наш текущий набор данных сильно смещен в сторону пропусков поведения (с 34% непропусками) и может не отражать реалистичное поведение клиентов. Следовательно, вместо моделирования среды с использованием набора данных (600 ГБ) лучший способ подготовить модель к производству - это нанять некоторых участников, чтобы проверить, как они реагируют на рекомендации. Таким образом, агент может полностью изучить пространство рекомендаций и дать более надежную рекомендацию.

Благодарности

Мы хотели бы выразить нашу самую искреннюю благодарность: Хавьеру Зазо, нашему наставнику, эксперту в обучении с подкреплением и отличному другу, который всегда давал нам ценные советы и поддержку, которые нам необходимы для продолжения. Павлос Протопапас, руководитель исследовательского проекта 297R, инструктор, который делает возможным это незабываемое исследовательское путешествие, и Апарна Кумар, старший научный сотрудник Spotify и аналитик данных, отличный менеджер по поддержке, которому нужно отчитываться.

Исследовательский проект находится в рамках Исследовательского проекта IACS 297R.

Первоначально опубликовано на https://sophieyanzhao.github.io.