Seuillage de modèle de Markov caché

14

J'ai développé un système de preuve de concept pour la reconnaissance sonore en utilisant des modèles mfcc et markov cachés. Cela donne des résultats prometteurs lorsque je teste le système sur des sons connus. Bien que le système, lorsqu'un son inconnu est entré retourne le résultat avec la correspondance la plus proche et que le score n'est pas si distinct pour le concevoir, c'est un son inconnu, par exemple:

J'ai formé 3 modèles de Markov cachés, un pour la parole, un pour l'eau sortant du robinet et un pour frapper sur le bureau. Ensuite, je les teste sur des données invisibles et j'obtiens les résultats suivants:

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.

Je sais que dans le mot-clé repérant un son OOV (hors vocabulaire) peut être filtré en utilisant un modèle de déchets ou de remplissage, mais il dit qu'il est formé en utilisant un ensemble fini de mots inconnus où cela ne peut pas être appliqué à mon système car je ne le fais pas connais pas tous les sons que le système peut enregistrer.

Comment un problème similaire est-il résolu dans le système de reconnaissance vocale? Et comment puis-je résoudre mon problème pour éviter les faux positifs?

Radek
la source

Réponses:

5

Très bonne question!

Comme vous le mentionnez, la seule façon d'obtenir du HMM une réponse "Je ne sais pas" (appelons-le OOV) est de lui donner un état spécial car il génère toujours les états avec la plus forte probabilité sous votre modèle. Vous devez donc vous assurer que le OOV a une plus grande probabilité dans tous les entrée qui ne l'est pas speech, watertapou knocking.

La réponse courte est que ce n'est pas possible. Parce qu'un HMM n'est pas un identificateur de modèle absolu. Il compare uniquement la probabilité des résultats sous votre modèle, et dans le contexte, il a été formé .

Pensez à une entrée qui serait speechet knockingen même temps. Le HMM "hésitera" probablement entre ces deux états car cette entrée a des caractéristiques de chacun. En fin de compte, il en générerait un, mais il est peu probable qu'il produise un OOV. Dans le cas du repérage de mots clés, je suppose que vous pouvez trouver des entrées intelligentes qui tromperaient constamment leur HMM. Cependant, les auteurs savent probablement à quelle entrée s'attendre et ils ont choisi leur liste finie de mots inconnus pour que ces entrées vénéneuses soient rares.

Je vous conseille de faire de même. Réfléchissez aux situations dans lesquelles vous utiliserez le HMM et entraînez un état OOV sur les entrées les plus courantes que vous souhaitez éliminer. Vous pouvez même penser à avoir plusieurs états OOV.

gui11aume
la source
2
Mais que diriez-vous d'un modèle de seuil basé sur hmm pour la reconnaissance des gestes décrit ici: herin.kaist.ac.kr/Publication/PS/hklee_PAMI_i09611.pdf . Ils créent un modèle de seuil qui est un hmm ergodique qui a des états de chaque hmm combinés ensemble. "Le modèle de seuil agit comme une ligne de base. Un geste candidat est trouvé lorsqu'un modèle de geste spécifique dépasse le seuil" Mais mon problème est que j'utilise la bibliothèque java et jahmm et je ne pense pas qu'il ait l'option ergodique hmm.
Radek
Comme il est dit dans le titre, il s'agit d'un algorithme basé sur HMM, donc ce n'est pas un HMM. Il me semble qu'un HMM pur ne correspond pas à vos besoins, et qu'un classificateur à seuil est en effet mieux adapté.
gui11aume
5

Ceci est quelque peu courant dans le domaine de la reconnaissance gestuelle. La réponse est de créer un modèle de seuil comme décrit dans l'article de Lee et Kim (1999)

Il joue le même rôle qu'un modèle de remplissage ou d'ordures, mais il n'a pas besoin d'être formé séparément comme vous le dites. Vous pouvez créer un modèle de seuil en connectant tous les états d'auto-transition à partir de vos autres modèles et en initialisant la transition avec des probabilités uniformes, en connectant entièrement ces états. Veuillez consulter le document pour voir comment cela peut être fait.

Même si votre bibliothèque ne prend pas en charge les modèles ergodiques, cela ne devrait pas vous empêcher de créer manuellement un modèle de la taille requise et de définir les états en conséquence. Si vous souhaitez vraiment une bibliothèque pour cela, les implémentations des classificateurs de modèles Markov cachés, y compris la prise en charge des modèles de seuil, sont disponibles dans Accord.NET Framework , par exemple.

Avertissement: je suis l'auteur de cette bibliothèque.

César
la source
À droite, je peux créer manuellement un modèle de seuil. Disons par exemple que j'ai deux modèles hmm nommés: sound1 et sound2. Les deux ont 2 états. Ensuite, je crée un modèle de seuil avec 4 états. Chaque état a la même valeur initiale qui est de 0,25. Ensuite, je fixe une distribution uniforme pour toutes les transitions possibles afin que toutes les transitions d'état possibles (0,0), (0,1), (1,0), (1,1), (1,2), (2,1), (2,2), etc. obtiennent une distribution uniforme de 0,0625. Ensuite, pour les états 1 et 2 du modèle de seuil, je définis l'opdf des états 1 et 2 du son1 et pour les états 3 et 4 du seuil, je définis l'opdf des états 1 et 2 du son2.
Radek
L'approche décrite ci-dessus est-elle correcte?
Radek
1
Pas tout à fait ... j'étais peut-être un peu lâche dans ma description. Les éléments diagonaux de votre matrice de transition pour le modèle de seuil reçoivent les probabilités d'auto-transition d'origine de vos autres modèles. Les transitions d'un état à d'autres états sont initialisées avec des probabilités uniformes. Je sais qu'il peut sembler paresseux de le signaler au code, mais parfois le code est plus facile à comprendre que les formules .
Cesar
Soit dit en passant, si vous avez lu le document de Lee et Kim et que vous l'avez interprété différemment, ou si vous pensez que ma mise en œuvre est incorrecte, faites-le moi savoir.
Cesar
3

J'ai donc créé ma version simplifiée d'un modèle de remplissage. Chaque hmm représentant le son de l'eau, le son de frappe et le son de la parole est un hmm séparé à 6 états formé par des sons provenant d'un ensemble d'entraînement de 30, 50, 90 sons respectivement de différentes longueurs de 0,3 s à 10 secondes. Ensuite, j'ai créé un modèle de remplissage qui est un hmm à 1 état composé de tous les sons de l'ensemble d'entraînement pour les coups, le watertap et la parole. Donc, si le score du modèle hmm est plus élevé pour un son donné que le score du remplisseur - le son est reconnu sinon c'est un son inconnu. Je n'ai pas vraiment de données volumineuses mais j'ai effectué un test suivant pour le rejet des faux positifs et le vrai rejet positif sur les sons invisibles.

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

Donc, à partir de ce test rapide, je peux conclure que cette approche donne des résultats raisonnables, même si j'ai le sentiment étrange que ce ne soit pas suffisant.

Radek
la source
+1 C'est très intéressant. Si vous n'avez pas déjà oublié ce travail, cette approche a-t-elle finalement fonctionné? Était-ce suffisant comme modèle de «remplissage / autre»? Sinon, avez-vous finalement implémenté autre chose?
Zhubarb