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?
Isso é algo comum no campo do reconhecimento de gestos. A resposta é criar um modelo de limiar, conforme descrito no artigo de Lee e Kim (1999)
Ele desempenha o mesmo papel que um modelo de enchimento ou lixo, mas não precisa ser treinado separadamente, como você diz. Você pode criar um modelo de limite conectando todos os estados de autotransição de seus outros modelos e inicializando a transição com probabilidades uniformes, conectando totalmente esses estados. Por favor, dê uma olhada no papel para ver como ele pode realmente ser feito.
Mesmo que sua biblioteca não suporte modelos ergódicos, não deve impedir que você crie manualmente um modelo do tamanho necessário e defina os estados de acordo. Se você realmente deseja uma biblioteca para isso, implementações para classificadores de modelo Markov ocultos, incluindo suporte para modelos de limite, estão disponíveis no Accord.NET Framework , por exemplo.
Disclaimer: Eu sou o autor desta biblioteca.
fonte
Então, o que fiz foi: criei minha versão simplificada de um modelo de preenchimento. Cada hmm que representa som de golpe d'água, som de batida e som de fala é um hmm de 6 estados separado, treinado por sons do conjunto de treinamento de 30, 50, 90 sons, respectivamente, de vários comprimentos, de 0,3 a 10 segundos. Então eu criei um modelo de preenchimento que é um hmm de 1 estado, composto por todos os sons do conjunto de treinamento para batidas, batidas na água e fala. Portanto, se a pontuação do modelo hmm é maior para um determinado som do que a pontuação do preenchimento - o som é reconhecido, caso contrário, é um som desconhecido. Eu realmente não tenho dados grandes, mas realizei um teste a seguir para rejeição de falsos positivos e rejeição de verdadeiros positivos em sons invisíveis.
Portanto, a partir desse teste rápido, posso concluir que essa abordagem fornece resultados razoáveis, embora tenha uma sensação estranha de que pode não ser suficiente.
fonte