Desenvolvi um sistema de prova de conceito para reconhecimento de som usando modelos mfcc e markov oculto. Dá resultados promissores quando testo o sistema em sons conhecidos. Embora o sistema, quando um som desconhecido seja inserido, retorne o resultado com a correspondência mais próxima e a pontuação não seja tão distinta para conceber, é um som desconhecido, por exemplo:
Treinei três modelos de markov ocultos, um para fala, um para água saindo da torneira e outro para bater na mesa. Depois, testo-os em dados invisíveis e obtenho os seguintes 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.
Eu sei que na detecção de palavras-chave um som OOV (fora do vocabulário) pode ser filtrado usando um modelo de lixo ou preenchimento, mas ele diz que é treinado usando um conjunto finito de palavras desconhecidas, onde isso não pode ser aplicado ao meu sistema, como eu conhece todos os sons que o sistema pode gravar.
Como é resolvido um problema semelhante no sistema de reconhecimento de fala? E como posso resolver meu problema para evitar falsos positivos?