Estou estudando reconhecimento de fala, em particular o uso do MFCC para extração de recursos. Todos os exemplos que encontrei on-line tendem a representar graficamente uma série de MFCC extraídos de uma expressão específica da seguinte forma (gráfico gerado por mim a partir do software que estou escrevendo):
Como você pode ver no gráfico acima:
- o eixo x é usado para cada um dos coeficientes do MFC (de 1 a 12 neste exemplo)
- o eixo y é usado para os valores dos coeficientes (variando de aproximadamente -12 a 42 neste exemplo)
- você tem tantas linhas quanto quadros ou vetores de recursos que você extraiu (140 neste exemplo).
Agora, isso não faz muito sentido para mim, porque o que estamos vendo aqui é a superposição de todos os vetores de recursos de uma só vez, perdendo qualquer informação de tempo. Estou com dificuldades para entender como essa representação é útil.
Em minha opinião, eu representaria os vetores extraídos da seguinte forma (novamente, gráfico gerado por mim):
No gráfico acima:
- o eixo x é o número do quadro ou vetor (1 a 140)
- o eixo y são os valores do coeficiente (novamente, de -12 a 42 aprox)
- você tem uma linha para cada recurso (12).
Para mim, essa representação deve ser mais útil, pois você pode ver a evolução no tempo de cada recurso em particular e, em minha opinião, isso deve ter um impacto mais forte sobre como aplicar algoritmos de comparação em palavras faladas.
Talvez as duas representações sejam igualmente válidas e úteis para propósitos diferentes, como quando você precisa estudar um sinal no domínio do tempo ou no domínio da frequência, mas, no caso do reconhecimento de fala, eu esperaria a evolução no tempo de cada indivíduo. recurso para ser mais significativo do que a densidade de valores para cada recurso (e talvez eu esteja completamente errado: P).
Então, de fato duas perguntas:
- Por que a primeira representação é aquela que parece ser amplamente usada e não a segunda?
- Quando você deseja comparar dois conjuntos de MFCCs extraídos, por exemplo, usando Dynamic Time Warping - DTW, e relacionado a este tópico, você compara os vetores de recursos (ou seja, 140 vetores de 12 recursos) ou os quadros (12 vetores de 140 quadros) )? (em outras palavras, MxN ou NxM?)
Obrigado!
fonte
Respostas:
A maneira como as MFCCs são sempre usadas é alimentando-as no classificador. Isso pode ser feito quadro a quadro (
12x1
vetor) ou concatenando (12xN
) - o mesmo que um espectrograma.Portanto, no DTW, você deve executar a classificação calculando a distância entre os vetores 12D. É um Dynamic Time Warping, portanto, a diferença deve ser calculada entre quadros no domínio do tempo , não entre amostras em um "domínio de recurso único".
Aqui está uma representação gráfica disso:
Apenas um adendo à plotagem da MFCC. Não faz sentido olhar para o gráfico de linha de todos os vetores MFCC empilhados juntos (primeira imagem) e não é realmente útil observar a evolução temporal de todos os MFCCs (segunda imagem). Não existe nenhum conceito de representação gráfica correta para os MFCCs, a menos que você queira obter algo específico.
Primeiramente, uma distribuição (histograma) de cada MFCC pode ser plotada para ver quais são os valores típicos, etc. Especialmente se você tiver um modelo GMM treinado para um sinal, poderá plotar a distribuição da amostra de teste e sobrepor com um PDF do GMM nessa dimensão.
A segunda abordagem seria plotar os MFCCs de maneira semelhante a um espectrograma (como mostrado na figura acima). Pode-se querer usá-lo para "boa representação" ou para ver as tendências e padrões gerais. Mas é quase impossível dizer que tipo de sinal está escondido atrás de tal representação.
Por exemplo, aqui está um gráfico MFCC de um sinal muito simples. Que sinal é esse? Se você estiver pronto, passe o espaço amarelo.
Foi fácil dizer? Definitivamente, olhando o espectrograma, ficou imediatamente óbvio. Talvez existam poucas pessoas que adivinharam desde que brincaram com esses exemplos antes. Agora algo mais complicado:
Pronto?
Penso que essa representação do MFCC é de alguma utilidade, exceto preencher o espaço. Agora, poucas pessoas podem adivinhar o sinal com base em um espectrograma, mas é impossível fazer isso olhando para os MFCCs.
Portanto, se alguém está lhe dizendo que ele pode dizer o que está acontecendo com o sinal com base em "ajustes cosseno-correlacionados de energias logarítmicas dentro de bancos de filtros triangulares no domínio da frequência", então ele é um mentiroso (com uma prévia de99.9% ) ou um computador. Muito raramente, há ocasiões em que é útil analisar os valores brutos do MFCC - como depuração e verificação de sanidade (são coeficientes constantes para o sinal estacionário).
fonte