Algorithme de comparaison de la parole pour évaluer les similitudes

8

J'essaie de comparer 2 échantillons de parole et de les évaluer sur des similitudes. Pensez à quelqu'un qui essaie de répéter une phrase, puis compare ces 2 fichiers audio.

J'ai commencé par implémenter l'algorithme MFCC (http://en.wikipedia.org/wiki/Mel-frequency_cepstrum). Je calcule les MFCC des deux échantillons audio, ce qui me donne environ 500 images audio (à 10 ms chacune, avec un chevauchement de 30% comme le précédent) ayant environ 14 coefficients MFCC. Donc une matrice 500x14 pour chaque signal audio.

Ensuite, je fais l'approche naïve de simplement différencier les matrices. Cela ne donne pas de résultats très prometteurs. La moitié du temps lorsque je compare des échantillons audio complètement différents (où différentes phrases sont parlées), j'obtiens moins de différence que de comparer l'audio où j'essaie de répéter la même phrase! C'est clairement à l'envers et ne peut pas me donner un bon algorithme de notation.

Comment puis-je améliorer cela? Je pensais que les MFCC étaient une partie très importante du traitement de la parole, mais je dois clairement en faire plus.

YoungMoney
la source
Hé, je suis confronté à un problème similaire, quelle est l'approche si je compare les voix de deux locuteurs différents afin d'obtenir un score de similitude? De plus, existe-t-il un moyen de calculer directement si les clips audio proviennent ou non de la même personne?
Amanda Cerny

Réponses:

13

Tout d'abord, vous devrez corriger les différences de timing. Par exemple, si un énoncé est "--heeelloooo ---" et l'autre "hellooooooo ----" (- représentant le silence), une comparaison directe par paire de trames MFCC montrera des différences simplement parce que les deux échantillons ne sont pas alignés. Vous pouvez utiliser Dynamic Time Warping pour trouver le meilleur alignement entre les deux séquences de vecteurs de caractéristiques - et calculer la distance correspondante.

Le deuxième problème est que si les deux enregistrements ne proviennent pas du même haut-parleur, vous devrez compenser les différences de timbre. Le MFCC d'une femme disant "aaa" n'est pas le même que le MFCC d'un locuteur masculin disant le même phonème! Un modèle relativement simple pour tenir compte des variations du timbre vocal consiste à supposer qu'il existe une transformation linéaire qui "mappe" les MFCC d'un locuteur sur les MFCC d'un autre locuteur (pour être juste, un seul petit sous-ensemble de ces transformés se transforme avec précision modéliser la façon dont des paramètres tels que l'âge, le sexe, etc. «modifient» le MFCC). Une fois que deux enregistrements ont été alignés, même grossièrement, vous pouvez utiliser une procédure des moindres carrés pour estimer . Cette procédure est connue sous le nom de normalisation du locuteur ou d'adaptation du locuteur.ΓΓ

Votre procédure de comparaison comprendra donc les étapes suivantes. et sont vos séquences MFCC d'origine.AB

  • Alignez les deux énoncés à l'aide de DTW. On obtient , une matrice avec les observations de déformé / déplacé pour être aligné avec les observations dans . Vous pouvez vous arrêter ici si et sont connus pour provenir du même haut-parleur.AABAB
  • Estimer la transformation qui minimise la différence entre et .ΓΓAB
  • Utilisez la distance entre et comme métrique.ΓAB

Une dernière chose qui me vient à l'esprit est que vous devez éliminer le premier coefficient MFCC (qui exprime grossièrement l'intensité du signal) pour améliorer la capacité de votre système à correspondre aux énoncés prononcés à un volume / niveau d'enregistrement différent.

pichenettes
la source
Merci d'avoir fourni plus de directions pour moi. J'ai supprimé la première valeur MFCC selon votre réponse à ma question précédente. À propos de l'utilisation de DTW pour aligner des énoncés: est-ce censé être fait image par image? C'est-à-dire que dans ma matrice 500x14, j'ai 500 images d'audios 10 ms, à la fois en A et en B. Dois-je utiliser DTW ligne par ligne pour faire correspondre A à B?
YoungMoney
Je ne suis pas sûr de comprendre votre question ... Vous utilisez DTW pour aligner les 500 vecteurs de A sur les 500 vecteurs de B.
pichenettes
Qu'est-ce que je veux dire, est-ce que je dois concaténer les 500 vecteurs pour chaque A et B en un vecteur "long" (avec 500x14 éléments) et ensuite appliquer DTW? Contre l'application de DTW 500 fois sur les 14 vecteurs d'éléments. Le premier me semble plus logique d'après ce que j'ai lu jusqu'à présent.
YoungMoney
2
Les premiers en effet. Vous devez trouver l'alignement optimal dans la matrice 500x500 (remplie des distances par paires entre les vecteurs à 14 dimensions)
pichenettes
Ah. Eh bien, il semble que je sois de nouveau parti pour les courses
YoungMoney