machinelearningmastery.ru

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

Home

Классификация машинного обучения и музыки: контент-фильтрация

Дата публикации Dec 19, 2018

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

Функция извлечения с Librosa

Когда я впервые начал изучать тему поиска музыкальной информации, процесса извлечения информации о музыке и ее аудиоконтенте на основе обработки аудиосигнала, это казалось довольно сложной задачей, которая потребовала бы достаточных технических знаний. Ну, это конечно, есть даже целыйполепосвященный задаче. К счастью, создателиБиблиотека Librosa Python, Пользователи Python могут использовать эту библиотеку, чтобы легко извлекать информацию из любого mp3-файла, который вы можете использовать Посмотрите видео ниже, которое дает краткое руководство одного из создателей библиотеки:

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

Первые шаги: загрузка необходимых модулей

Mel-Power Спектограмма

Chromagram

Очень легко! Librosa действительно замечательный инструмент для поиска музыкальной информации. Для следующего шага в моем исследовании контентной фильтрации я хотел создать целую модель, которая могла бы классифицировать музыку в соответствии с нужным жанром на основе различных функций. Для данных вместо того, чтобы использовать информацию, предоставленную Librosa, которая может занять довольно много времени и вычислительных мощностей, если вы пытаетесь анализировать большое количество песен, я решил использовать информацию, предоставляемую веб-API Spotify. Spotify предоставляет функции песен, которые я могу использовать для классификационной модели, которые не являются настолько техническими по своему характеру, как предоставляемые Librosa. Например, некоторые функции включают в себя «Danceability», которое «описывает, насколько подходит трек для танцев на основе комбинации музыкальных элементов, включая темп, стабильность ритма, силу удара и общую регулярность. »И« Энергия », которая« представляет собой меру восприятия интенсивности и активности. Как правило, энергичные треки кажутся быстрыми, громкими и шумными ». Вы можете найти полный список функций и их описания, включенные в мои данные, в следующем разделе этого поста. Крутой особенностью этого API является то, что он предоставляет нетехнические способы описания песни, которые получены из более технического и научного контент-анализа музыки.

Классификация музыки с использованием K-Nearest Neighbours

Ниже я предоставляю код для моегоK-Ближайшие соседимодель классификации, где я попытался классифицировать песни в их правильном жанре. Мои данные включали около 300 песен, из которых около 1/3 были хип-хоп, 1/3 техно и 1/3 классика. Я также включил код для работы с Spotify Web API, который поначалу может быть немного сложным. Перед тем, как проверить это, вот краткое описание функций, которые я получил от Spotify API:

Акустичность - показатель достоверности от 0,0 до 1,0 того, является ли дорожка акустической. 1.0 означает высокую достоверность того, что трек акустический.

Danceability - Danceability описывает, насколько подходящая дорожка для танцев, на основе комбинации музыкальных элементов, включая темп, стабильность ритма, силу удара и общую регулярность. Значение 0.0 является наименее танцевальным, а 1.0 - наиболее танцевальным.

Энергия - энергия представляет собой меру от 0,0 до 1,0 и представляет собой меру восприятия интенсивности и активности. Как правило, энергичные треки кажутся быстрыми, громкими и шумными. Например, дэт-метал обладает высокой энергией, в то время как прелюдия Баха имеет низкую оценку по шкале. Перцептивные особенности, способствующие этому атрибуту, включают динамический диапазон, воспринимаемую громкость, тембр, частоту появления и общую энтропию.

Инструментальность - предсказывает, не содержит ли трек вокал. В этом контексте звуки «ох» и «ааа» рассматриваются как инструментальные. Рэп или треки устных слов явно «вокальные». Чем ближе значение инструментальности к 1,0, тем больше вероятность, что трек не содержит вокального контента. Значения выше 0 5 предназначены для представления инструментальных треков, но достоверность выше, когда значение приближается к 1,0.

Key - ключ, в котором находится трек. Целые числа отображаются на высоту тона, используя стандартную нотацию класса тона. Например. 0 = C, 1 = C♯ / D 2, 2 = D и т. Д.

Живость - обнаруживает присутствие аудитории в записи. Более высокие значения живучести представляют повышенную вероятность того, что трек был исполнен вживую. Значение выше 0,8 обеспечивает высокую вероятность того, что трек жив.

Громкость - общая громкость дорожки в децибелах (дБ). Значения громкости усредняются по всей дорожке и полезны для сравнения относительной громкости дорожек. Громкость - это качество звука, которое является основным психологическим коррелятом физической силы (амплитуды). Значения типичного диапазона от -60 до 0 дБ.

Speechiness - Speechiness обнаруживает присутствие произнесенных слов в треке. Чем более речеподобна запись (например, ток-шоу, аудиокнига, стихи), тем ближе значение атрибута к 1,0. Значения выше 0,66 описывают дорожки, которые, вероятно, полностью состоят из произнесенных слов. Значения от 0,33 до 0,66 описывают треки, которые могут содержать как музыку, так и речь, либо в секциях, либо в слоях, включая такие случаи, как рэп. Значения ниже 0,33 наиболее вероятно представляют музыку и другие неречеподобные треки.

Темп - Общий предполагаемый темп дорожки в ударах в минуту (BPM). В музыкальной терминологии темп - это скорость или темп данного произведения, который напрямую зависит от средней продолжительности удара.

Time Signature - Расчетная общая временная подпись трека. Подпись времени (метр) является условным обозначением, определяющим, сколько ударов приходится на каждый такт (или меру).

Валентность - показатель от 0,0 до 1,0, описывающий музыкальную позитивность, передаваемую треком. Треки с высокой валентностью звучат более позитивно (например, счастливые, веселые, эйфорические), в то время как треки с низкой валентностью звучат более негативно (например, грустные, подавленные, злые).

Краткое описание процесса: сначала я запросил идентификаторы трека из трех плейлистов Spotify, по одному плейлисту каждого жанра. Затем я запросил функции для каждого трека и объединил все песни в один Pandas DataFrame. Затем я использовал модель Scikit Learn K-Nearest-Neighbors, просматривая несколько значений K, чтобы найти оптимальное для моей модели. В конечном итоге это привело к значению K, равному 9, которое я использовал при подборе модели к данным тренировки. Вот оценки для модели классификации по данным испытаний:

Результаты тестов по модели KNN

Оценка F1 около 0,93 для моего тестового набора. Глядя на матрицу путаницы, кажется, что у модели возникли некоторые проблемы с песнями хип-хопа, иногда классифицируя их как техно. Неплохо, но давайте посмотрим, сможем ли мы добиться большего успеха, используя другую модель.

Классификация музыки с использованием Random Forest

Затем я попробовал классификацию, используяСлучайный Лесмодель, метод ансамбля, который, как я надеялся, даст мне более точные результаты, используя те же функции, которые я использовал в модели K-Nearest Neighbours. Смотрите код и результаты ниже:

Результаты тестов для модели случайного леса

Использование Random Forest дало мне отличные результаты классификации! Вы также можете увидеть гистограмму, отображающую важность отдельных функций в модели. Очевидно, что модель случайного леса была гораздо более точной, чем модель K-Nearest Neighbours, что неудивительно, учитывая простоту K-Nearest Neighbours.


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

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

Footer decor

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