Versteckte Markov-Modellschwelle

14

Ich habe ein Proof-of-Concept-System für die Schallerkennung mit mfcc- und Hidden-Markov-Modellen entwickelt. Es gibt vielversprechende Ergebnisse, wenn ich das System auf bekannte Geräusche teste. Obwohl das System, wenn ein unbekannter Ton eingegeben wird, das Ergebnis mit der genauesten Übereinstimmung zurückgibt und die Punktzahl nicht so eindeutig ist, ist es ein unbekannter Ton, zB:

Ich habe 3 Hidden-Markov-Modelle trainiert, eines für das Sprechen, eines für das Wasser aus dem Wasserhahn und eines für das Klopfen auf den Schreibtisch. Dann teste ich sie auf unsichtbaren Daten und erhalte folgende Ergebnisse:

input: speech
HMM\knocking:  -1213.8911146444477
HMM\speech:  -617.8735676792728
HMM\watertap:  -1504.4735097322673

So highest score speech which is correct

input: watertap
HMM\knocking:  -3715.7246152783955
HMM\speech:  -4302.67960438553
HMM\watertap:  -1965.6149147201534

So highest score watertap which is correct

input: knocking
HMM\filler  -806.7248912250212
HMM\knocking:  -756.4428782636676
HMM\speech:  -1201.686687761133
HMM\watertap:  -3025.181144273698

So highest score knocking which is correct

input: unknown
HMM\knocking:  -4369.1702184688975
HMM\speech:  -5090.37122832872
HMM\watertap:  -7717.501505674925
Here the input is an unknown sound but it still returns the closest match as there is no system for thresholding/garbage filtering.

Ich weiß, dass beim Erkennen von Schlüsselwörtern ein OOV-Ton (außerhalb des Wortschatzes) mit einem Müll- oder Füllermodell herausgefiltert werden kann. Es wird jedoch darauf hingewiesen, dass er mit einer begrenzten Anzahl unbekannter Wörter trainiert wurde, wobei dies nicht auf mein System angewendet werden kann, da ich dies nicht tue Ich kenne nicht alle Geräusche, die das System möglicherweise aufzeichnet.

Wie wird ein ähnliches Problem im Spracherkennungssystem gelöst? Und wie kann ich mein Problem lösen, um Fehlalarme zu vermeiden?

Radek
quelle

Antworten:

5

Sehr gute Frage!

Wie Sie bereits erwähnt haben, besteht die einzige Möglichkeit, mit dem HMM eine Antwort auf die Frage "Ich weiß nicht" (nennen wir es OOV) zu erhalten, darin, ihm einen speziellen Status zuzuweisen, da er unter Ihrem Modell immer den Status mit der höchsten Wahrscheinlichkeit ausgibt. Sie müssen also sicherstellen, dass OOV eine höhere Wahrscheinlichkeit für jede Eingabe hat, die dies nicht ist speech, watertapoder knocking.

Die kurze Antwort lautet, dass dies nicht möglich ist. Weil ein HMM kein absoluter Mustererkenner ist. Es wird nur die Wahrscheinlichkeit der Ergebnisse unter Ihrem Modell verglichen und in dem Kontext, in dem es trainiert wurde .

Denken Sie an eine Eingabe, die speechund knockingzur gleichen Zeit wäre. Höchstwahrscheinlich wird das HMM zwischen diesen beiden Zuständen "zögern", da dieser Eingang jeweils Merkmale aufweist. Am Ende würde es eines davon ausgeben, aber es ist ziemlich unwahrscheinlich, dass es OOV ausgeben würde. Ich vermute, dass Sie im Fall der Keyword-Erkennung clevere Eingaben finden, die Ihr HMM durchweg zum Narren halten. Die Autoren wissen jedoch wahrscheinlich , welchen Input sie erwarten müssen und haben ihre endliche Liste unbekannter Wörter ausgewählt, so dass diese giftigen Eingaben ungewöhnlich sind.

Ich rate Ihnen, dasselbe zu tun. Denken Sie an die Situationen, in denen Sie das HMM verwenden, und trainieren Sie einen OOV-Status für die häufigsten Eingaben, die Sie eliminieren möchten. Sie können sich sogar vorstellen, mehrere OOV-Zustände zu haben.

gui11aume
quelle
2
Aber wie wäre es mit einem hmm-basierten Schwellenwertmodell für die Gestenerkennung, das hier beschrieben wird: herin.kaist.ac.kr/Publication/PS/hklee_PAMI_i09611.pdf . Sie erstellen ein Schwellenwertmodell, das ein ergodisches hmm ist, bei dem die Zustände jedes hmm miteinander kombiniert sind. "Das Schwellenwertmodell dient als Basislinie. Eine Kandidatengeste wird gefunden, wenn ein bestimmtes Gestenmodell über den Schwellenwert steigt." Mein Problem ist jedoch, dass ich Java- und Jahmm-Bibliotheken verwende und nicht glaube, dass es die Option für Ergodic bietet hmm.
Radek
Wie es im Titel heißt, handelt es sich um einen HMM-basierten Algorithmus, es handelt sich also nicht um ein HMM. Mir scheint, dass ein reines HMM nicht Ihren Anforderungen entspricht und dass ein auf Schwellenwerten basierender Klassifikator in der Tat besser geeignet ist.
gui11aume
5

Dies ist im Bereich der Gestenerkennung etwas üblich. Die Antwort besteht darin, ein Schwellenwertmodell zu erstellen, wie es in der Arbeit von Lee und Kim (1999) beschrieben ist.

Es spielt die gleiche Rolle wie ein Füll- oder Müllmodell, muss jedoch nicht separat geschult werden, wie Sie sagen. Sie können ein Schwellenwertmodell erstellen, indem Sie alle Selbstübergangszustände aus Ihren anderen Modellen verbinden und den Übergang mit einheitlichen Wahrscheinlichkeiten initialisieren und diese Zustände vollständig verbinden. Bitte werfen Sie einen Blick auf das Papier, um zu sehen, wie es tatsächlich gemacht werden kann.

Auch wenn Ihre Bibliothek keine ergodischen Modelle unterstützt, sollte sie Sie nicht daran hindern, manuell ein Modell mit der erforderlichen Größe zu erstellen und die Status entsprechend festzulegen. Wenn Sie dafür wirklich eine Bibliothek benötigen, stehen im Accord.NET Framework Implementierungen für versteckte Markov-Modellklassifizierer einschließlich der Unterstützung für Schwellenwertmodelle zur Verfügung , .

Haftungsausschluss: Ich bin der Autor dieser Bibliothek.

Cesar
quelle
Richtig, ich kann manuell ein Schwellenwertmodell erstellen. Nehmen wir zum Beispiel an, ich habe zwei hmm-Modelle mit dem Namen sound1 und sound2. Beide haben 2 Zustände. Dann erstelle ich ein Schwellenwertmodell mit 4 Zuständen. Jeder Zustand hat den gleichen Anfangswert von 0,25. Dann setze ich die Gleichverteilung für alle möglichen Übergänge so, dass alle möglichen Zustandsübergänge (0,0), (0,1), (1,0), (1,1), (1,2), (2,1), (2,2) usw. erhalten eine Gleichverteilung von 0,0625. Dann setze ich für Zustand 1 und 2 des Schwellwertmodells den opdf von Zustand 1 und 2 von sound1 und für Zustand 3 und 4 des Schwellwerts den opdf von Zustand 1 und 2 von sound2.
Radek
Ist der oben beschriebene Ansatz korrekt?
Radek
1
Nicht ganz ... vielleicht war ich ein bisschen locker in meiner Beschreibung. Die diagonalen Elemente Ihrer Übergangsmatrix für das Schwellenwertmodell erhalten die ursprünglichen Selbstübergangswahrscheinlichkeiten Ihrer anderen Modelle. Die Übergänge von einem Zustand in andere Zustände werden mit einheitlichen Wahrscheinlichkeiten initialisiert. Ich weiß, es mag faul erscheinen, auf den Code hinzuweisen, aber manchmal ist Code leichter zu verstehen als Formeln .
Cesar
Übrigens, wenn Sie das Papier von Lee und Kim gelesen und anders interpretiert haben oder glauben, dass meine Implementierung nicht korrekt ist, lassen Sie es mich bitte wissen.
Cesar
3

Also habe ich Folgendes getan: Ich habe meine vereinfachte Version eines Füllermodells erstellt. Jeder hmm, der den Wasserschlag-, Klopf- und Sprachton darstellt, ist ein separater 6-Zustands-hmm, der durch Töne aus einem Trainingssatz von 30, 50, 90 Tönen mit verschiedenen Längen von 0,3 Sekunden bis 10 Sekunden trainiert wird. Dann habe ich ein Füllermodell erstellt, das ein 1-State-Hmm-Modell ist und aus allen Trainingssets für Klopfen, Wasserhahn und Sprechen besteht. Wenn die hmm-Modellbewertung für einen bestimmten Sound größer ist als die Bewertung des Füllers, wird der Sound erkannt, andernfalls handelt es sich um einen unbekannten Sound. Ich habe nicht wirklich große Datenmengen, aber ich habe einen folgenden Test für die Ablehnung von Falsch-Positiven und die Ablehnung von True-Positiven bei unsichtbaren Geräuschen durchgeführt.

true positives rejection
knocking 1/11 = 90% accuracy
watertap 1/9 = 89% accuracy
speech 0/14 = 100% accuracy


false positives rejection
Tested 7 unknown sounds
6/7 = 86% accuracy

Aus diesem kurzen Test kann ich schließen, dass dieser Ansatz vernünftige Ergebnisse liefert, obwohl ich das seltsame Gefühl habe, dass dies möglicherweise nicht ausreicht.

Radek
quelle
+1 Das ist sehr interessant. Wenn Sie diese Arbeit noch nicht vergessen haben, hat diese Herangehensweise am Ende funktioniert? War es genug als "Füller / anderes" Modell? Wenn nicht, haben Sie irgendwann etwas anderes implementiert?
Zhubarb