Skip to content

Commit 71354c9

Browse files
Merge pull request #14 from schuler-henry/10-create-statistic
Updated Chapters, added Validierung + Ausblick.
2 parents 3a6fb19 + 328b00c commit 71354c9

19 files changed

+544
-30
lines changed

chapter/Ausblick.tex

+26-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,26 @@
1-
\section{Kritische Reflexion und Ausblick}\label{sec:Ausblick}
1+
\section{Kritische Reflexion und Ausblick}\label{sec:Ausblick}
2+
In dieser Arbeit wurde ein lineares Verfahren entwickelt, welches Audiodateien zunächst in vier sequenziellen Schritten vorverarbeitet und anschließend in \ac{LPC} Koeffizienten umrechnet.
3+
Der theoretische Ansatz hinter der \ac{LPC} Berechnung zeigte dabei bereits ein hohes Potenzial der Koeffizienten für die Verwendung im Kontext Benutzerauthentifizierung.
4+
5+
Im Rahmen der Implementierung der vorgestellten Verfahren wurde auf einen Modularen Ansatz gesetzt, der eine Erweiterung des entwickelten Programms um verschiedene Verfahren der Koeffizientenberechnung ermöglicht, wodurch dieses als Basis für die anschließende Studienarbeit verwendet werden kann.
6+
Gleichzeitig können relevante Größen wie die Länge der zu erstellenden Frames oder die Anzahl zu berechnender Koeffizienten als Parameter den entsprechenden Funktionen übergeben werden, wodurch eine hohe Flexibilität erreicht wird.
7+
8+
Die abschließende Validierung der Ergebnisse dieser Arbeit bestätigen die in der Einleitung getroffene These.
9+
Mit einer Genauigkeit von 70,54 Prozent konnte das trainierte \ac{NN} neue Stimmaufzeichnungen den korrekten Sprechern zuordnen.
10+
Es besteht somit ein klarer Zusammenhang zwischen den berechneten Koeffizienten und der sprechenden Person.
11+
Gleichzeitig konnte aus den begrenzten Testdaten festgestellt werden, dass der korrekte Sprecher im Durchschnitt 4,7 Mal so oft gegenüber dem Sprecher mit den zweitmeisten Vorhersagen zugeordnet wird.
12+
\newline
13+
\newline
14+
Im Kontext der anschließenden Studienarbeit zeigen die Ergebnisse, dass die \ac{LPC} Koeffizienten gewinnbringend für die Authentifizierung von Sprechern sind.
15+
Diese Arbeit bietet somit verschiedene Ansätze, die im Rahmen der Studienarbeit aufgefasst und vertieft werden können.
16+
17+
Durch Anpassungen der Koeffizienten-Zusammensetzung kann untersucht werden, ob die Genauigkeit des \ac{NN} verbessert werden kann.
18+
Dies bezieht sich insbesondere auf die Faktoren Vorhersagegenauigkeit und Fehlerrate des \ac{NN}.
19+
20+
Neben der Koeffizienten-Zusammensetzung kann der Fokus ebenfalls auf den Aufbau des \ac{NN} gelegt werden.
21+
Das in dieser Arbeit verwendete Netz beschreibt einen standard-Aufbau eines \ac{NN} und ist somit nicht für die Sprecherauthentifizierung optimiert.
22+
Es kann untersucht werden, inwiefern eine Veränderung der Schichtgrößen, sowie der allgemeinen Struktur zu einer Verbesserung der Vorhersagegenauigkeit und Fehlerrate führt.
23+
24+
Als dritte Option besteht die Möglichkeit der Erweiterung des entwickelten \ac{LPC} Verfahrens.
25+
Durch weitere Rechenschritte können \ac{LPC} Koeffizienten in \ac{LPCC} umgerechnet werden.
26+
Im Rahmen einer Anschlussarbeit kann evaluiert werden, ob die Umrechnung in \ac{LPCC} zu einer Verbesserung der Sprecherauthentifizierung führt.

chapter/Einleitung.tex

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
\section{Einleitung}\label{sec:Einleitung}
2-
Im Rahmen des Informatikstudiums an der \ac{DHBW} Ravensburg muss im dritten Studienjahr eine Studienarbeit abgelegt werden.
2+
Im Rahmen des Informatikstudiums an der \acp{DHBW} Ravensburg muss im dritten Studienjahr eine Studienarbeit abgelegt werden.
33
Die Hochschule stellt dafür eine Auswahl an Themen zur Verfügung.
44
Eines dieser Themen beschäftigt sich mit der Problematik der Sprecherauthentifizierung, wobei es Nutzern ermöglicht werden soll, sich über ihre Stimme zu authentifizieren.
55
In dieser Arbeit sollen die Grundlagen für die Bearbeitung dieser Studienarbeit behandelt werden.

chapter/TechnischeUmsetzung.tex

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ \section{Technische Umsetzung}\label{sec:TechnischeUmsetzung}
22
% TODO: Optional: Quellen hinzufügen wenn Platz vorhanden ist.
33
Da die Zuordnung der erzeugten \ac{LPC} Koeffizienten zu einem spezifischen Sprecher mittels eines \acp{NN} umgesetzt wird, wird auf die Programmiersprache Python zurückgegriffen.
44
Diese ermöglicht die Verwendung des von Google entwickelten Machine Learning Frameworks TensorFlow.
5-
Folglich findet auch die Implementierung der Signalvorverarbeitung, sowie der \ac{LPC} Berechnung mit Hilfe der Sprache Python statt.
5+
Folglich findet auch die Implementierung der Signalvorverarbeitung, sowie die \ac{LPC} Berechnung mit Hilfe der Sprache Python statt.
66

77
Um Programmierfehler zu vermeiden, sowie die Effizienz des Codes zu erhöhen, werden Funktionen aus verschiedenen Bibliotheken verwendet.
88
Als Basis wird die Bibliothek \textKlasse{numpy} verwendet, welche Funktionen für die Bearbeitung von Arrays und Matrizen bereitstellt, sowie die Bibliothek \textKlasse{librosa} für Audio spezifische Funktionen wie das Laden von WAV Dateien.
@@ -17,9 +17,9 @@ \subsection{Klasse AudioPreprocessor}
1717
\subsection{Klasse FeatureExtractor}
1818
Mit Blick auf die an diese Arbeit folgende Studienarbeit wird für die Implementierung der Koeffizientenberechnung ein Ansatz gewählt, der eine einfache Erweiterung des Programms um verschiedene andere Verfahren wie etwa \ac{MFCC} ermöglicht.
1919
Dazu wird das Design Pattern Strategie in abgewandelter Form verwendet, wobei zunächst ein Interface für die Berechnungsverfahren erstellt werden muss (vgl. Quellcode~\ref{code:ExtractorInterface}).
20-
Dieses definiert die Funktion \textFunktion{calculateFeatures}, welche in den abgeleiteten Klassen implementiert wird.
20+
Dieses definiert die Funktion \textFunktion{calculate\_features}, welche in den abgeleiteten Klassen implementiert wird.
2121
Die Klasse \textKlasse{LPCExtractor} (vgl. Quellcode~\ref{code:LPCExtractor}) nutzt hierfür die von der Bibliothek \textKlasse{librosa} bereitgestellt Funktion \textFunktion{lpc} um für die übergebenen Frames die zugehörigen \ac{LPC} Koeffizienten zu berechnen und anschließend zurückzugeben.
22-
Der \ac{LPC} Koeffizienten nullter Ordnung wird dabei von der Funktion standardmäßig mit der Zahl eins befüllt und ist kein Teil der berechneten \ac{LPC}-Ordnung, weshalb dieser manuell entfernt werden muss (vgl. Z.~\ref{line:removeLPC0}).
22+
Der \ac{LPC} Koeffizient nullter Ordnung wird dabei von der Funktion standardmäßig mit der Zahl eins befüllt und ist kein Teil der berechneten \ac{LPC}-Ordnung, weshalb dieser manuell entfernt werden muss (vgl. Z.~\ref{line:removeLPC0}).
2323

2424
Die Klasse \textKlasse{FeatureExtractor} (vgl. Quellcode~\ref{code:FeatureExtractor}) implementiert die Funktion \textFunktion{ex\-tract\-\_features}, welcher über den Parameter \textVariable{feature\_list} eine genaue Anweisung über die zu berechnenden Koeffizienten übergeben werden kann (vgl. Z.~\ref{line:extract_features}).
2525
Dabei kann im Speziellen eine Angabe zu der Art der Koeffizienten, der Anzahl an zu berechnenden Koeffizienten, sowie der zusätzlich zu berechnenden Ableitungs-Ordnungen übergeben werden (vgl. Z.~\ref{line:feature_list_info}).

chapter/Validierung.tex

+73
Original file line numberDiff line numberDiff line change
@@ -1 +1,74 @@
11
\section{Validierung}\label{sec:Validierung}
2+
Damit sichergestellt werden kann, dass die in dieser Arbeit erarbeitete Parametrisierung von Stimmaufzeichnungen eine Aussage über die jeweilige sprechende Person ermöglicht, muss der Zusammenhang zwischen den berechneten \ac{LPC} Koeffizienten und der sprechenden Person gezeigt werden.
3+
Dies erfolgt in der Klasse \textKlasse{FeatureEvaluator} (vgl. Quellcode~\ref{code:FeatureEvaluator}).
4+
5+
Hierfür wird wie bereits eingangs erwähnt ein einfaches \ac{NN} mit Hilfe der Python-Bibliothek \textKlasse{tensorflow} trainiert.
6+
Das \ac{NN} besteht dabei aus einem Input-Layer mit 30 * 12 Features = 360 Neuronen, zwei Hidden-Layern mit je 16 Neuronen, sowie einem Output-Layer (vgl. Z.~\ref{line:NNStart}-\ref{line:NNEnd}).
7+
Da im Output-Layer für jede Sprecher-ID ein Neuron erstellt wird, passt sich die Anzahl der Neuronen an die höchste verwendete Sprecher-ID an (vgl. Z.~\ref{line:NNOutput}).
8+
\newline
9+
\newline
10+
Als Datengrundlage kommt ein von Vibhor Jain erstellter Datensatz zum Einsatz, welcher auf der Internetseite kaggle.com zur Verfügung steht und Audio-Datensätze zu 50 unterschiedlichen Sprechern bereitstellt \autocite[vgl.][]{vibhor_jain_speaker_2019}.
11+
Für jeden Sprecher existieren dabei Aufzeichnungen mit einer Dauer von bis zu einer Stunde, welche in einminütige WAV-Dateien heruntergebrochen wurden.
12+
Die Dateien mit Index null bis einschließlich 14 jedes Sprechers werden zum Training des \ac{NN} verwendet.
13+
Alle Dateien ab Index 15 können somit zum Testen des \ac{NN} verwendet werden.
14+
15+
Für die Generierung der Trainingsdaten für das \ac{NN} wird der in Kapitel~\ref{sec:TechnischeUmsetzung} beschriebene Ablauf durchgeführt.
16+
Dabei wird eine Blockgröße von 500 Samples mit einer Überlappung von 100 Samples gewählt.
17+
Für die Personen 21 bis 30 werden je 1000 Chunks bestehend aus jeweils 30 aufeinanderfolgenden Frames generiert.
18+
Da für jeden Frame zwölf Koeffizienten berechnet werden, enthält jeder Chunk somit 360 \ac{LPC} Werte.
19+
Für eine einfach skalierbare Erstellung des Datensatzes wird die Funktion \textFunktion{create\_dataset} (vgl. Z.~\ref{line:createDatasetStart}-\ref{line:createDatasetEnd}) verwendet, welche neben dem erstellten Datensatz eine weitere Liste, die die Zuordnung des Datensatzes zu der Sprecher-ID enthält, zurückgibt.
20+
21+
Bevor die Trainingsdaten nun für das Training des \ac{NN} verwendet werden, werden diese gemischt, um ein besseres Trainings-Ergebnis zu erzielen (vgl. Z.~\ref{line:shuffle}).
22+
\newline
23+
\newline
24+
Für die Evaluation des trainierten Modells, wird ein Test-Datensatz nach dem selben Verfahren aus den Dateien ab Index 15 für die Personen 21 bis 30 erstellt.
25+
Somit wird zunächst sichergestellt, dass es sich bei den Testdaten um unbekannte Werte für das \ac{NN} handelt.
26+
27+
Mit der Funktion \textFunktion{evaluate\_model} (vgl. Z.~\ref{line:evaluateModelStart}-\ref{line:evaluateModelEnd}) kann nun die Genauigkeit, sowie die Fehlerrate des \ac{NN} ermittelt werden.
28+
Der in dieser Arbeit verwendete Test-Datensatz wurde von dem Modell zu 70,54 Prozent korrekt vorhergesagt, bei einer Fehlerrate von 5,47.
29+
Die Fehlerrate berechnet sich dabei nach dem categorical crossentropy Verfahren.
30+
31+
\begin{table}
32+
\centering
33+
\begin{tabular}{|cc*{10}{|r}|}
34+
\hline
35+
\multicolumn{2}{|c|}{}&\multicolumn{10}{c|}{\textsf{Testdaten Sprecher ID}}\\
36+
& & \textbf{21} & \textbf{22} & \textbf{23} & \textbf{24} & \textbf{25} & \textbf{26} & \textbf{27} & \textbf{28} & \textbf{29} & \textbf{30} \\
37+
\hline
38+
& \textbf{21} & \textbf{437} & 3 & \underline{233} & \underline{229} & 31 & 0 & 0 & 0 & 1 & 0 \\
39+
& \textbf{22} & 2 & \textbf{560} & 0 & 0 & 0 & 11 & 22 & 74 & 22 & 39 \\
40+
& \textbf{23} & \underline{258} & 0 & \textbf{701} & 15 & 24 & 0 & 0 & 0 & 0 & 0 \\
41+
& \textbf{24} & 257 & 0 & 33 & \textbf{743} & \underline{ 33} & 0 & 0 & 0 & 0 & 0 \\
42+
& \textbf{25} & 46 & 12 & 33 & 13 & \textbf{912} & 0 & 0 & 0 & 0 & 0 \\
43+
& \textbf{26} & 0 & 47 & 0 & 0 & 0 & \textbf{535} & \underline{193} & 25 & 37 & 40 \\
44+
& \textbf{27} & 0 & 64 & 0 & 0 & 0 & 142 & \textbf{771} & 1 & 10 & 3 \\
45+
& \textbf{28} & 0 & \underline{146} & 0 & 0 & 0 & 136 & 5 & \textbf{779} & 59 & \underline{ 83} \\
46+
& \textbf{29} & 0 & 67 & 0 & 0 & 0 & \underline{154} & 6 & 37 & \textbf{796} & 15 \\
47+
\smash{%
48+
\lower\dimexpr\dp\csname @arstrutbox\endcsname-\dp\strutbox+\arrayrulewidth\relax
49+
\hbox{\rotatebox[origin=bl]{90}{%
50+
\textsf{%
51+
%\fboxsep=-\fboxrule
52+
%\fbox{%
53+
\parbox[b]{\dimexpr 10\dp\csname @arstrutbox\endcsname+10\ht\csname @arstrutbox\endcsname\relax}{%
54+
\centering
55+
\strut Zugeordnete Sprecher ID\strut
56+
}%
57+
%}%
58+
}%
59+
}}%
60+
}%
61+
& \textbf{30} & 0 & 101 & 0 & 0 & 0 & 22 & 5 & \underline{ 84} & \underline{ 75} & \textbf{820} \\
62+
\hline
63+
\hline
64+
\multicolumn{2}{|c|}{\textbf{Abstand zu 2}} & 179 & 414 & 468 & 514 & 879 & 381 & 578 & 695 & 721 & 737\\
65+
\hline
66+
\end{tabular}
67+
\caption{Modell Vorhersagen für 1000 Testdaten pro Sprecher}
68+
\label{tab:ModellPredictions}
69+
\end{table}
70+
71+
Betrachtet man die Vorhersagen des Modells mittels der Funktion \textFunktion{predict} (vgl. Z.~\ref{line:predictStart}-\ref{line:predictEnd}) genauer, ergibt sich die in Tabelle~\ref{tab:ModellPredictions} dargestellte Verteilung.
72+
Es ist zu erkennen, dass das Modell jeden Sprecher korrekt vorhergesagt hat, wobei die Zuversichtlichkeit im schlechtesten Fall 43,7 und im besten Fall 91,2 Prozent beträgt.
73+
Zwischen dem Vorhergesagten Sprecher (fett) sowie dem Sprecher mit den zweitmeisten Vorhersagen (unterstrichen) liegt dabei im Durchschnitt ein Abstand von 55,7 Prozentpunkten.
74+
Relativ betrachtet wird der korrekte Sprecher im Durchschnitt 4,7 Mal so oft wie der Sprecher mit den zweitmeisten Vorhersagen zugeordnet.
Binary file not shown.

code/DatasetHandler/DatasetHandler.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import os
2+
3+
class DatasetHandler:
4+
def __init__(self, base_path) -> None:
5+
self.base_path = base_path
6+
7+
def get_speaker_file_path(self, speaker_index, file_index):
8+
return os.path.join(self.base_path, f"Speaker{speaker_index:04}", f"Speaker{speaker_index:02}_{file_index:04}.wav")
Binary file not shown.

0 commit comments

Comments
 (0)