Algoritmo di confronto vocale per la valutazione delle somiglianze


8

Sto cercando di confrontare 2 campioni di discorso e valutarli in base a somiglianze. Pensa a qualcuno che cerca di ripetere una frase e poi confronta questi 2 file audio.

Ho iniziato implementando l'algoritmo MFCC (http://en.wikipedia.org/wiki/Mel-frequency_cepstrum). Calcolo gli MFCC di entrambi i campioni audio, il che mi dà circa 500 frame di audio (a 10 ms ciascuno, con una sovrapposizione del 30% simile al precedente) con circa 14 coefficienti MFCC. Quindi una matrice 500x14 per ogni segnale audio.

Quindi seguo l'approccio ingenuo semplicemente differenziando le matrici. Questo non dà risultati molto promettenti. La metà delle volte quando confronto campioni audio completamente diversi (in cui vengono pronunciate frasi diverse), ottengo meno differenze rispetto al confronto dell'audio in cui provo a ripetere la stessa frase! Questo è chiaramente al contrario e non può darmi un buon algoritmo di punteggio.

Come posso migliorare questo? Pensavo che gli MFCC fossero una parte molto importante dell'elaborazione vocale, anche se chiaramente ho bisogno di fare di più con esso.


Ehi, ho a che fare con un problema simile, qual è l'approccio se dovessi confrontare le voci di due diversi oratori per ottenere un punteggio di somiglianza? Inoltre, c'è un modo per calcolare direttamente se le clip audio provengono dalla stessa persona o no?
Amanda Cerny,

Risposte:


13

Innanzitutto, dovrai correggere le differenze nei tempi. Ad esempio, se una frase è "--heeelloooo ---" e l'altra "hellooooooo ----" (- che rappresenta il silenzio), un confronto diretto a coppie dei frame MFCC mostrerà le differenze semplicemente perché i due campioni non sono allineati. È possibile utilizzare la funzione Dynamic Time Warping per trovare il miglior allineamento tra le due sequenze di vettori di caratteristiche e calcolare la distanza corrispondente.

Il secondo problema è che se le due registrazioni non provengono dallo stesso oratore, dovrai compensare le differenze di timbro. L'MFCC di una femmina che dice "aaa" non è lo stesso dell'MFCC di un oratore maschio che dice lo stesso fonema! Un modello relativamente semplice per tenere conto delle variazioni del timbro vocale è quello di supporre l'esistenza di una trasformazione lineare Γche "mappa" gli MFCC di un oratore sugli MFCC di un altro oratore (ad essere onesti, solo un piccolo sottoinsieme di questi trasforma in modo accurato come il cambiamento di parametri come età, genere, ecc. "sposta" l'MFCC). Una volta che due registrazioni sono state allineate, anche approssimativamente, è possibile utilizzare una procedura almeno quadrata per stimareΓ. Questa procedura è nota come normalizzazione o adattamento degli altoparlanti.

La procedura di confronto sarà quindi composta dai seguenti passaggi. A e B sono le tue sequenze MFCC originali.

  • Allinea le due espressioni usando DTW. Questo cedeA, una matrice con le osservazioni di A deformato / spostato per essere allineato con le osservazioni in B. Puoi fermarti qui seA e B si sa che provengono dallo stesso oratore.
  • Stimare la trasformazione Γ che minimizza la differenza tra ΓA e B.
  • Usa la distanza tra ΓA e B come metrica.

Un'ultima cosa che mi viene in mente è che devi scartare il primo coefficiente MFCC (che esprime approssimativamente il volume del segnale) per migliorare la capacità del tuo sistema di abbinare le espressioni pronunciate a un diverso volume / livello di registrazione.


Grazie per avermi fornito ulteriori indicazioni. Ho rimosso il primo valore MFCC secondo la tua risposta alla mia domanda precedente. Informazioni sull'uso di DTW per allineare le espressioni: si suppone che ciò avvenga frame per frame? Vale a dire nella mia matrice 500x14 ho 500 frame di audio da 10ms, sia in A che in B. Dovrei usare DTW riga per riga per abbinare da A a B?
YoungMoney,

Non sono sicuro di aver capito la tua domanda ... Usa DTW per allineare i 500 vettori da A ai 500 vettori da B.
pichenettes,

Ciò che intendo è che dovrei concatenare i 500 vettori per ogni A e B in un vettore "lungo" (con elementi 500x14) e quindi applicare DTW? Contro l'applicazione di DTW 500 volte sui 14 vettori di elementi. Il primo ha più senso per me in base a ciò che ho letto finora.
YoungMoney,

2
Il primo in effetti. È necessario trovare l'allineamento ottimale nella matrice 500x500 (popolata con le distanze a coppie tra i vettori 14-dimensionali)
pichenettes

Ah. Beh, sembra che vado di nuovo alle gare
YoungMoney
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.