www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Анализ формы волны открывает данные в музыке

Дата публикации Jun 3, 2019

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

Мои отношения с музыкой

Музыка очень важна для меня. Это была константа в моей жизни, которая видела меня во всех сферах жизни, как хороших, так и плохих. Так как я трачу так много времени на музыку, поиск новой музыки всегда был моей страстью. Хотя я не знаю, сколько часов я потратил на прослушивание музыки за эти годы, я знаю, что только за последние восемь лет я собрал библиотеку из более чем 6000 индивидуально выбранных песен.

Размер моей музыкальной библиотеки.

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

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

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

Пример одноканального аудио сигнала.

Извлечение и выбор функций

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

Я хотел начать и знал, что смогу ответить на последние вопросы, как только у меня в руках будет несколько функций, поэтому я и начал. После рефакторинга в то время устаревшиеpyAudioAnalysisПакет и управление зависимостями пакетов, я извлек особенности для каждой песни. Я знал, что если я извлекаю элементы только для части песни, извлеченные элементы могут не совсем точно отражать песню целиком. Чтобы решить эту проблему, функции были извлечены через движущееся окно и усреднены. Таким образом, дисперсия каждого объекта может быть рассчитана и использована в качестве дополнительных объектов. Это составило 33 основных функции, каждая со связанным стандартным отклонением, для каждой песни:

  1. Скорость пересечения нуля:Скорость изменения знака (звуковые сигналы относительны и центрированы в нуле). Ключевая особенность в классификации ударных звуков.
  2. Энергетика:Сумма квадратов значений сигнала, нормированная по длине окна. Определяет громкость песни.
  3. Энтропия Энергии:Энтропия нормализованных энергий субкадров. Используется как мера резких изменений.
  4. Спектральный Центроид:Центр тяжести спектра. Относится к «яркости» звука.
  5. Спектральный спред:Второй центральный момент спектра. Измеряет ширину полосы спектра.
  6. Спектральная энтропия:Энтропия нормированных спектральных энергий. Мера спектрального изменения во времени.
  7. Спектральный поток:Квадрат разности между нормированными величинами спектров двух последовательных кадров. Измеряет устойчивость / согласованность спектра.
  8. Спектральный спад:Частота, ниже которой сосредоточено 90% распределения спектра.
  9. Коэффициенты Mel-частоты Cepstral (13 характеристик):Вариация линейного кепстра (нелинейная шкала высот). Обычно используется для распознавания речи.
  10. Ключ (12 функций; G, C, D и т. Д.):Спектральная энергия в каждом полутоне

Из этого я выбрал список полезных функций, основанный на следующих соображениях:

  1. Поскольку функции рассчитываются по длине песни, песни с различными компонентами или миксы с несколькими песнями будут иметь функции, которые не полностью отражают песню.
  2. Ключ песни не был идеальным для использования в качестве функции для выбора песни. Мне не нужен плейлист песен с жуткими мелкими нотами (см.Адель как кто-то вроде тебя в несовершеннолетнем), поэтому я удалил функции, включающие ключ песни.
  3. Мелкочастотные кепстральные коэффициенты лучше подходят для распознавания речи, чем для выбора песен с похожим звучанием, поэтому они также были удалены.

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

Моя библиотека, которая существует без удобных жанровых ярлыков, таких как Alternative, Pop, Rock и т. Д., Не позволяет создавать специфичные для жанра списки воспроизведения в традиционном смысле. Это беспокоило меня до тех пор, пока я не осознал, что жанровые границы не определены четко и что это привело бы к ненужному искажению того, как я могу создавать плейлисты.

Стало очевидно, что с помощью чего-то похожего наАлгоритм k-ближайших соседей (k-NN)было бы наиболее подходящим способом создания списков воспроизведения, хотя мне не нужно было создавать систему классификации; однажды указав песню, я бы нашел ближайших соседей песни в 16-мерном пространстве, рассчитав попарноЕвклидовы расстоянияв любой другой момент с scikit-учиться. Я также хотел, чтобы мой фреймворк был достаточно надежным, чтобы не требовалось ни перебирать тысячи файлов, ни помнить точное название песни или исполнителя, чтобы найти песню, на которой будет основан плейлист. Для этого я создал простой конвейер для создания каждого плейлиста.

Создать плейлист!

Сначала я ввожу частичную песню или имя исполнителя и желаемую длину плейлиста. Например, если бы я хотел плейлист из 15 песен, основанный на классической фортепианной песне Людовико Эйнауди, но я не мог вспомнить ни название песни, ни его фамилию, ввод был бы:

genPlaylist(‘Ludovico’, 15)

Затем отобразятся все песни, которые соответствуют свободному запросу SQL:

SELECT name WHERE name LIKE ‘%ludovico%’

Чтобы дать следующий вывод:

Увидев имена и поняв, что я хочу песню Людовико ЭйнаудиNuvole BiancheЗатем я мог бы выбрать песню 2. Приведенный ниже код будет определять евклидовы расстояния отNuvole Biancheдля каждой другой песни, отсортируйте их, а затем верните ближайших соседей, которые будут использоваться в списке воспроизведения.

min_dists = pairwise_distances(features_df.loc[songID]\
.values.reshape(1,-1), features_df.values)neighbor_indices = min_dists.argsort()[0][:num_songs]id_list = []

for neighbors in neighbor_indices:
id_list += [features_df.iloc[neighbors].name]

new_playlist = song_df[song_df.index.isin(id_list)]
new_playlist_entries = new_playlist['title']

После идентификации песен создается папка «Ludovico Einaudi - Nuvole Bianche», и песни перемещаются в эту папку.

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

Заключение и потенциальные приложения

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

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

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

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map