Algoritma perbandingan ucapan untuk menilai kesamaan

8

Saya mencoba membandingkan 2 sampel pidato dan menilai kesamaan. Pikirkan seseorang yang mencoba mengulangi frasa, dan kemudian membandingkan 2 file audio tersebut.

Saya mulai dengan menerapkan algoritma MFCC (http://en.wikipedia.org/wiki/Mel-frequency_cepstrum). Saya menghitung MFCC dari kedua sampel audio, yang memberi saya sekitar 500 frame audio (masing-masing 10ms, dengan 30% tumpang tindih seperti sebelumnya) yang memiliki 14 atau lebih koefisien MFCC. Jadi matriks 500x14 untuk setiap sinyal audio.

Lalu saya melakukan pendekatan naif dengan hanya membedakan matriks. Ini tidak memberikan hasil yang sangat menjanjikan. Separuh dari waktu ketika saya membandingkan sampel audio yang sangat berbeda (di mana frasa yang berbeda diucapkan), saya mendapatkan sedikit perbedaan daripada membandingkan audio di mana saya mencoba mengulangi frasa yang sama! Ini jelas mundur dan tidak bisa memberi saya algoritma penilaian yang baik.

Bagaimana saya bisa memperbaiki ini? Saya pikir MFCC adalah bagian yang sangat penting dalam pemrosesan pidato, meskipun jelas saya perlu berbuat lebih banyak dengannya.

YoungMoney
sumber
Hai saya berurusan dengan masalah yang sama, apa pendekatannya jika saya harus membandingkan suara dari dua pembicara yang berbeda untuk mendapatkan skor kesamaan? Juga, apakah ada cara untuk langsung menghitung apakah klip audio berasal dari orang yang sama atau tidak?
Amanda Cerny

Jawaban:

13

Pertama, Anda harus memperbaiki perbedaan waktu. Misalnya, jika satu ucapan adalah "--heeelloooo ---" dan yang lainnya "hellooooooo ----" (- mewakili keheningan), perbandingan berpasangan langsung dari frame MFCC akan menunjukkan perbedaan hanya karena dua sampel tidak selaras. Anda dapat menggunakan Dynamic Time Warping untuk menemukan keselarasan terbaik antara dua urutan vektor fitur - dan menghitung jarak yang sesuai.

Masalah kedua adalah bahwa jika kedua rekaman tersebut tidak berasal dari pembicara yang sama, Anda harus mengkompensasi perbedaan dalam warna timbre. MFCC seorang wanita yang mengatakan "aaa" tidak sama dengan MFCC dari pembicara pria yang mengatakan fonem yang sama! Model yang relatif sederhana untuk menjelaskan variasi dalam timbre suara adalah dengan mengasumsikan bahwa terdapat transformasi linear yang "memetakan" MFCC dari satu speaker ke MFCC dari speaker lain (agar adil, hanya satu bagian kecil dari ini yang mentransformasikan secara akurat model bagaimana mengubah parameter seperti usia, jenis kelamin, dll "menggeser" MFCC). Setelah dua rekaman diselaraskan, bahkan secara kasar, Anda dapat menggunakan prosedur kuadrat terkecil untuk memperkirakan . Prosedur ini dikenal sebagai normalisasi speaker atau adaptasi speaker.ΓΓ

Prosedur perbandingan Anda akan terdiri dari langkah-langkah berikut. dan adalah urutan MFCC asli Anda.AB

  • Sejajarkan kedua ucapan menggunakan DTW. Ini hasil , matriks dengan pengamatan dari melengkung / bergeser ke disejajarkan dengan pengamatan di . Anda bisa berhenti di sini jika dan diketahui berasal dari pembicara yang sama.AABAB
  • Memperkirakan transformasi yang meminimalkan perbedaan antara dan .ΓΓAB
  • Gunakan jarak antara dan sebagai metrik Anda.ΓAB

Hal terakhir yang terlintas di pikiran saya adalah Anda harus membuang koefisien MFCC pertama (yang secara kasar mengekspresikan kenyaringan sinyal) untuk meningkatkan kapasitas sistem Anda untuk mencocokkan ucapan yang diucapkan pada level volume / perekaman yang berbeda.

pichenettes
sumber
Terima kasih telah memberikan lebih banyak arahan untuk saya. Saya memang menghapus nilai MFCC pertama sesuai jawaban Anda untuk pertanyaan saya sebelumnya. Tentang menggunakan DTW untuk menyelaraskan ucapan: apakah ini seharusnya dilakukan berdasarkan frame-by-frame? Yaitu dalam matriks 500x14 saya, saya memiliki 500 frame audio 10ms, di A dan B. Apakah saya akan menggunakan DTW baris-demi-baris untuk mencocokkan A ke B?
YoungMoney
Saya tidak yakin saya mengerti pertanyaan Anda ... Anda menggunakan DTW untuk menyelaraskan 500 vektor dari A ke 500 vektor dari B.
pichenettes
Apa yang saya maksudkan adalah saya harus menggabungkan 500 vektor untuk setiap A dan B menjadi satu "panjang" vektor (dengan elemen 500x14) dan kemudian menerapkan DTW? Versus menerapkan DTW 500 kali pada 14 elemen vektor. Yang pertama lebih masuk akal bagi saya berdasarkan apa yang saya baca sejauh ini.
YoungMoney
2
Yang pertama memang. Anda perlu menemukan penyelarasan optimal dalam matriks 500x500 (diisi dengan jarak berpasangan antara vektor 14-dimensi)
pichenettes
Ah. Yah sepertinya saya akan pergi ke balapan lagi
YoungMoney