Ich arbeite mit einem Pattern-Matching-Algorithmus, der einen azyklischen Finite-State-Automaten generiert, der eine bestimmte Textzeichenfolge und alle ihre Teilzeichenfolgen akzeptiert. Der FSA-Algorithmus wird auf einer symbolischen Darstellung eines Musikstroms (z. B. MIDI-Daten) ausgeführt. Der Musikstrom wurde vorverarbeitet, um jedes Lied in unbeschriftete "Segmente" zu unterteilen. Für jedes Segment in jedem Song wird eine FSA generiert: Wenn ich Songs habe, die jeweils in y Segmente unterteilt sind, habe ich n ⋅ y separate FSAs.
Ich möchte die FSA jedes Segments mit den anderen FSAs in meinem Korpus vergleichen. Das ultimative Ziel wäre es, Clustering innerhalb eines Ähnlichkeitsraums durchzuführen und "Klassen" von Segmenten zu erstellen, je nachdem, wie ähnlich ihre Konstruktionsmetriken sind. Von besonderem Interesse sind daher die Grammatiken, die jede FSA definiert (die ungefähr bestimmten Komponenten des Musikinhalts in dem Segment entsprechen). Gibt es Techniken, mit denen man so etwas vergleichen kann? KL-Divergenz kommt in den Sinn (z. B. Vergleichen Sie die Verteilung über Zeichenfolgen, die mit einer bestimmten FSA verbunden sind), obwohl es möglicherweise bessere / effizientere Techniken gibt?
Wir entschuldigen uns auch, wenn diese Frage entweder (1) trivial einfach ist oder (2) auf ein tieferes Missverständnis hinweist oder (3) an anderer Stelle beantwortet wird. Ich bin ein echter Noppen, Leute!
Antworten:
Vielleicht haben Sie aus einem anderen Blickwinkel mehr Glück und untersuchen die Ähnlichkeit von Musikstücken. Es gibt Forscher, die dies untersuchen, und während Ihr Ansatz funktionieren kann, gibt es andere Ansätze. gibt es große Datenbanken , den Blick auf vielen Elemente / Kriterien wie Texte, Genre etc. zB Musik Genomprojekt .
Manchmal, wenn es eine Vielzahl von Algorithmen gibt, kann eine Umfrage helfen. Hier sind zwei Umfragen zum Graph Matching.
Matching Structure and Semantics: Eine Umfrage zum graphbasierten Pattern Matching Brian Gallagher
Graph Ähnlichkeit und Matching / Zager
quelle
Da es sich bei FSAs um gerichtete Graphen handelt, kann Ihre Frage als "Algorithmus zur Messung der Ähnlichkeit zwischen gerichteten Graphen" verallgemeinert werden. Eine Google-Suche nach "Graph-Ähnlichkeitsalgorithmus" liefert Seiten und Seiten mit Treffern. Vielleicht wäre eine davon für Ihre Zwecke geeignet?
Sobald der Unterschied zwischen FSAs und allgemeinen Digraphen die Kantenbeschriftungen oder Übergangssymbole in FSAs sind, müssten Sie diese Algorithmen ändern, um dies zu berücksichtigen.
quelle