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?