Поиск музыкальных рекомендаций по жанрам для вашей любимой песни

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

TL; DR: Мы сделали веб-приложение, которое знакомит слушателей с новыми музыкальными жанрами, от классики до джаза, с учетом песни, которую они уже любят.

«Классическая музыка - это скучно».

Конечно, вы можете согласиться с этим - особенно если вы не посвятили свое детство погружению в мир Моцарта и Бетховена.

Но выслушайте меня. Классическая музыка на самом деле крутая.

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

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

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

Я также учусь в Массачусетском технологическом институте и получаю двойную степень по информатике и музыке. Слияние музыкальных технологий меня чрезвычайно очаровывает - особенно быстрый рост индустрии потоковой передачи музыки (вспомните Spotify, Pandora).

Во время одного из моих бесконечных всплесков поиска в Google крутых музыкальных технологий я наткнулся на Chartmetric, музыкальный аналитический стартап в районе Залива. С желанием оказаться дома в Купертино и работать в компании, которая идеально соответствовала моим интересам, я прошел у них летнюю стажировку. К счастью, они пригласили меня в качестве стажера по бэкэнду / инженерии данных!

Что меня больше всего удивило в продукте, так это то, что он есть. много. данные. 13,6 миллиона песен, 3,9 миллиона альбомов, 1,7 миллиона исполнителей в Spotify, Apple Music, YouTube, SoundCloud, TikTok и др. 😱

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

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

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

Можно ли это использовать, чтобы «соединить» эти разные миры музыки? Можем ли мы как-то «идентифицировать» песню по ее акустическим характеристикам и сравнивать их с песнями другого жанра?

Вы делаете ставку.

Genrecommender: Жанр (-Специально) Рекомендую

Я объединился с любителем веб-хакерских атак, поклонником ярлыков Vim / со-стажером Итаном Хьюстоном, чтобы создать веб-сайт с рекомендациями по музыке для конкретных жанров. Проект разбит на три части: веб-приложение (в центре внимания Итана), рекомендации и обработка данных (в центре моего внимания), как показано ниже:

Что делает Genrecommender?

Для любой (вашей любимой!) Песни мы отправим вам 5 (из ~ 750 000 возможных) рекомендаций по жанру. Вы можете выбрать музыку из классики, кантри, джаза, R&B или поп-музыки.

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

Что делает его таким замечательным?

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

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

Однако в бэкэнде армия манипуляций с данными, конвейеры Scikit-Learn, Dockerized контейнеры и интеграции веб-сервисов Google Cloud Platform работают вместе, чтобы выполнить вашу рекомендацию. Звучит много, но весь поток рекомендаций от конца до конца занимает менее получаса.

Что я могу увидеть?

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

Используя данные Chartmetric, мы также включаем труднодоступные аналитические данные для каждой рекомендации, в том числе:

  • Количество плейлистов Spotify: общее количество плейлистов, в которых есть трек.
  • Spotify Reach: общее количество подписчиков в этих плейлистах.
  • Популярность: популярность Spotify, рассчитанная с помощью алгоритмов.

Но подождите, это еще не все! Есть еще пара ссылок, которые предоставят вам даже дополнительную информацию о каждом совпадении: 1) страница Chartmetric для рекомендаций, если вы человек числовой, или 2) верхний плейлист Spotify, в котором звучит песня. на.

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

Процесс развития

Шаг 0) Что мне нужно (знать): предыстория

  • Контекст. У нас было 10 недель на создание, разработку и реализацию оригинального проекта с использованием данных Chartmetric.
  • Языки программирования: Python, SQL (Data Science); JavaScript (Интернет)
  • Ключевые концепции: получение данных, запросы SQL, очистка / фильтрация данных, API, алгоритм кратчайшего расстояния, конвейеры обучения, Flask, React, веб-приложения.

Шаг 1. Данные, данные и другие данные: прием данных

Чтобы рекомендовать песни, нам нужно собрать песни, с которыми мы будем работать.

Запрашивая базу данных Chartmetric, мы собрали данные по жанрам для ~ 750 тысяч песен: жанр песни (из iTunes), исполнитель (из Spotify) и акустические характеристики (из Spotify / Echo Nest).

Шаг 1.5) Надо очистить: обработка данных

Не все данные идеальны. Некоторых песен, которые мы собрали, больше не существовало. У других отсутствовали определенные акустические характеристики. Тем не менее, мы не хотим иметь дело с неверными данными.

Очистка проводилась в записной книжке Jupyter, что упростило процесс фильтрации с визуализацией данных. Каждый пул потенциальных совпадений в жанре хранился в фрейме данных pandas, который стал моим лучшим другом для переформатирования, организации и подготовки данных для дальнейших манипуляций.

Шаг 2) Центр машинного обучения: алгоритм кратчайшего расстояния

Имея данные под рукой, следующим шагом было определить, как сравнивать песни.

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

В конечном итоге мы выбрали четыре особенности Echo Nest: танцевальность (последовательность ритма), энергия (возбуждение), темп (скорость) и валентность (радость или печаль). Казалось, что они обычно охватывают «размерность» песни в пяти тестируемых нами жанрах.

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

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

Шаг 3) Соединение бэкэнда и внешнего интерфейса: создание API

Теперь, когда бэкэнд для науки о данных был готов, нам нужен был способ запустить наш алгоритм и взаимодействовать с данными. Мы выбрали построенный API с использованием Flask и Gunicorn, чтобы веб-сайт мог выполнять HTTP-вызовы к нашим конечным точкам.

Чтобы рекомендации были легкими, мы использовали библиотеку Pickle для упаковки объектов Python и сохранения их между запросами. Это позволило нам постоянно повторно использовать наши фреймы данных для конкретных жанров и обученный конвейер.

Шаг 4) Перенесите в Интернет: разработка приложений

Это все было тяжелой работой Итана. Мы использовали React для создания нашего приложения и разместили его на GCP, так что Genrecommender мог плавать в собственном бессерверном и контейнерном мире, обеспечивая простое и гибкое управление ресурсами.

С небольшой помощью Cloud Build и Docker мы развернули нашу настраиваемую производственную среду в Cloud Run, которую можно найти на genrecommend.me! 😊

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

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

И, может быть, вы обнаружите, что классическая музыка в конце концов не такая уж и скучная.

Огромное спасибо Dr. Джошу Хейсу за то, что он вселил уверенность в мою работу и его невероятное наставничество, Томи Калми за капитальный ремонт интерфейса и Комалу Прабху за ее поддержку в консультировании по разработке серверной части.

Супер благодарен за то, что мне удалось провести лето с замечательной командой Chartmetric, зацените их здесь!

Если у вас есть какие-либо вопросы по проекту, обращайтесь к нам по адресу [email protected] / [email protected] / [email protected].