Мне было лень, поэтому я создал алгоритм ИИ, чтобы сортировать за меня плейлисты Spotify.

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

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

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

Я начал думать о том, как могло бы выглядеть возможное решение; Он должен уметь учитывать семантическое сходство в треках.

Я, естественно, решил обучить Auto-Encoder (AE), чтобы научиться отображать звук дорожки в более низкое пространство представления (более полезные функции).

Что такое автокодировщик?

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

Они состоят из двух компонентов: кодировщика и декодера. Кодер отвечает за сжатие ввода в скрытое представление меньшего размера (просто меньшее, более компактное представление). Декодер используется для восстановления исходного ввода из сжатой версии.

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

Однако меня больше всего беспокоит способность автоэнкодера изучать полезные представления из набора данных без присмотра.

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

У Spotify есть потрясающий API, и я использовал библиотеку Python, которая действует как оболочка над этим API для создания набора данных.

Набор данных был получен с помощью API для загрузки звука предварительного просмотра Spotify для всех треков из 150 лучших списков воспроизведения в более чем 15 музыкальных категориях (рок, поп, афробиты и т. д.).

Звук предварительного просмотра Spotify длится не более 30 секунд, и я решил, что было бы лучше обучить эту модель на 3-секундных фрагментах звука. Это значительно увеличило набор данных (1 аудиосэмпл может генерировать не более 10 обучающих примеров).

Аудио может быть представлено несколькими способами; Амплитуда-время, амплитуда-частота и *барабанная дробь, пожалуйста*, спектрограммы!

Представление «амплитуда-время» (во временной области) — это то, что мы все знаем и любим… Обычные формы сигналов

Представление «Амплитуда-частота» (частотная область) полезно при попытке определить, какие частоты присутствуют в аудио, и их характеристики.

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

Мы преобразовываем 3-секундные кадры звука в специальный тип спектрограммы, называемый Мел-спектрограммой. Код выглядит так

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

Алгоритм

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

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

где :
f = кодировщик автоэнкодера
x_a и x_b — треки Spotify.

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

Итак, мы выбираем якорь в плейлисте. Первый трек в плейлисте может быть начальным якорем.

Учитывая этот якорь, мы сравниваем с ним другие треки. Дорожки, имеющие показатель сходства > мю-сигма (среднее значение и стандартное отклонение всех сравнений с привязкой), образуют группу. Следующий якорь — наименее похожий трек в группе. Это повторяется до тех пор, пока весь плейлист не будет отсортирован.

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

Все это имеет больше смысла в коде. Я настоятельно рекомендую вам проверить это :)



Я очень ценю то, что дочитал до этого момента! Если у вас есть какие-либо вопросы, комментарии, отзывы в целом, пишите их в комментариях, и я буду рад их проверить :)