Umbral de modelo oculto de Markov

14

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?

Radek
fuente

Respuestas:

5

Muy buena pregunta!

Como mencionas, la única forma de hacer que el HMM te dé una respuesta de "No sé" (llamémoslo OOV) es darle un estado especial porque siempre genera los estados con la mayor probabilidad según tu modelo. Por lo tanto, debe asegurarse de que OOV tenga una mayor probabilidad en cada entrada que no sea speech, watertapo knocking.

La respuesta corta es que esto no es posible. Porque un HMM no es un reconocedor de patrones absoluto. Solo compara la probabilidad de los resultados bajo su modelo, y en el contexto en que fue entrenado .

Piense en una entrada que sería speechy knockingal mismo tiempo. Lo más probable es que el HMM "vacile" entre estos dos estados porque esta entrada tiene características de cada uno. Al final, produciría uno de esos, pero es bastante improbable que produzca OOV. En el caso de la detección de palabras clave, supongo que podría encontrar entradas inteligentes que engañarían constantemente a su HMM. Sin embargo, los autores probablemente sepan qué entradas esperar y han elegido su lista finita de palabras desconocidas para que estas entradas venenosas sean poco comunes.

Te aconsejo que hagas lo mismo. Piense en las situaciones en las que usará el HMM y entrene un estado OOV en las entradas más comunes que desea eliminar. Incluso puede pensar en tener varios estados OOV.

gui11aume
fuente
2
Pero, ¿qué tal un modelo de umbral basado en hmm para el reconocimiento de gestos descrito aquí: herin.kaist.ac.kr/Publication/PS/hklee_PAMI_i09611.pdf . Crean un modelo de umbral que es un hmm ergódico que tiene estados de cada hmm combinados. "El modelo de umbral actúa como una línea de base. Se encuentra un gesto candidato cuando un modelo de gesto específico se eleva por encima del umbral" Pero mi problema es que estoy usando la biblioteca java y jahmm y no creo que tenga la opción de ergódico hmm
Radek
Como dice en el título, este es un algoritmo basado en HMM, por lo que no es un HMM. Me parece que un HMM puro no se ajusta a sus necesidades, y que un clasificador basado en el umbral es más adecuado.
gui11aume
5

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.

Cesar
fuente
Derecha, puedo crear manualmente un modelo de umbral. Digamos, por ejemplo, que tengo dos modelos hmm llamados: sonido1 y sonido2. Ambos tienen 2 estados. Luego creo un modelo de umbral con 4 estados. Cada estado tiene el mismo valor inicial que es 0.25. Luego establezco una distribución uniforme para todas las transiciones posibles, de modo que todas las transiciones de estado posibles (0,0), (0,1), (1,0), (1,1), (1,2), (2,1), (2,2), etc. obtienen una distribución uniforme de 0.0625. Luego, para los estados 1 y 2 del modelo de umbral, configuré el opdf del estado 1 y 2 del sonido1 y para los estados 3 y 4 del umbral configuré el opdf del estado 1 y 2 del sonido2.
Radek
¿Es correcto el enfoque descrito anteriormente?
Radek
1
No del todo ... tal vez estaba un poco flojo en mi descripción. Los elementos diagonales de su matriz de transición para el modelo de umbral reciben las probabilidades de autotransición originales de sus otros modelos. Las transiciones de un estado a otros estados se inicializan con probabilidades uniformes. Sé que puede parecer vago señalarlo al código, pero a veces el código es más fácil de entender que las fórmulas .
Cesar
Por cierto, si ha leído el documento de Lee y Kim y lo ha interpretado de manera diferente, o cree que mi implementación es incorrecta, hágamelo saber.
Cesar
3

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.

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

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.

Radek
fuente
+1 Esto es muy interesante. Si aún no se ha olvidado de este trabajo, ¿este enfoque funcionó al final? ¿Fue suficiente como modelo de 'relleno / otro'? Si no, ¿implementaste algo más eventualmente?
Zhubarb