next up previous contents index
Next: Zusammenfassung Up: Feature Extraktion und Clusterung Previous: Clusterung von Musiksegmenten   Contents   Index


Clusterung von Musikstücken

Basierend auf der Segmentkarte wird eine weitere Karte trainiert. Zur Generierung des Eingabevektorfiles für die Musikstückkarte werden die geometrischen Maße der Segmentkarte als Grundlage genommen. Eine $2 \times 4$ SOM bedeutet, dass ein Vektor der Musikstückkarte $2 \cdot 4 = 8$ Attribute besitzt. Auf der Musikstückkarte ist jedes Musikstück nur genau einmal vertreten, unabhängig von seiner Länge. Die Anzahl der Vektoren der Musikstückkarte ist daher gleich der Anzahl der betrachteten Musikstücke. Die einzelnen Attribute des Eingabevektors werden aufgrund der Lage der Segmente eines Stückes auf der Segmentkarte gebildet. Den Eingabevektor kann man vorerst wie in Ausdruck [*] zur Einfachheit wieder als Tabelle betrachten. Ein Beispiel für einen $2 \times 4$ SOM Eingabevektor zeigt Ausdruck [*].

\begin{displaymath}
\begin{array}{cccc}
l_{1\ 1} & l_{1\ 2} & l_{1\ 3} & l_{1\ 4}\\
l_{2\ 1} & l_{2\ 2} & l_{2\ 3} & l_{2\ 4}\\
\end{array}\end{displaymath} (11)

Auch dieser Vektor muss vor Verwendung im SOM Vektorfile als Zeilenvektor notiert werden, Ausdruck [*].
\begin{displaymath}
l_{1\ 1}\ l_{1\ 2}\ l_{1\ 3}\ l_{1\ 4}\ ,\ l_{2\ 1}\ l_{2\ 2}\ l_{2\ 3}\ l_{2\ 4}
\end{displaymath} (12)

Die einzelnen Komponenten $l$ sind nun keine Fourierkoeffizienten, sondern neue berechnete Werte. Die Berechnung der Komponenten geschieht wie folgt:

Liegen beispielsweise ein Segment desselben Liedes $A$ in der Segmentkarte auf Knoten S(0/1)[*], zwei auf S(1/3), und keines auf den anderen Segmenten, so lautet der Zeilenvektor für die Musikstückkarte für dieses spezielle Stück $(0\ 1\ 0\ 0\ ,\ 0\ 0\ 0\ 2)$. Um die Ergebnisse der Segmentkarte zu verunschärfen, wird zu den unmittelbaren Nachbarn noch ein Wert ($1/4$) hinzugezählt. Somit ergibt sich ein Wert von $1+8\cdot1/4 = 3$, welcher auf insgesamt neun Knoten verteilt wird. Diese Summe bleibt immer gleich. Je besser ein Segment geclustert ist, desto besser wird das Zentrum gewichtet, und desto niedriger die Nachbarn. Ist ein Segment schlecht geclustert, so wird eine breite Streuung bis schließlich zur Gleichgewichtung vorgenommen. In der Implementierung wird der QF, der eine Maßzahl für die Qualität des Mappings ist, benutzt um diese Werte zu berechnen. Vektoren mit niedrigem QF liegen besser auf dem Knoten, als Vektoren mit hohem QF. Diese Streuung wird vorgenommen um nachbarschaftliche Beziehungen zu förden. Durch die Mitgewichtung der Nachbarn werden Gebiete, wo die Segmente eines Liedes direkt nebeneinander liegen aufgewichtet, wodurch Clusterbildung gefördert wird.

Der QF wird durch die euklidische Distanz $d(m,s)$ zwischen dem $n$-dimensionalen Gewichtsvektor $m$ und dem jeweiligen Segmentvektor $s$ auf diesem Knoten S(x/y) gebildet (Ausdruck [*]). Die Ausdrücke $m_{i}$ und $s_{i}$ stehen für die Komponenten der Vektoren $m$ und $s$ in der $i$-ten Dimension.

\begin{displaymath}
QF_{x\ y}(s) = d(m, s) = \sqrt{\sum_{i=1}^{n} \left( m_{i} - s_{i} \right)^{2}}
\end{displaymath} (13)

Ist der QF $QF_{x\ y}(s)$ des derzeit betrachteten Segmentvektors $s$ minimal $min\left[QF_{x\ y}(w)\right]$ auf diesem Knoten, d.h. ist das betrachtete Musiksegment sehr ähnlich bzw. am ähnlichsten dem Gewichtsvektor $m$ des Neurons S(x/y), so wird für dieses Segment selbst $0.9$ hinzugezählt und alle anderen Nachbarn gleichsam um $3-0.9=2.1$ erhöht ($w$ stellt den Segmentvektor mit dem minimalsten QF auf diesem Knoten dar, um das deutlich zu zeigen wird er immer wie folgendermaßen dargestellt: $min\left[QF_{x\ y}(w)\right]$). Das bedeutet, zu jedem der Nachbarn wird $2.1/9=0.2333$ hinzugezählt, was in etwa $1/4$ entspricht. Übersteigt der QF ein gewisses Niveau (ist er siebenmal so groß wie das Minimum auf diesem Knoten), so wird eine Gleichgewichtung vorgenommen. Der Wert des Knotens und der aller Nachbarn wird um $0.3$ erhöht. Die genaue Berechnung der Attribute $u_{x\ y}(v)$ und deren Nachbarn $u_{x \pm 1 \ y \mp 1}(v)$ des neuen Vektors $v$ für die Musikstückkarte ist in Rechnung [*] und [*] gezeigt.

\begin{displaymath}
u_{x\ y}(v) = 1-\frac{\frac{QF_{x\ y}(s)}{min\left[QF_{x\ y}(w)\right]}}{10}
\end{displaymath} (14)


\begin{displaymath}
u_{x \pm 1 \ y \mp 1}(v) = \frac{3 - u_{x\ y}(v)}{9}
\end{displaymath} (15)

$u_{x\ y}(v)$ bezeichnet jenen Wert der auf die Komponente $l_{x\ y}$ des Vektors $v$ (Ausdruck [*]) aufsummiert wird. Um die Komponente $l_{x\ y}$ des Vektors $v$ zu bilden müssen alle $u_{x\ y}(v)$ aufsummiert werden. $u_{x \pm 1 \ y \mp 1}(v)$ steht für die jeweiligen Nachbarn und repräsentiert somit expandiert: $u_{x+1\ y-1}(v)$, $u_{x+1\ y}(v)$, $u_{x+1\ y+1}(v)$, $u_{x\ y-1}(v)$, $u_{x\ y+1}(v)$, $u_{x-1\ y+1}(v)$, $u_{x-1\ y}(v)$, $u_{x-1\ y-1}(v)$.

Zum besseren Verständnis folgt ein weiteres Beispiel: Stück $A$ besitzt folgende Verteilung auf einer $2 \times 4$ SOM: 1 Segment auf S(0/1) mit QF 4 und 2 Segmente auf S(1/3) mit QF 1 und 2. Stück $B$ besitzt ein Segment auf S(0/1) mit QF 1, ein weiteres auf S(0/2) mit QF 3 und noch eines auf S(1/3) mit QF 9. Zuerst wird der minimale QF für jeden Knoten berechnet, Rechnung [*].

\begin{displaymath}
min\left[QF_{x\ y}(w)\right] =
\left(
\begin{array}{cccc}
0 & 1 & 3 & 0 \\
0 & 0 & 0 & 1 \\
\end{array}\right)
\end{displaymath} (16)

Nun wird Vektor $b$ mittels Formel [*] und [*] berechnet.

Für S(0/1):

$\displaystyle u_{0\ 1}(b) = 1-\frac{\frac{1}{1}}{10} = 0.9$      
$\displaystyle u_{0 \pm 1 \ 1 \mp 1}(b) = \frac{3 - 0.9}{9}=0.2333$     (17)

Wie aus Rechnung [*] hervorgeht, wird zum Attribut (0/1) im Vektor für die Musikstückkarte $0.9$ und für die Nachbarn (0/0), (1/0), (1/1), (1/2), (0/2) je $0.2333$ hinzugezählt.

Für S(0/2):

$\displaystyle u_{0\ 2}(b) = 1-\frac{\frac{3}{3}}{10} = 0.9$      
$\displaystyle u_{0 \pm 1 \ 2 \mp 1}(b) = \frac{3 - 0.9}{9}=0.2333$     (18)

Wie aus Rechnung [*] hervorgeht, wird zum Attribut (0/2) im Vektor für die Musikstückkarte $0.9$ und für die Nachbarn (0/1), (1/1), (1/2), (1/3), (0/3) je $0.2333$ hinzugezählt.

Für S(1/3):

$\displaystyle u_{1\ 3}(b) = 1-\frac{\frac{9}{1}}{10} = 0.1$      
$\displaystyle u_{1 \pm 1 \ 3 \mp 1}(b) = \frac{3 - 0.1}{9}=0.3222$     (19)

Rechnung [*] hätte man nicht durchführen müssen, da der QF siebenmal größer ist als das Minimum. Die Vektorkomponenten der Knoten (1/3), (1/2), (0/2), (0/3) werden daher alle um $0.3$ erhöht.

Vektor $b$ für die Musikstückkarte lautet somit wie im Ausdruck [*].

\begin{displaymath}
u(b) =
\left(
\begin{array}{cccc}
0.2333 & 1.1333 & 1.4333 &...
...3 \\
0.2333 & 0.4666 & 0.7666 & 0.5333 \\
\end{array}\right)
\end{displaymath} (20)

Um die Länge der Stücke zu nivellieren werden die resultierenden Vektoren auf Länge 1 normiert.

Nun wird wiederum eine SOM mit diesen Vektoren trainiert. Das Resultat ist eine Karte, auf der jedes Musikstück nur genau einmal vorkommt. Auf der Segmentkarte ähnlich verteilte Musikstücke liegen in benachbarten Bereichen, während Stücke mit einer völlig anderen Verteilung in anderen Bereichen zu finden sind. Natürlich werden nicht nur Stücke deren Segmente alle auf einem Cluster liegen auf einen gemeinsamen Bereich gemappt, sondern auch solche, die ähnliche Sprungverhalten zeigen, z.B. zwischen zwei Clustern hin und her springen (Strophe und Refrain).


next up previous contents index
Next: Zusammenfassung Up: Feature Extraktion und Clusterung Previous: Clusterung von Musiksegmenten   Contents   Index
Markus Fruehwirth
2001-03-30