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?
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.
la source
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.
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.
la source