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?
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.
quelle
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.
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.
quelle