He desarrollado un sistema de prueba de concepto para el reconocimiento de sonido utilizando mfcc y modelos ocultos de markov. Da resultados prometedores cuando pruebo el sistema en sonidos conocidos. Aunque el sistema, cuando se ingresa un sonido desconocido, devuelve el resultado con la coincidencia más cercana y el puntaje no es tan distinto de concebir, es un sonido desconocido, por ejemplo:
He entrenado 3 modelos de markov ocultos, uno para hablar, uno para el agua que sale del grifo y otro para golpear el escritorio. Luego los pruebo en datos no vistos y obtengo los siguientes resultados:
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.
Sé que en las palabras clave que detectan un sonido OOV (fuera del vocabulario) se puede filtrar usando un modelo de basura o relleno, pero dice que está entrenado usando un conjunto finito de palabras desconocidas donde esto no se puede aplicar a mi sistema, ya que no No sé todos los sonidos que el sistema puede grabar.
¿Cómo se resuelve un problema similar en el sistema de reconocimiento de voz? ¿Y cómo puedo resolver mi problema para evitar falsos positivos?
Esto es algo común en el campo del reconocimiento de gestos. La respuesta es crear un modelo de umbral como se describe en el documento de Lee y Kim (1999)
Desempeña el mismo papel que un modelo de relleno o basura, pero no necesita ser entrenado por separado como usted dice. Puede crear un modelo de umbral conectando todos los estados de transición automática de sus otros modelos e inicializando la transición con probabilidades uniformes, conectando completamente esos estados. Eche un vistazo al papel para ver cómo se puede hacer realmente.
Incluso si su biblioteca no admite modelos ergódicos, no debería impedirle crear manualmente un modelo del tamaño requerido y establecer los estados en consecuencia. Si realmente desea una biblioteca para eso, entonces las implementaciones para clasificadores de modelos de Markov ocultos, incluida la compatibilidad con modelos de umbral, están disponibles en Accord.NET Framework , por ejemplo.
Descargo de responsabilidad: soy el autor de esta biblioteca.
fuente
Entonces, lo que he hecho es: creé mi versión simplificada de un modelo de relleno. Cada hmm que representa el sonido del golpe de agua, el sonido del golpe y el sonido del habla es un hmm separado de 6 estados entrenado por sonidos del conjunto de entrenamiento de 30, 50, 90 sonidos, respectivamente, de varias duraciones de 0.3 segundos a 10 segundos. Luego creé un modelo de relleno que es un hmm de 1 estado que consiste en todos los sonidos del conjunto de entrenamiento para golpear, golpear el agua y hablar. Entonces, si la puntuación del modelo hmm es mayor para un sonido dado que la puntuación del relleno, el sonido se reconoce de lo contrario es un sonido desconocido. Realmente no tengo datos grandes, pero he perforado una prueba siguiente para el rechazo de falsos positivos y el rechazo de verdaderos positivos en sonidos no vistos.
Entonces, a partir de esta prueba rápida, puedo concluir que este enfoque da resultados razonables, aunque tengo la extraña sensación de que puede no ser suficiente.
fuente