Menentukan seberapa mirip audio dengan ucapan manusia

12

Sambil mencari jawaban untuk masalah ini, saya menemukan papan ini jadi memutuskan untuk mengirim pertanyaan saya dari Stack Overflow.


Saya mencari metode untuk menentukan kesamaan antara segmen audio dan suara manusia, yang diekspresikan secara numerik.

Saya telah mencari sedikit, tetapi apa yang saya temukan sejauh ini (terperinci di bawah) tidak benar-benar cocok dengan yang saya butuhkan:

  • Salah satu metode adalah menggunakan perangkat lunak pengenalan suara untuk mendapatkan kata-kata dari segmen audio. Namun, metode ini tidak dapat menghasilkan seberapa mirip "audio" dengan ucapan manusia; sering dapat mengetahui apakah ada kata-kata dalam audio, tetapi jika tidak ada kata-kata yang pasti, itu tidak dapat mengatakan bahwa audio adalah kata-kata seperti itu.
    Contoh: CMU Sphinx , Dragonfly , SHoUT

  • Metode yang lebih menjanjikan disebut sebagai Voice Activity Detection (VAD). Namun, ini cenderung memiliki masalah yang sama: algoritma / program menggunakan VAD cenderung hanya mengembalikan apakah ambang aktivitas telah tercapai atau tidak, dan tidak ada nilai "kesamaan" sebelum atau setelah ambang tersebut. Atau, banyak yang hanya mencari volume, bukan kesamaan dengan bicara manusia.
    Contoh: Speex , Listener , FreeSWITCH


Ada ide?

Jeff Gortmaker
sumber
1
Dari pertanyaan Anda, tidak jelas apakah masalah Anda adalah A / mengambil rekaman audio dan mengatakan apakah itu berisi ucapan manusia atau tidak (contoh aplikasi: mendeteksi dan menghapus pembicaraan DJ dari rekaman acara radio); atau B / mengambil input ucapan dan mengatakan betapa miripnya dengan segmen audio referensi. Dalam hal ini B, kriteria mana yang ingin Anda ukur kesamaannya. Pada kontur melodi? (mis: mencocokkan suara yang dinyanyikan dengan sebuah lagu). Di kelas ritme dan klaster? (mis: mencocokkan beatboxing / onomatopoeia dengan loop drum). Di timbre? (Mencocokkan efek suara dengan suara). Tolong beritahu kami aplikasi Anda.
pichenettes
Maaf, masalah saya adalah apa yang Anda perinci dalam A. Saya ingin menentukan apakah segmen audio adalah ucapan manusia.
Jeff Gortmaker
1
Saya telah mengerjakan masalah terkait - mencoba menentukan kapan suara dengkuran / pernapasan telah "dicemari" oleh ucapan atau musik. Sangat sulit dilakukan dengan keandalan apa pun, dan tanpa menggunakan algoritme pengenalan ucapan "lanjutan" (jika mereka, pada kenyataannya, bahkan akan bekerja). Satu pengamatan saya adalah bahwa pidato cenderung memiliki irama yang tidak teratur, sedangkan musik (biasanya) teratur. Itu dan mungkin "kerataan spektral" layak untuk diperiksa (saya masih mengevaluasi manfaatnya untuk tujuan saya).
Daniel R Hicks
(A hair more detail: Saya menemukan bahwa deviasi standar yang dinormalisasi dari kerataan spektral yang dihitung dari FFT audio tampaknya mencerminkan sesuatu dari kualitas audio.)
Daniel R Hicks

Jawaban:

6

Masalah seperti ini biasanya diselesaikan dengan menggunakan teknik pembelajaran mesin.

Memecah sinyal menjadi urutan 20 ms atau 50ms frame. Ekstrak fitur pada setiap frame. MFCC umumnya baik untuk aplikasi semacam ini, meskipun ada fitur yang lebih spesifik untuk deteksi suara (energi modulasi 4 Hz - yang kira-kira adalah tingkat di mana orang berbicara; tingkat zero-crossing).

Kemudian, dengan menggunakan seperangkat pelatihan audio yang telah Anda beri label secara manual sebagai ucapan / bukan ucapan, latih classifier (model campuran Gaussian, SVM ...) pada fitur bingkai.

Ini akan memungkinkan Anda untuk mengklasifikasikan frame yang tidak berlabel ke dalam kelas pidato / non-bicara. Langkah terakhir terdiri dari merapikan keputusan (bingkai yang diklasifikasikan sebagai tidak berpidato yang dikelilingi oleh ratusan kerangka bicara cenderung menjadi kesalahan klasifikasi), misalnya menggunakan HMM, atau hanya filter median.

Beberapa referensi:

Klasifikasi pidato / musik yang kuat dalam dokumen audio (Pinquier & al) Diskriminasi pidato / musik untuk aplikasi multimedia (El-Maleh & al) Perbandingan fitur untuk diskriminasi bicara / musik (Carey & al)

Perhatikan bahwa fitur dan teknik klasifikasi yang mereka gambarkan juga relevan untuk masalah 1-kelas dalam mendeteksi wicara (alih-alih membedakan wicara dengan sesuatu yang lain). Dalam hal ini, Anda dapat menggunakan teknik pemodelan 1-kelas seperti 1-kelas SVM, atau hanya mengambil skor kemungkinan dari GMM yang dilatih pada data pidato sebagai ukuran "pidato".

Jika, di sisi lain, masalah Anda benar-benar membedakan ucapan vs sesuatu yang lain (katakanlah musik), Anda juga bisa sangat baik menggunakan pendekatan yang tidak diawasi yang berfokus pada mendeteksi batas-batas antara konten audio yang serupa - daripada mengidentifikasi konten ini sendiri.

pichenettes
sumber
Terima kasih, ini membantu satu ton! Apa manfaat memecah sinyal menjadi jendela kecil? Karena output yang saya cari adalah nilai numerik yang menggambarkan seluruh segmen audio, apakah akan lebih baik untuk mengekstrak fitur untuk seluruh sinyal dan bukan hanya jendela tertentu?
Jeff Gortmaker
Menghitung fitur (terutama yang spektral atau cepstral) di jendela yang sangat panjang akan rata-rata atau membatalkan beberapa properti yang membuat pidato menonjol. Anda dapat memverifikasi ini sendiri dengan mencampurkan banyak fragmen pidato pendek - akan sulit untuk mengenali hasilnya sebagai ucapan. Karena itu lebih baik melakukan klasifikasi pada segmen kecil; dan, dalam kasus Anda, agregat skor (misalnya hitung rata-rata skor kemungkinan yang diberikan oleh GMM; atau hitung% bingkai yang diklasifikasi sebagai ucapan oleh penggolong biner).
pichenettes
Untuk lebih tepatnya, perlu diingat bahwa dimensi temporal "runtuh" ​​ketika Anda melihat spektrum. Misalnya, spektrum daya dari nada 500 Hz yang diikuti dalam waktu oleh nada 1kHz mirip dengan spektrum daya dari kedua nada yang dimainkan secara bersamaan; jadi spektrum daya, melalui jendela yang panjang, dari sinyal yang banyak berubah mungkin tidak terlihat sangat mewakili konten sinyal.
pichenettes