Пошаговое руководство по созданию модели классификации машинного обучения на основе аудио для нескольких ведущих классических композиторов и воплощению ее в жизнь с помощью Hugging Face

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

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

  • Набор данных MusicNet — тщательно подобранная коллекция из 330 свободно лицензированных (CC0: Public Domain) записей классической музыки;
  • Ноутбуки Kaggle — популярный сервис широкого назначения, предоставляющий, например, бесплатный уровень NVIDIA TESLA P100 GPU доступный для зарегистрированных пользователей Kaggle для обучения моделей машинного обучения;
  • Используется модель wav2vec2-base-960h» компании Meta с примерно 95 миллионами обучаемых параметров, предварительно обученных и точно настроенных в течение 960 часов Librispeech с дискретизированным речевым звуком 16 кГц. для обучения образцам аудиоданных из MusicNet:
  • наконец, Портал HuggingFace для обучения, обмена и обслуживания моделей машинного обучения.

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

Выбор и выборка данных для многоклассовой классификации аудио

После загрузки исходных данных они передискретизируются до частоты 16 кГц, преобразуются в массив NumPy с помощью библиотеки torchaudio и далее усекаются до 100-секундных выборок для дополнительной экономии памяти во время обучения:

def get_transform_audio(file):
    audio,rate = torchaudio.load(str(file))
    transform = torchaudio.transforms.Resample(rate,RATE_HZ)
    audio = transform(audio).squeeze(0).numpy()
    return audio[:MAX_LENGTH] # truncate to first part of audio to save RAM
dd['audio'] = dd['file'].progress_apply(get_transform_audio)