27 ноября 2017

Подборка Discover Weekly от Spotify: как машинное обучение находит для нас новую музыку

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

В этот понедельник — как и в любой другой понедельник — более 100 миллионов пользователей Spotify открыли новый плейлист, собранный специально для них. Это стандартный микс из 30 песен, которые они никогда не слушали раньше, но, вероятно, полюбят их. Это подборка Discover Weekly, и это — почти магия.

Я большая поклонница Spotify, особенно подборки Discover Weekly. Почему? Благодаря ей я чувствую, что меня видят как пользователя. Spotify знает о моих музыкальных предпочтениях больше, чем любой человек в моей жизни. И я восхищаюсь его способностью попадать в точку с треками, которые я сама бы не нашла и даже не догадалась бы искать.

Все те, кто живет под музыкально звуконепроницаемым куполом, — позвольте познакомить вас с моим лучшим виртуальным другом:

Как оказалось, я не одинока в своей одержимости Discover Weekly — пользователи без ума от нее, и это побудило Spotify полностью переосмыслить фокус и инвестировать больше ресурсов в создание плейлистов на основе алгоритмов.

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

Discover Weekly знает меня так хорошо, что если бы он предложил выйти замуж, я бы сказала «да».

Итак, как же Spotify магическим образом выбирает эти 30 песен для каждого человека каждую неделю? Давайте на секунду отвлечемся: посмотрим, как другие музыкальные сервисы создают подборки треков, и убедимся, что Spotify делает это лучше.

Краткая история создания подборок онлайн-музыки

Еще в 2000-х годах Songza запустила подборки — тогда они создавались для пользователей вручную. «Manual curation» означает, что команда «музыкальных экспертов» или других кураторов вручную собирала плейлисты, которые, по их мнению, звучали хорошо. Позже Beats Music использовала эту же стратегию. Ручная подборка работала неплохо, но все же она требовала времени на создание. В итоге она все равно была простой и не учитывала нюанса индивидуального музыкального вкуса каждого слушателя.

Как и Songza, Pandora была одним из первых игроков области. Ее подход был чуть более продвинутым — вручную тегировались «атрибуты песен». Это означало, что группа людей слушала музыку, выбирала кучу описательных слов для каждого трека и помечала треки этими словами. Затем код мог просто фильтровать базу песен по тегам для создания плейлистов с похожей музыкой.

Примерно в это же время появилось музыкальное агентство The Echo Nest от MIT Media Lab. Оно предложило гораздо более продвинутый подход к персонализированной музыке. Echo Nest использовали алгоритмы для анализа аудио- и текстового содержания музыки, и с помощью них можно было идентифицировать треки, делать персонализированную рекомендацию и создавать список воспроизведения.

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

***
Итак, это способы, которые использовали другие музыкальные онлайн-сервисы. Но как Spotify придумал свою волшебную машину, которая, кажется, разбирается в индивидуальных вкусах пользователей гораздо лучше, чем любой из них?

3 типа рекомендаций, который использует Spotify

Фактически Spotify не использует какую-то революционную модель рекомендаций – вместо этого он смешивает лучшие стратегии других сервисов, и так получается уникальный и мощный механизм Discovery.
Чтобы создать Discover Weekly, используются три основных типа моделей рекомендаций:

  • Совместная фильтрация (как у Last.fm) — анализ поведения пользователей и сопоставление вашего поведения с поведением других;
  • Обработка естественного языка (NLP) — анализ текста;
  • Аудиоанализ, или анализ самих звуковых дорожек.

Давайте внимательно рассмотрим каждую из них!

Модель № 1: Совместная фильтрация

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

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

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

Но что такое совместная фильтрация и как она работает? Вот вам краткое и поверхностное объяснение с помощью диалога:

«— Мне нравятся треки P, Q, R, S! — Тогда послушай трек T!»
«— Мне нравятся треки Q, R, S, T! — Круто! Попробуй P!»

Что мы видим? У каждого из этих двух парней есть некоторые предпочтения: парень слева любит треки P, Q, R и S, а парень справа любит треки Q, R, S и T.

Совместная фильтрация использует эти данные, чтобы сказать: «Ммм. Ваши предпочтения совпадают в 3-х треках — Q, R и S — так что вы, вероятно, полюбите треки из плейлистов друг друга. Надо предложить вам те из них, что вы еще не слышали».

Поэтому парень справа послушает P, а парень слева — T. Просто, не так ли?
Но как Spotify использует этот метод на практике для вычисления миллионов треков, которые понравятся одним пользователям, анализируя предпочтения миллионов других?

… матричная алгебра, написанная с помощью библиотек Python!


На самом деле матрица, которую вы видите здесь, гигантская. Каждая строка — один из 140 миллионов пользователей Spotify (если вы используете Spotify, вы сами являетесь строкой в этой матрице), и каждый столбец представляет собой одну из 30 миллионов песен в базе данных Spotify.

Затем в библиотеке Python выполняется эта длинная сложная матричная факторизация:

Когда вычисление выполнено, мы получаем два вектора: здесь X и Y. X — пользовательский вектор, представляющий один вкус одного пользователя, а Y — вектор песни, представляющий «профиль» одной песни.

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

Чтобы найти пользователей, музыкальные предпочтения которых наиболее похожи на мои, совместная фильтрация сравнивает мой вектор с векторами других пользователей, и выявляет максимальные сходства. То же самое касается Y-вектора песен — вы можете сравнить вектор песни со всеми другими и выявить, какие песни больше всего похожи на выбранные вами.
Хорошая работа. Но в Spotify знали, что они могут сделать лучше, добавив еще один инструмент — NLP (обработка естественного языка).

Модель №2: Обработка естественного языка

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

Обработка естественного языка (NLP) — способность компьютера понимать человеческую речь как она есть. Это обширное поле само по себе, часто эксплуатирующее API анализа чувств/эмоций.

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

И хотя я не знаю особенностей того, как именно Spotify выбирает данные для дальнейшей обработки, я могу рассказать, как Echo Nest работал с ними. Они группировали данные в так называемые «культурные векторы» или топ-значения/определения. Каждый исполнитель и каждая песня имели тысячи определений, которые обновлялись ежедневно. Каждое определение имело «вес», выраженный в числовом коэффициенте. Он показывал, насколько важно описание, а именно: насколько высока вероятность того, что кто-то будет описывать музыку с помощью конкретного слова.

Далее, как и в совместной фильтрации, NLP использует эти определения и коэффициенты для создания векторной репрезентации песни, которая может быть использована для определения схожести двух композиций. Круто, правда?

Модель №3: Аудиоанализ

Сначала вопрос. Вы можете подумать: «Но у нас же и так достаточно данных, добытых с помощью первых двух методов. Зачем нам анализировать и саму музыкальную дорожку?»
Третий метод повышает точность рекомендательного сервиса. Но это не все — в отличие от первых двух, он учитывает и новые песни.
Такой пример: ваш друг-сонграйтер выложил на Spotify свою песню. Допустим, у него всего 50 прослушиваний, поэтому парадигма совместной фильтрации к нему не очень-то применима. Он также пока не упоминается нигде в Интернете, поэтому и второй метод не сможет его обработать. К счастью, третий метод позволяет избежать дискриминацию, и песня вашего друга может оказаться в плейлисте Discover Weekly вместе с хитами!

Теперь осталось ответить на вопрос «как»: как мы можем анализировать необработанные аудиоданные, которые кажутся настолько абстрактными?
с помощью сверточных нейронных сетей!

Сверточные нейронные сети — это та же технология для распознавания лица. В случае Spotify они были изменены для использования в аудиоданных вместо пикселей. Вот пример архитектуры нейронной сети:

Эта особая нейронная сеть имеет четыре сверточных слоя (толстые полосы слева) и три плотных слоя (более узкие полосы справа). Входные данные — «аудиокадры» определенной длительности, которые связываются для формирования спектрограммы. Аудиокадры проходят через эти сверточные слои, и после последнего сверточного слоя вы можете увидеть слой «глобального временного пула», который объединяет всю ось времени, эффективно вычисляя статистику изученных функций в течение песни.

После обработки нейронная сеть выдает характеристики песни, как развитие во времени, тональность, настроение, темп и громкость. Ниже приведен график этих данных для 30-секундной вырезки трека «Around the World» Daft Punk.


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

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

Дальше — большe

Идеи, которые нас вдохновляют, видео-интервью и переводы исследований, которые были нам полезны в процессе работы.

15 сентября 2017

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

29 ноября 2016

Оптимизация воронок при помощи User Journey

21 июня 2017

Иррациональный пользователь

11 октября 2017

Лучшие практики: микро- взаимодействия

14 сентября 2016

Дуплекс в веб-дизайне: обзор цветового тренда, который захватывает мир

29 сентября 2017

Дизайн-мышление: карты эмпатии