Как мы использовали вкусовые профили для масштабирования рекомендаций плейлистов

В iHeartRadio мы упорно работаем над созданием универсального аудиосервиса, который просто поймет вас. Мы предлагаем постоянно растущий каталог с более чем 80 миллионами песен, 25 миллионами эпизодов подкастов, 4 тысячами радиостанций в прямом эфире и 2 500 тщательно подобранными плейлистами. Варианты бесконечны.

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

Один из подходов, который мы используем для понимания предпочтений пользователей, - это концепция, которую мы называем вкусовыми профилями. Идея довольно проста: некоторым пользователям нравится Alt Country, а другим нравится Trip-Hop. Вкусовые профили представляют собой музыкальные жанры и поджанры, которые, по нашему мнению, вы, скорее всего, будете слушать в будущем. Вы, наверное, относитесь к поп-музыке, но думали ли вы о Bubblegum Pop или Dance-Pop? Мы используем вкусовые профили, чтобы помочь вам найти эти малоизвестные жемчужины. В этом сообщении описывается, как мы использовали инструменты машинного обучения для создания вкусовых профилей для десятков миллионов пользователей и одно место, где мы используем их, чтобы помочь пользователям находить новую музыку: плейлисты, созданные ди-джеями.

Действительно ли нам нужна модель?

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

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

Мы решили, что подход машинного обучения может устранить многие из этих недостатков и предложить более разумное предположение о ваших будущих музыкальных вкусах. Цель состояла в том, чтобы построить модель, которая предсказывает, насколько вероятно, что пользователь будет наслаждаться каждым из более чем 400 музыкальных поджанров.

Моделирование пользовательских предпочтений

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

Идя дальше, мы обнаружили, что определенные поведенческие тенденции также влияют на музыкальные вкусы, например, предпочитаете ли вы слушать утром или вечером и предпочитаете ли вы использовать iPhone или Android. Например, вечерние слушатели тратили на прослушивание Hard Rock примерно на 38% больше времени, чем утренние слушатели. А пользователи iPhone слушали примерно на 40% больше песен Country, чем пользователи Android. Вместе эта информация дает нам надежный набор функций для определения будущих жанровых предпочтений.

Затем мы собрали наборы данных для обучения и удержания. Для конкретного пользователя мы собрали их набор функций вместе с группой «ярлыков», представляющих долю времени, которое они фактически потратили на прослушивание каждого поджанра в течение будущего периода времени (рисунок 1).

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

Для нашей модели мы решили использовать нейронную сеть с одним скрытым слоем и выходным слоем softmax. Мы экспериментировали с более глубокими сетями, но для этой конкретной проблемы не нашли улучшений, кроме мелкой архитектуры. Для каждого пользователя обученная модель предсказала вероятность прослушивания всех 400 поджанров. Рисунок 2 представляет основные жанры для одного пользователя. Черная линия указывает средний профиль для всех пользователей. По сравнению со средним показателем, этот пользователь транслировал намного больше альтернативного / инди-рока и поп-музыки. Сравнение красных (прошлое прослушивание) и синих (профиль) точек показывает, что модель в значительной степени ожидала, что этот пользователь продолжит потоковую передачу аналогичной музыки в будущем.

Рисунок 2. Пример вкусового профиля для одного пользователя. Черная линия указывает средний профиль вкуса для всех пользователей. Красные точки представляют прошлые данные прослушивания, которые вошли в модель. Синие круги обозначают вкусовые предпочтения пользователя.

В приведенном выше примере профиль пользователя и предыдущее прослушивание были очень похожи. Однако для всех пользователей модель была значительно более точной в прогнозировании будущего прослушивания, чем только прослушивание в прошлом. Профиль пользователя, представленный на Рисунке 3, помогает понять, почему. Прошлая, прогнозируемая и будущая вероятность прослушивания этого пользователя схожи с одним заметным исключением: танцевальной поп-музыкой. Этот пользователь ранее не транслировал песни в этом жанре. Однако они проявили значительный интерес к родственным жанрам, таким как Pop и Club / Dance. Модель была достаточно умной, чтобы знать, что эти жанры очень часто связаны с танцевальной поп-музыкой, и поэтому предсказывала, что она станет одним из фаворитов пользователей. Конечно, этот пользователь продолжал слушать значительное количество танцевальной поп-музыки. Фактически, он стал их четвертым по популярности жанром!

Рисунок 3. Профили вкуса предвосхищают будущее прослушивание. Этот пример иллюстрирует случай, когда модель правильно предсказала, что этому слушателю понравится Dance-Pop, несмотря на то, что он никогда не слушал этот жанр в прошлом.

В этом примере показано, как модель, которая узнает о взаимосвязи между разными поджанрами, может предвидеть будущие предпочтения. В этом особенно убедительном примере прогнозы модели были на 50% точнее, чем одно только предыдущее прослушивание.

Более богатый обучающий набор улучшает обобщение

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

Левая и средняя панели рисунка 4 демонстрируют, как изменились прогнозы модели после того, как мы удалили прошлое прослушивание для одного пользователя. Имея доступ к истории прослушивания, модель делала прогнозы (синие кружки), которые близко соответствовали будущему прослушиванию (черные пунктирные линии). Когда мы удалили историю прослушивания, модель по-прежнему правильно определила, что этому пользователю нравится Country и ее поджанры. Однако он систематически недооценивал, насколько пользователь предпочитает страну. В этом случае модель была примерно в 10 раз менее точной.

Результат этого анализа позволил нам предположить, что мы могли бы улучшить производительность, дополнив наш обучающий набор искусственными пользователями. Для этого мы взяли подмножество обучающих примеров, удалили их историю прослушивания и добавили этих новых искусственных пользователей в полный обучающий набор. Добавление этих новых примеров заставило модель лучше использовать дополнительную информацию и, таким образом, улучшить ее обобщение. Действительно, после повторного обучения модели на этих новых примерах среднеквадратичная ошибка улучшилась почти на 50% для пользователей без истории прослушивания, в то время как производительность для других пользователей не пострадала. На правой панели Рисунка 4 показан профиль пользователя после повторного обучения. Производительность была сопоставима с исходным состоянием (левая панель), включая историю прослушивания.

Рисунок 4. Более богатый обучающий набор улучшает обобщение. (слева) Прогнозируемое будущее прослушивания для одного пользователя близко соответствовало фактическому будущему прослушиванию (RMSE = 0,0027). (посередине) Модель дает менее точные прогнозы для того же пользователя, когда прошлое прослушивание было искусственно удалено (RMSE = 0,022). (справа) Переобучение модели с примерами, не содержащими истории прослушивания, значительно улучшило производительность (RMSE = 0,0028).

Масштабное построение вкусовых профилей

Следующей задачей был переход от небольшого подтверждения концепции к масштабируемому решению. Конечная цель состояла в том, чтобы поддерживать актуальные вкусовые профили для каждого из миллионов наших активных пользователей. Команда Data Science в iHeartRadio использует Spark на Amazon EMR для пакетной обработки, и мы хотели использовать эту существующую инфраструктуру при реализации вкусовых профилей. Однако Spark изначально не поддерживает модели нейронных сетей. Мы рассмотрели ряд возможных решений для преодоления этого пробела, включая DL4J, Apache MxNet и TensorflowOnSpark. В конце концов, мы остановились на библиотеках Intel BigDL / Analytics Zoo для их естественной интеграции в экосистему Spark. Используя синтаксис типа Keras, мы быстро запустили модель и запустили ее на EMR. Теперь профили пользователей надежно обновляются каждое утро на основе последней информации.

Еще одно преимущество использования BigDL - его интеграция со Spark Streaming. В будущем мы планируем использовать ту же модель для обновления вкусовых профилей практически в реальном времени, что будет особенно актуально для новых пользователей. Обладая информацией, предоставленной во время регистрации, мы можем начать формировать профиль вкусов пользователей еще до того, как они начнут транслировать одну песню.

Рекомендации по персонализированным спискам воспроизведения

Наконец, после создания, проверки и масштабирования этих вкусовых профилей мы были готовы использовать их для выработки рекомендаций по персонализированным спискам воспроизведения. iHeartRadio поддерживает более 2500 плейлистов, созданных ди-джеями, в том числе несколько сотен, созданных некоторыми из ваших любимых исполнителей, такими как Dan + Shay, Post Malone, 21 Savage и многими другими. К сожалению, обнаружить, что плейлист, созданный вашим любимым исполнителем или теми, кто должен слышать Песни лета, может быть болезненным. Вот почему мы решили ввести карусель рекомендаций.

В созданной нами системе использовался контентный подход для поиска релевантных плейлистов. После построения вкусовых профилей для каждого пользователя мы затем нашли распределение жанров в каждом плейлисте. Например, Club Teen, саундтрек для подростковой вечеринки, поддерживающий любую вечеринку, содержит множество треков Club / Dance и Pop-Rap. Затем система просматривает все наши плейлисты, чтобы найти те, жанры которых наиболее похожи на каждый профиль. Обзор процесса показан для одного пользователя на рис. 5.

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

Хотя общий подход был прост, мы снова столкнулись с проблемой масштабирования. Вычисление оценок сходства между двумя векторами большой размерности (каждый из которых имеет 400 жанров) требует больших вычислительных ресурсов. Перебор методом перебора был бы непрактичным при большом масштабе. Чтобы решить эту проблему, мы использовали Spark-реализацию локального хеширования (LSH), алгоритм приблизительного ближайшего соседа. Основная идея LSH заключается в том, что мы можем значительно снизить вычислительные затраты, исключив ненужные сравнения. Например, профиль нашего супер-фаната джаза совсем не похож на контент в плейлистах Dance-Pop или Club Teen. Используя LSH, мы избегаем всех этих сравнений. Благодаря этому подходу мы сократили время вычислений и построили систему, которая будет масштабироваться по мере роста количества пользователей и списков воспроизведения, которые мы предлагаем.

После тщательной оптимизации и оценки конвейера в автономном режиме, наконец, настало время для нашего самого окончательного теста: представить его живым пользователям. Для этого нам нужно было добавить записи в наши мобильные приложения. Здесь нам помогли наши клиентские команды, которые быстро запустили карусель для отображения рекомендаций (Рисунок 5). С помощью нашей аналитической группы мы настроили A / B-тест, при котором половина мобильных пользователей получила стандартную версию, а другой половине была показана новая карусель. Тест длился 10 дней. В течение этого периода пользователи, получившие карусель, на 16% чаще выбирали элемент на вкладке списка воспроизведения, а сама карусель получила больше кликов, чем все другие разделы контента. И пользователи не только чаще нажимали на кнопки, но и тратили больше времени на прослушивание выбранных списков воспроизведения и слушали их большее количество. Предоставление персонализированных рекомендаций помогло пользователям найти контент, соответствующий их вкусам, и обнаружить те малоизвестные плейлисты, которые они иначе могли бы пропустить.

В целом, эти результаты убедительно свидетельствуют о том, что добавление карусели рекомендаций улучшило пользовательский интерфейс вкладки списка воспроизведения. Создание профиля вкуса для каждого пользователя позволило нам предложить более увлекательный и персонализированный опыт. Следовательно, мы запустили карусель для 100% наших пользователей на устройствах Android и iPhone! Теперь вы тоже можете открывать для себя новые плейлисты, которые точно соответствуют вашим вкусам. Все, что вам нужно сделать, это зарегистрировать бесплатную учетную запись iHeartRadio и начать слушать. Все остальное мы сделаем сами.

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

Этот продукт был бы невозможен без упорной работы команд в организации iHeartRadio, включая Data Engineering, Data Science, AMP, Analytics, Client и Product. Особая благодарность Бретту Винчу, Виктору Чану, Сэму Гаррету, Джордану Розенблюму, Крису Уильямсу, Робу Роу, Джордану Стоуну, Трэвису Смиту, Саймону Кнаппу и Хуану Фелипе Кардоне.