Algoritmo de comparação de fala para classificação de similaridades

8

Estou tentando comparar duas amostras de fala e classificá-las em semelhanças. Pense em alguém tentando repetir uma frase e depois compare esses 2 arquivos de áudio.

Comecei implementando o algoritmo MFCC (http://en.wikipedia.org/wiki/Mel-frequency_cepstrum). Calculo os MFCCs de ambas as amostras de áudio, o que me dá aproximadamente 500 quadros de áudio (a 10ms cada, com 30% de sobreposição do anterior) com 14 ou mais coeficientes de MFCC. Portanto, uma matriz de 500 x 14 para cada sinal de áudio.

Então, faço a abordagem ingênua de simplesmente diferenciar as matrizes. Isso não dá resultados muito promissores. Na metade do tempo, quando comparo amostras de áudio completamente diferentes (onde frases diferentes são faladas), recebo menos diferença do que comparar o áudio em que tento repetir a mesma frase! Isso está claramente ao contrário e não pode me dar um bom algoritmo de pontuação.

Como posso melhorar isso? Eu pensei que os MFCCs eram uma parte realmente importante do processamento de fala, embora claramente eu precise fazer mais com ele.

YoungMoney
fonte
Ei, estou lidando com um problema semelhante, qual é a abordagem para comparar vozes de dois oradores diferentes , a fim de obter uma pontuação de similaridade? Além disso, existe uma maneira de calcular diretamente se os clipes de áudio são originários da mesma pessoa ou não?
Amanda Cerny

Respostas:

13

Primeiro, você terá que corrigir as diferenças de tempo. Por exemplo, se uma expressão é "--heeelloooo ---" e a outra "hellooooooo ----" (- representando silêncio), uma comparação direta por pares de quadros MFCC mostrará diferenças simplesmente porque as duas amostras não estão alinhadas. Você pode usar o Dynamic Time Warping para encontrar o melhor alinhamento entre as duas seqüências de vetores de recursos - e calcular a distância correspondente.

ΓΓ

AB

  • AABAB
  • ΓΓAB
  • ΓAB

Uma última coisa que me vem à mente é que você deve descartar o primeiro coeficiente do MFCC (que expressa aproximadamente a intensidade do sinal) para melhorar a capacidade do seu sistema para corresponder a enunciados pronunciados em um nível diferente de volume / gravação.

pichenettes
fonte
Obrigado por fornecer mais instruções para mim. Eu removi o primeiro valor do MFCC conforme sua resposta à minha pergunta anterior. Sobre o uso do DTW para alinhar enunciados: isso deve ser feito quadro a quadro? Ou seja, na minha matriz 500x14, tenho 500 quadros de áudios de 10ms, tanto em A quanto em B. Usaria o DTW linha por linha para combinar A a B?
YoungMoney 18/01
Eu não estou certo que eu entendo a sua pergunta ... Você usa DTW para alinhar os 500 vetores de à 500 vetores de B.
pichenettes
O que quero dizer é que devo concatenar os 500 vetores de cada A e B em um vetor "longo" (com elementos de 500x14) e depois aplicar o DTW? Contra a aplicação de DTW 500 vezes nos 14 vetores de elementos. O primeiro faz mais sentido para mim com base no que li até agora.
YoungMoney 19/01
2
O primeiro, de fato. É preciso encontrar o alinhamento ideal na matriz de 500x500 (preenchida com as distâncias emparelhadas entre os vectores 14-dimensional)
pichenettes
Ah Bem, parece que eu estou pronto para as corridas novamente
youngmoney