[PYTHON] Vorhersagen von Tags durch Extrahieren von Musikfunktionen mit Deep Learning

Motivation

Es scheint, dass die konventionelle Musikempfehlungstechnologie häufig kooperative Filterung verwendet, aber kooperative Filterung hat den Nachteil, dass sie keine Werke verarbeiten kann, die "keine Benutzerbewertungen sammeln", wie kleinere Songs und neue Songs.

Ein anderer Ansatz zur Musikempfehlungstechnologie, die Methode, "Musikmerkmale zu extrahieren und in Empfehlungen zu verwenden", scheint in der Lage zu sein, die oben genannten Probleme zu vermeiden.

Als ich versuchte, mit dem Artikel "End-to-End-Lernen für Musik-Audio" [^ 1] zu lernen, konnte ich den Quellcode nicht finden. Deshalb habe ich ihn selbst reproduziert und gesagt: "Extrahieren Sie den Musikfeature-Betrag mit Deep Learning und markieren Sie ihn. Ich beschloss, die Aufgabe des "Vorhersagen" zu übernehmen. (Bitte beachten Sie, dass einige Arbeiten geändert wurden und es sich nicht um eine vollständige Reproduktion handelt.)

Ich konnte nicht viele Artikel über die Verarbeitung von Musik mit Python und Deep Learning finden, also hoffe ich, dass es hilft.

Einen Datensatz erhalten

Verwenden Sie den MagnaTagATune-Datensatz [^ 2]. Jedes Lied hat 29 Sekunden Musik, 25863 Lieder und 188 Tags.

#MP3-Daten abrufen
$ wget http://mi.soi.city.ac.uk/datasets/magnatagatune/mp3.zip.001
$ wget http://mi.soi.city.ac.uk/datasets/magnatagatune/mp3.zip.002
$ wget http://mi.soi.city.ac.uk/datasets/magnatagatune/mp3.zip.003

#Konsolidieren und entpacken Sie geteilte Zip-Dateien
$ cat mp3.zip* > ~/music.zip
$ unzip music.zip

#Tag-Daten abrufen
$ wget http://mi.soi.city.ac.uk/datasets/magnatagatune/annotations_final.csv

Ermöglichen Sie die Verarbeitung von MP3 durch Numpy

Installieren Sie pydub

Die Sprachfunktionen, die normalerweise bei der Spracherkennung und beim MIR (Musikinformationsabruf) verwendet werden, sind das Mel-Frequenz-Kepstram, nachdem die Merkmalsextraktion auf RAW-Daten angewendet wurde. In diesem Dokument werden RAW-Daten jedoch so wie sie sind als Audiofunktion verwendet. Wie das Bild ist es sehr gefühlvoll, die Rohdaten in Deep Learning zu integrieren und die Funktionen automatisch zu extrahieren.

Ich habe ein Paket namens pydub verwendet, um MP3 in RAW zu konvertieren. Sie benötigen auch libav oder ffmpeg (das das Audio zu codieren und zu decodieren scheint). Weitere Informationen finden Sie unter Official Github.

$ pip install pydub

#Für Mac
$ brew install libav --with-libvorbis --with-sdl --with-theora

#Für Linux
$ apt-get install libav-tools libavcodec-extra-53

Außerdem funktionierte die offizielle Methode in meiner Ubuntu-Umgebung nicht, sodass ich auf [diesen Artikel] verwies (http://qiita.com/yayugu/items/d7f6a15a6f988064f51c).

Dateien importieren und nach ndarray konvertieren

Definieren wir die folgende Funktion, die ein ndarray mit dem Pfad der MP3-Datei als Argument erstellt.

import numpy as np
from pydub import AudioSegment

def mp3_to_array(file):
    
    #Konvertieren Sie von MP3 nach RAW
    song = AudioSegment.from_mp3(file)
    
    #Konvertierung von RAW in Bytestring-Typ
    song_data = song._data
    
    #Konvertierung von bytestring zu Numpy Array
    song_arr = np.fromstring(song_data, np.int16)
    
    return song_arr

Datensatzvorbereitung

Vorbereitung des Songtags (y)

Lesen wir die zuvor heruntergeladenen Tag-Daten. Beachten Sie auch die folgenden zwei Punkte.

import pandas as pd

tags_df = pd.read_csv('annotations_final.csv', delim_whitespace=True)
tags_df = tags_df.sample(frac=1)
tags_df = tags_df[:3000]

top50_tags = tags_df.iloc[:, 1:189].sum().sort_values(ascending=False).index[:50].tolist()
y =  tags_df[top50_tags].values

Vorbereitung von RAW-Daten (X)

--Verwenden Sie tags_df, da es den Pfad zur MP3-Datei enthält. --X wird in [Samples (Anzahl der Songs), Features, Kanal (diesmal 1)] umgeformt.

files = tags_df.mp3_path.values
X = np.array([ mp3_to_array(file) for file in files ])
X = X.reshape(X.shape[0], X.shape[1], 1)

Vorbereitung von Trainingsdaten und Testdaten

from sklearn.model_selection import train_test_split
random_state = 42

train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.2, random_state=random_state)

Lernen & Testen (7/9 Revision)

Modellbau

Ich habe versucht, Keras zu verwenden. Im Gegensatz zum Originalpapier beträgt die Abmessung von x 465984, sodass wir die Schichten etwas tiefer stapeln.


import keras
from keras.models import Model
from keras.layers import Dense,  Flatten, Input
from keras.layers import Conv1D, MaxPooling1D

features = train_X.shape[1]

x_inputs = Input(shape=(features, 1), name='x_inputs') # (Anzahl der Funktionen,Anzahl der Kanäle)
x = Conv1D(128, 256, strides=256,
           padding='valid', activation='relu') (x_inputs)
x = Conv1D(32, 8, activation='relu') (x) # (Anzahl der Kanäle,Filterlänge)
x = MaxPooling1D(4) (x) #(Filterlänge)
x = Conv1D(32, 8, activation='relu') (x)
x = MaxPooling1D(4) (x)
x = Conv1D(32, 8, activation='relu') (x)
x = MaxPooling1D(4) (x)
x = Conv1D(32, 8, activation='relu') (x)
x = MaxPooling1D(4) (x)
x = Flatten() (x)
x = Dense(100, activation='relu') (x) #(Anzahl der Einheiten)
x_outputs = Dense(50, activation='sigmoid', name='x_outputs') (x)

model = Model(inputs=x_inputs, outputs=x_outputs)
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_X1, train_y, batch_size=600, epochs=50)

Visualisierung des Berechnungsdiagramms

'''Ausgabe an png''' 
from keras.utils.visualize_util import plot
plot(model, to_file="music_only.png ", show_shapes=True)


'''Interaktive Visualisierung'''
from IPython.display import SVG
from keras.utils.visualize_util import model_to_dot
SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))

music_only.png

Prüfung

In der Originalarbeit war es ungefähr AUC: 0,87, aber in diesem Experiment sind es nur 0,66. Da die Stichprobengröße weniger als 1/5 beträgt, ist sie gering. Nehmen wir jedoch an, dass es möglich war, eine gewisse Vorhersage zu treffen, indem die Roh-Audiodaten (und immer noch 30 Sekunden) so wie sie sind eingespeist wurden.

from sklearn.metrics import roc_auc_score
pred_y_x1 = model.predict(test_X1, batch_size=50)
print(roc_auc_score(test_y, pred_y_x1)) # => 0.668582599155

Zusammenfassung

Recommended Posts

Vorhersagen von Tags durch Extrahieren von Musikfunktionen mit Deep Learning
Deep Learning Bildanalyse beginnend mit Kaggle und Keras
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Generiere Pokemon mit Deep Learning
Erkennen Sie Ihren Chef mit Deep Learning und verbergen Sie den Bildschirm
Deep Learning mit Shogi AI auf Mac und Google Colab
HIKAKIN und Max Murai mit Live-Spielvideo und Deep Learning
Identifikation der Katzenrasse mit Deep Learning
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 11
Machen Sie ASCII-Kunst mit tiefem Lernen
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 1-6
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 8
Versuchen Sie es mit TensorFlow Part 2
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 10 6-9
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 5-7
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 9
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 1-2
Organisation von Plattformen für maschinelles Lernen und tiefes Lernen
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Überprüfen Sie die Kniebeugenform mit tiefem Lernen
Kategorisieren Sie Nachrichtenartikel mit Deep Learning
Snack-Umsatzprognose mit Deep Learning
Bringen Sie Menschen mit Deep Learning zum Lächeln
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3 ~ 5
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 9
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 8 5-9
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 8 1-4
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 8
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 1-4
Fügen Sie Ihre eigenen Bilddaten in Deep Learning ein und spielen Sie damit
Realisieren Sie mit Docker und Vagrant die Umgebungskonstruktion für "Deep Learning von Grund auf neu"
Lernen Sie mit Shogi AI Deep Learning auf Mac und Google Colab Verwenden Sie Google Colab
Tiefes Lernen auf Mac- und Google Colab-Wörtern, die mit Shogi AI gelernt wurden
Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2
Klassifizieren Sie Anime-Gesichter mit tiefem Lernen mit Chainer
Einführung in Deep Learning ~ Falten und Pooling ~
Probieren Sie die Bitcoin-Preisprognose mit Deep Learning aus
Versuchen Sie es mit Chainer Deep Q Learning - Launch
Versuchen Sie mit Kipoi tiefes Erlernen der Genomik
Emotionale Analyse von Tweets mit Deep Learning
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Tiefes Lernen
Die Geschichte des tiefen Lernens mit TPU
Chainer und Deep Learning durch Funktionsnäherung gelernt
Ein Memorandum zum Studieren und Implementieren von Deep Learning
99,78% Genauigkeit bei tiefem Lernen durch Erkennen von handgeschriebenem Hiragana
Paralleles Lernen von Deep Learning durch Keras und Kubernetes
Einführung in Deep Learning ~ Lokalisierungs- und Verlustfunktion ~
Musikwiedergabeserver mit NanoPi-NEO, MPD und OLED
"Learning word2vec" und "Visualisierung mit Tensorboard" auf Colaboratory
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV