Einführung
Wenn es mit Data Science beginnt, fängt einfach an. Du gehst durch einfache Projekte wie Problem mit der Kreditvorhersage Ö Big Mart-Verkaufsprognose. Diese Probleme haben strukturierte Daten, die sauber in einem Tabellenformat angeordnet sind. Mit anderen Worten, Sie werden mit dem schwierigsten Teil in der Data Science-Pipeline gefüttert.
Datensätze im wirklichen Leben sind viel komplexer.
Du musst es zuerst verstehen, Sammeln Sie es aus verschiedenen Quellen und organisieren Sie es in einem Format, das zur Verarbeitung bereit ist. Dies ist noch schwieriger, wenn die Daten in einem unstrukturierten Format vorliegen, als Bild oder Ton. Dies liegt daran, dass es Bilddaten darstellen müsste / Audio auf Standard-Weise, um für die Analyse nützlich zu sein.
Die Fülle an unstrukturierten Daten
neugierig, unstrukturierte Daten stellen eine große ungenutzte Chance dar. Es ist näher an der Art und Weise, wie wir als Menschen kommunizieren und interagieren. Es enthält auch viele nützliche und leistungsstarke Informationen. Zum Beispiel, wenn eine Person spricht; du verstehst nicht nur was es sagt, aber auch was waren die Emotionen der Person aus der Stimme.
Was ist mehr, Die Körpersprache der Person kann dir viele weitere Eigenschaften einer Person zeigen, Denn Taten sagen mehr als Worte! Zusammenfassend, unstrukturierte Daten sind komplex, aber ihre Verarbeitung kann leichte Belohnungen bringen.
In diesem Artikel, Ich beabsichtige, einen Überblick über die Audioverarbeitung zu geben / Stimme mit einer Fallstudie, damit Sie eine praktische Einführung in die Fehlerbehebung bei der Audioverarbeitung erhalten.
Lass uns weitermachen!
Inhaltsverzeichnis
- Was meinst du mit Audiodaten??
- Audioverarbeitungsanwendungen
- Datenhandling im Audiobereich
- Lassen Sie uns die UrbanSound-Herausforderung lösen!!
- Dazwischenliegend: unsere erste Präsentation
- Lass uns die Herausforderung lösen! Teil 2: Bessere Modelle bauen
- Zukünftige Schritte zum Erkunden
Was meinst du mit Audiodaten??
Direkt oder indirekt, du bist immer in kontakt mit dem audio. Dein Gehirn verarbeitet und versteht kontinuierlich Audiodaten und liefert dir Informationen über die Umgebung. Ein einfaches Beispiel können Ihre täglichen Gespräche mit Menschen sein.. Diese Rede wird von der anderen Person wahrgenommen, um die Diskussionen fortzusetzen. Auch wenn Sie denken, dass Sie sich in einer ruhigen Umgebung befinden, neigt dazu, viel subtilere Geräusche aufzunehmen, wie das Rascheln von Blättern oder das Spritzen von Regen. Dies ist der Umfang Ihrer Verbindung zu Audio.
Dann, Kannst du dieses Audio irgendwie fangen, das um dich herum schwebt, um etwas Konstruktives zu tun?? Jawohl, Natürlich! Es gibt eingebaute Geräte, mit denen Sie diese Geräusche aufnehmen und in einem computerlesbaren Format darstellen können.. Beispiele für diese Formate sind
- wav-Format (Waveform-Audiodatei)
- format mp3 (MPEG-1-Audioebene 3)
- WMA-Format (Windows Media-Audio)
Wenn Sie darüber nachdenken, wie ein Audio aussieht, es ist nichts anderes als ein Wellenform-Datenformat, wo sich die Amplitude des Audios in Bezug auf die Zeit ändert. Dies lässt sich bildlich wie folgt darstellen.
Audioverarbeitungsanwendungen
Obwohl wir anmerken, dass die Audiodaten für die Analyse nützlich sein können. Aber, Was sind die möglichen Anwendungen der Audioverarbeitung?? Hier würde ich einige davon auflisten.
- Indizierung von Musiksammlungen anhand ihrer Audioeigenschaften.
- Empfehlen Sie Musik für Radiosender
- Finden von Ähnlichkeiten für Audiodateien (auch bekannt als Shazam)
- Sprachverarbeitung und -synthese: künstliche Spracherzeugung für Konversationsagenten
Hier ist eine Übung; Können Sie sich eine Audioverarbeitungs-App vorstellen, die potenziell Tausenden von Leben helfen kann??
Datenhandling im Audiobereich
Wie bei allen unstrukturierten Datenformaten, Audiodaten haben einige Vorverarbeitungsschritte, die befolgt werden müssen, bevor sie zur Analyse präsentiert werden. Wir werden dies in einem späteren Artikel ausführlich behandeln., hier bekommen wir einen Einblick, warum das so gemacht wird.
Der erste Schritt besteht darin, die Daten in einem maschinenverständlichen Format zu laden. Dafür, wir nehmen nur Werte nach jedem bestimmten Zeitschritt. Zum Beispiel; in einer Audiodatei von 2 Sekunden, wir extrahieren Werte in einer halben Sekunde. Benannt Audiodaten-Sampling, und die Rate, mit der es abgetastet wird, heißt Abtastrate.
Eine andere Möglichkeit, Audiodaten darzustellen, besteht darin, sie in eine andere Datendarstellungsdomäne zu konvertieren, nämlich, der Frequenzbereich. Wenn wir Audiodaten abtasten, wir brauchen viel mehr Datenpunkte, um alle Daten darzustellen und, was ist mehr, die Abtastfrequenz sollte so hoch wie möglich sein.
Zweitens, wenn wir Audiodaten darstellen in Frequenzbereich, viel weniger Rechenplatz benötigt. Eine Intuition haben, schau dir das Bild unten an.
Hier, Wir trennen ein Audiosignal in 3 verschiedene reine Signale, die sich nun als drei eindeutige Werte im Frequenzbereich darstellen lassen.
Es gibt noch einige weitere Möglichkeiten, wie Audiodaten dargestellt werden können, zum Beispiel. mit MFC (Honigfrequenz-Kepstrume. PD: Wir werden dies im späteren Artikel behandeln.). Dies sind nur verschiedene Arten der Darstellung der Daten.
Jetzt, Der nächste Schritt besteht darin, Funktionen aus diesen Audiodarstellungen zu extrahieren, damit unser Algorithmus an diesen Eigenschaften arbeiten und die Aufgabe erfüllen kann, für die er entwickelt wurde. Dann, eine visuelle Darstellung der Kategorien von Audiofunktionen, die extrahiert werden können, wird angezeigt.
Nach dem Extrahieren dieser Funktionen, zur weiteren Analyse an das Machine-Learning-Modell gesendet.
Lassen Sie uns die UrbanSound-Herausforderung lösen!!
Verschaffen wir uns einen besseren praktischen Überblick über ein reales Projekt, das Urban Sound Challenge. Diese Übungsaufgabe soll Sie in die Audioverarbeitung im typischen Klassifikationsszenario einführen.
Der Datensatz enthält 8732 Tonausschnitte (<= 4 S) von urbanen Klängen von 10 Lektionen, nämlich:
- Klimaanlage,
- Horn,
- Kinder spielen,
- Hundebellen,
- Bohren,
- Motorleerlauf,
- Gewehrschuss
- Drucklufthammer,
- Meerjungfrau und
- Straßenmusik
Hier ist ein Soundauszug aus dem Datensatz. Kannst du erraten, zu welcher Klasse es gehört??
Um dies in Jupyters Notizbuch zu reproduzieren, du kannst einfach dem Code folgen.
IPython.display als ipd importieren ipd.Audio('../data/Train/2022.wav')
Jetzt laden wir dieses Audio als große Matrix in unseren Laptop. Dafür verwenden wir Bücher Python-Bibliothek. Bücher installieren, Geben Sie dies einfach in die Befehlszeile ein
pip install librosa
Jetzt können wir den folgenden Code ausführen, um die Daten zu laden.
Daten, Abtastrate = librosa.load('../data/Train/2022.wav')
Wenn Sie die Daten laden, gibt dir zwei Objekte; ein großes Array einer Audiodatei und die entsprechende Samplerate, mit der sie extrahiert wurde. Jetzt, um dies als Wellenform darzustellen (was ist ursprünglich), Verwenden Sie den folgenden Code
% pylab inline Importieren von OS Pandas als pd importieren Librosa importieren Globus importieren plt.figur(Feigengröße=(12, 4)) librosa.display.waveplot(Daten, sr=sampling_rate)
Die Ausgabe sieht wie folgt aus
Lassen Sie uns nun unsere Daten visuell untersuchen und sehen, ob wir Muster in den Daten finden können..
Klasse: PresslufthammerKlasse: Bohren
Klasse: Hundebellen
Wir sehen, dass es schwierig sein kann, zwischen Drucklufthammer und Bohren zu unterscheiden, aber es ist immer noch leicht zwischen Hundegebell und Piercing zu unterscheiden. Um weitere Beispiele dieses Typs zu sehen, Sie können diesen Code verwenden
i = random.choice(train.index) audio_name = train.ID[ich] path = os.path.join(data_dir, 'Bahn', str(audio_name) + '.wav') drucken('Klasse: ', train.Klasse[ich]) x, sr = librosa.load('../daten/Zug/' + str(Zug.ID[ich]) + '.wav') plt.figur(Feigengröße=(12, 4)) librosa.display.waveplot(x, sr=sr)
Dazwischenliegend: unsere erste Präsentation
Wir werden einen ähnlichen Ansatz wie für das Problem der Alterserkennung anwenden, um die Klassenverteilungen zu sehen und nur das maximale Auftreten aller Testfälle als diese Klasse vorherzusagen.
Schauen wir uns die Verteilungen für dieses Problem an.
train.Class.value_counts()
aus[10]: Presslufthammer 0.122907 Motor im Leerlauf 0.114811 Sirene 0.111684 dog_bark 0.110396 Klimaanlage 0.110396 Kinder spielen 0.110396 Straßenmusik 0.110396 Bohren 0.110396 auto_horn 0.056302 Schuss 0.042318
Wir sehen, dass die Klasse der Drucklufthammer mehr Werte hat als jede andere Klasse. Lassen Sie uns also unsere erste Präsentation mit dieser Idee erstellen.
test = pd.read_csv('../data/test.csv') Prüfung['Klasse'] = 'Presslufthammer' test.to_csv('sub01.csv', index=Falsch)
Dies scheint eine gute Idee als Maßstab für jede Herausforderung zu sein, aber für dieses problem, scheint ein bisschen unfair. Dies liegt daran, dass der Datensatz nicht sehr unausgewogen ist.
Lass uns die Herausforderung lösen! Teil 2: Bessere Modelle bauen
Sehen wir uns nun an, wie wir die zuvor erlernten Konzepte nutzen können, um das Problem zu lösen.. Wir werden diese Schritte befolgen, um das Problem zu beheben.
Paso 1: Audiodateien hochladen
Paso 2: Funktionen aus Audio extrahieren
Paso 3: Konvertieren von Daten, um sie in unser Deep-Learning-Modell zu übertragen
Paso 4: Führen Sie ein Deep-Learning-Modell aus und erhalten Sie Ergebnisse
Unten ist ein Code, wie ich diese Schritte implementiert habe
Paso 1 Ja 2 kombiniert: Audiodateien laden und Funktionen extrahieren
def Parser(Reihe): # function to load files and extract features file_name = os.path.join(os.path.abspath(data_dir), 'Bahn', str(Zeilen.ID) + '.wav') # handle exception to check if there isn't a file which is corrupted try: # here kaiser_fast is a technique used for faster extraction X, sample_rate = librosa.load(Dateiname, res_type="kaiser_fast") # we extract mfcc feature from data mfccs = np.mean(librosa.feature.mfcc(y = X, sr=sample_rate, n_mfcc=40).T,Achse=0) außer Ausnahme als e: drucken("Beim Parsen der Datei ist ein Fehler aufgetreten: ", Datei) return Keine, None feature = mfccs label = row.Class return [Besonderheit, Etikett] temp = train.apply(Parser, Achse=1) temp.spalten = ['Besonderheit', 'Etikett']
Paso 3: Konvertieren von Daten, um sie in unser Deep-Learning-Modell zu übertragen
aus sklearn.preprocessing import LabelEncoder X = np.array(temp.feature.tolist()) y = np.array(temp.label.tolist()) lb = LabelEncoder() y = np_utils.to_categorical(lb.fit_transform(Ja))
Paso 4: Führen Sie ein Deep-Learning-Modell aus und erhalten Sie Ergebnisse
numpy als np importieren von keras.models importieren Sequential aus keras.layers importieren dicht, Aussteigen, Aktivierung, Ebnen aus keras.layers importieren Sie Convolution2D, MaxPooling2D von keras.optimizers importieren Adam aus keras.utils importieren np_utils von sklearn Importmetriken num_labels = y.shape[1] filter_size = 2 # Modell bauen Modell = Sequentiell() model.add(Dicht(256, input_shape=(40,))) model.add(Aktivierung('relu')) model.add(Aussteigen(0.5)) model.add(Dicht(256)) model.add(Aktivierung('relu')) model.add(Aussteigen(0.5)) model.add(Dicht(num_labels)) model.add(Aktivierung('softmax')) model.compile(Verlust="kategoriale_Kreuzentropie", Metriken=['Richtigkeit'], Optimierer="Adam")
Jetzt trainieren wir unser Modell
model.fit(x, Ja, batch_size=32, Epochen=5, Validation_data=(val_x, val_y))
Das ist das Ergebnis, das ich während des Trainings bekommen habe 5 Epochen
Trainieren auf 5435 Proben, validieren an 1359 Proben Epoche 1/10 5435/5435 [==============================] - 2S - Verlust: 12.0145 - acc: 0.1799 - Wertverlust: 8.3553 - val_acc: 0.2958 Epoche 2/10 5435/5435 [==============================] - 0S - Verlust: 7.6847 - acc: 0.2925 - Wertverlust: 2.1265 - val_acc: 0.5026 Epoche 3/10 5435/5435 [==============================] - 0S - Verlust: 2.5338 - acc: 0.3553 - Wertverlust: 1.7296 - val_acc: 0.5033 Epoche 4/10 5435/5435 [==============================] - 0S - Verlust: 1.8101 - acc: 0.4039 - Wertverlust: 1.4127 - val_acc: 0.6144 Epoche 5/10 5435/5435 [==============================] - 0S - Verlust: 1.5522 - acc: 0.4822 - Wertverlust: 1.2489 - val_acc: 0.6637
Scheint in Ordnung zu sein, aber natürlich kannst du die Punktzahl erhöhen. (PD: könnte Präzision von 80% in meinem Validierungsdatensatz). Jetzt bist du dran, Können Sie diese Punktzahl erhöhen?? Wenn ja, Lass es mich in den Kommentaren unten wissen!!
Zukünftige Schritte zum Erkunden
Nachdem wir nun einfache Anwendungen gesehen haben, wir können uns weitere Methoden einfallen lassen, die uns helfen können, unsere Punktzahl zu verbessern.
- Wir wenden ein einfaches neuronales Netzmodell auf das Problem an. Unser nächster unmittelbarer Schritt sollte sein verstehen, wo das Modell versagt und warum. Mit diesem, Wir möchten unser Verständnis von Algorithmusfehlern konzeptualisieren, damit wir das nächste Mal ein Modell erstellen, mach nicht die gleichen fehler.
- Wir können bauen effizientere Modelle dass unsere “beste Modelle”, wie konvolutionelle neuronale Netze oder rekurrente neuronale Netze. Es hat sich gezeigt, dass diese Modelle diese Art von Problemen leichter lösen.
- Wir haben das Konzept von berührt Datenerweiterung, aber wir wenden sie hier nicht an. Sie können es versuchen, um zu sehen, ob es für das Problem funktioniert.
Abschließende Anmerkungen
In diesem Artikel, Ich habe einen kurzen Überblick über die Audioverarbeitung mit einer Fallstudie zur UrbanSound-Challenge gegeben. Ich habe auch die Schritte gezeigt, die Sie beim Umgang mit Audiodaten in Python mit den Paketbüchern ausführen. Mit diesem “shastra” in deiner Hand, Ich hoffe, Sie können Ihre eigenen Algorithmen in der Urban Sound Challenge testen, oder versuchen Sie, Ihre eigenen Audioprobleme im täglichen Leben zu lösen. Wenn Sie Vorschläge haben / Idee, lass es mich in den Kommentaren unten wissen.
Lernen, anheuern , hacken und angestellt werden!
Podcast: In neuem Fenster spielen | Descargar