Mengapa Kaldi bagus untuk pengenalan ucapan? (diperbarui 12.25.2019)



Mengapa saya (dan saya harap Anda) tertarik pada pengenalan ucapan? Pertama, arah ini adalah salah satu yang paling populer dibandingkan dengan tugas-tugas lain dari linguistik komputer, karena teknologi pengenalan suara sekarang digunakan hampir di mana-mana - mulai dari mengenali ya / tidak di call center otomatis bank hingga kemampuan untuk mendukung "obrolan ringan" di "Kolom pintar" seperti "Alice". Kedua, agar sistem pengenalan ucapan berkualitas tinggi, perlu untuk menemukan cara yang paling efektif untuk membuat dan mengonfigurasi sistem semacam itu (artikel ini dikhususkan untuk salah satu alat tersebut). Akhirnya, "plus" yang tidak diragukan lagi dalam memilih spesialisasi di bidang pengenalan ucapan untuk saya secara pribadi adalah bahwa untuk penelitian di bidang ini perlu memiliki keahlian programmer dan linguistik. Ini sangat merangsang, memaksa untuk memperoleh pengetahuan dalam berbagai disiplin ilmu.

Lagi pula, mengapa Kaldi ada kerangka kerja lain untuk pengenalan ucapan?


Untuk menjawab pertanyaan ini, ada baiknya mempertimbangkan analog yang ada dan algoritma dan teknologi yang digunakan oleh mereka (algoritma yang digunakan dalam Kaldi dijelaskan lebih lanjut dalam artikel):

  • CMU Sphinx
    CMU Sphinx (jangan bingung dengan mesin pencari Sphinx!) Adalah sistem pengenalan ucapan yang dibuat oleh pengembang dari Universitas Carnegie Mellon dan terdiri dari berbagai modul untuk mengekstraksi fitur pidato, pengenalan suara (termasuk pada perangkat seluler) dan pelatihan untuk pengenalan seperti itu. CMU Sphinx menggunakan model Markov tersembunyi pada tingkat pengenalan akustik-fonetik dan model statistik N-gram pada tingkat pengenalan linguistik. Sistem ini juga memiliki sejumlah fitur menarik: pengenalan ucapan panjang (misalnya, transkrip atau rekaman suara wawancara), kemampuan untuk menghubungkan kamus besar ratusan ribu bentuk kata, dll. Penting untuk dicatat bahwa sistem ini terus berkembang, dengan setiap versi, kualitas dan kinerja pengakuan ditingkatkan . Juga ada dokumentasi lintas platform dan nyaman. Di antara kekurangan menggunakan sistem ini, adalah mungkin untuk memilih ketidakmampuan untuk memulai CMU Sphinx "out of the box", karena bahkan memecahkan masalah sederhana membutuhkan pengetahuan tentang mengadaptasi model akustik, di bidang pemodelan bahasa, dll.
  • Julius
    Julius telah dikembangkan oleh pengembang Jepang sejak 1997, dan sekarang proyek ini didukung oleh Institut Penelitian Sains, Teknologi & Manajemen Tingkat Lanjut Kyoto. Model ini didasarkan pada N-gram dan model Markov tersembunyi yang peka konteks, sistem ini mampu mengenali pembicaraan secara real time. Kelemahannya adalah distribusi hanya untuk model bahasa Jepang (walaupun ada proyek VoxForge yang membuat model akustik untuk bahasa lain, khususnya untuk bahasa Inggris) dan kurangnya pembaruan yang stabil.
  • RWTH ASR
    Model ini telah dikembangkan oleh spesialis dari Universitas Teknik Rhine-Westphalian sejak tahun 2001, terdiri dari beberapa perpustakaan dan alat yang ditulis dalam C ++. Proyek ini juga mencakup dokumentasi instalasi, berbagai sistem pelatihan, templat, model akustik, model bahasa, dukungan untuk jaringan saraf, dll. Selain itu, RWTH ASR praktis lintas platform dan memiliki kecepatan rendah.
  • Htk
    HTK (Hidden Markov Model Toolkit) adalah seperangkat alat pengenalan ucapan yang dibuat di Universitas Cambridge pada tahun 1989. Toolkit berdasarkan pada model Markov tersembunyi paling sering digunakan sebagai alat tambahan untuk membuat sistem pengenalan ucapan (misalnya, kerangka kerja ini digunakan oleh pengembang Julius). Terlepas dari kenyataan bahwa kode sumber tersedia untuk umum, penggunaan HTK untuk membuat sistem untuk pengguna akhir dilarang oleh lisensi, itulah sebabnya toolkit ini tidak populer saat ini. Sistem ini juga memiliki kecepatan dan akurasi yang relatif rendah.

Dalam artikel "Analisis komparatif sistem pengenalan ucapan sumber terbuka" ( https://research-journal.org/technical/sravnitelnyj-analiz-sistem-raspoznavaniya-rechi-s-otkrytym-kodom/ ), sebuah penelitian dilakukan selama semua sistem dilatih dalam kasus bahasa Inggris (160 jam) dan diterapkan dalam kasus uji kecil 10 jam. Alhasil, ternyata Kaldi memiliki akurasi pengenalan tertinggi, sedikit lebih cepat dari kompetitornya dalam hal kecepatan. Selain itu, sistem Kaldi mampu menyediakan pengguna dengan pilihan algoritma terkaya untuk berbagai tugas dan sangat mudah digunakan. Pada saat yang sama, penekanan diberikan pada fakta bahwa bekerja dengan dokumentasi mungkin tidak nyaman bagi pengguna yang tidak berpengalaman, karena Ini dirancang untuk para profesional pengenalan suara. Tetapi secara umum, Kaldi lebih cocok untuk penelitian ilmiah daripada rekan-rekannya.

Cara menginstal Kaldi


  1. Unduh arsip dari repositori di https://github.com/kaldi-asr/kaldi :
  2. Buka paket arsip, buka kaldi-master / tools / ekstra.
  3. Kami menjalankan ./check_dependencies.sh:

    Jika setelah itu Anda melihat tidak "semua baik-baik saja", maka buka file kaldi-master / tools / INSTALL dan ikuti instruksi di sana.
  4. Kami mengeksekusi make (berada di kaldi-master / tools, bukan di kaldi-master / tools / ekstra):
  5. Pergi ke kaldi-master / src.
  6. Kami menjalankan ./configure - shared, dan Anda dapat mengonfigurasi instalasi dengan atau tanpa teknologi CUDA dengan menentukan path ke CUDA yang terinstal (./configure --cudatk-dir = / usr / local / cuda-8.0) atau mengubah nilai awal β€œya "To" no "(./ configure --use-cuda = no) secara berurutan.

    Jika pada saat yang sama Anda melihat:



    baik Anda tidak mengikuti langkah 4, atau Anda perlu mengunduh dan menginstal OpenFst sendiri: http://www.openfst.org/twiki/bin/view/FST/FstDownload .
  7. Kami membuat ketergantungan.
  8. Kami menjalankan make -j. Disarankan agar Anda memasukkan jumlah inti prosesor yang benar yang akan Anda gunakan saat membangun, misalnya, membuat -j 2.
  9. Sebagai hasilnya, kita mendapatkan:

Contoh menggunakan model dengan Kaldi diinstal


Sebagai contoh, saya menggunakan model kaldi-ru versi 0.6, Anda dapat mengunduhnya dari tautan ini :

  1. Setelah mengunduh, buka file kaldi-ru-0.6 / decode.sh dan tentukan path ke Kaldi yang terinstal, sepertinya ini untuk saya:


  2. Kami meluncurkan model, menunjukkan file di mana pidato akan dikenali. Anda dapat menggunakan file decoder-test.wav, ini adalah file khusus untuk tes, itu sudah ada di folder ini:


  3. Dan inilah yang diakui oleh model:

Algoritma apa yang digunakan, apa yang mendasari pekerjaan?


Informasi lengkap tentang proyek ini dapat ditemukan di http://kaldi-asr.org/doc/ , di sini saya akan menyoroti beberapa poin utama:

  • Baik MFCC akustik (Koefisien Koefisien Frekuensi Mel) atau PLP yang sedikit kurang populer (Prediksi Linier Perseptual - lihat H. Hermansky, β€œAnalisis perkalian linear prediktif (PLP)” digunakan untuk mengekstraksi fitur akustik dari sinyal input. Pada metode pertama, spektrum sinyal asli dikonversi dari skala Hertz ke skala chalk, dan kemudian koefisien cepstral dihitung menggunakan invers cosine transform (https://habr.com/en/post/140828/). Metode kedua didasarkan pada representasi regresi pidato: model sinyal dibangun yang menggambarkan prediksi sampel sinyal saat ini dengan kombinasi linier - produk sampel input dan output sinyal yang diketahui dan koefisien prediksi linier. Tugas menghitung tanda-tanda bicara dikurangi untuk menemukan koefisien-koefisien ini dalam kondisi tertentu.
  • Modul pemodelan akustik mencakup model Markov tersembunyi (HMM), model campuran distribusi Gaussian (GMM), jaringan saraf dalam, yaitu Time-Delay Neural Networks (TDNN).
  • Pemodelan bahasa dilakukan dengan menggunakan mesin negara terbatas, atau FST (finite-state transducer). FST mengkodekan pemetaan dari urutan karakter input ke urutan karakter output, dan ada bobot untuk transisi yang menentukan kemungkinan menghitung karakter input dalam output.
  • Decoding dilakukan menggunakan algoritma forward-reverse.

Tentang membuat model kaldi-ru-0.6


Untuk bahasa Rusia, ada model pengenalan pra-terlatih yang dibuat oleh Nikolai Shmyryov, juga dikenal di banyak situs dan forum sebagai nsh .

  • Untuk mengekstraksi fitur, metode MFCC digunakan, dan model akustik-fonetik itu sendiri didasarkan pada jaringan saraf tipe TDNN.
  • Sampel pelatihan adalah soundtrack video dalam bahasa Rusia, diunduh dari YouTube.
  • Untuk membuat model bahasa, kami menggunakan kamus CMUdict dan persis kosa kata yang ada di set pelatihan. Karena fakta bahwa kamus berisi pengucapan yang sama dari kata-kata yang berbeda, diputuskan untuk menetapkan nilai "probabilitas" pada setiap kata dan menormalkannya.
  • Untuk mempelajari model bahasa, kerangka kerja RNNLM (model bahasa jaringan saraf berulang) digunakan, berdasarkan, seperti namanya, pada jaringan saraf berulang (bukan N-gram lama yang baik).


Perbandingan dengan Google Speech API dan Yandex Speech Kit


Tentunya, salah satu pembaca, ketika membaca paragraf sebelumnya, memiliki pertanyaan: oke, kami tahu bahwa Kaldi lebih unggul daripada rekan-rekan langsungnya, tetapi bagaimana dengan sistem pengenalan dari Google dan Yandex? Mungkin relevansi kerangka kerja yang dijelaskan sebelumnya diragukan jika ada alat dari dua raksasa ini? Pertanyaannya sangat bagus, jadi mari kita coba!

  • Sebagai dataset, kami mengambil catatan dan dekripsi teks yang sesuai dari VoxForge yang terkenal jahat . Akibatnya, setelah setiap sistem mengenali 3677 file suara, saya menerima nilai WER (Word Error Rate) berikut:


  • Rekaman dari VoxForge kira-kira serupa dengan tidak adanya kebisingan latar belakang, intonasi, kecepatan bicara, dll. Mari menyulitkan tugas: ambil suborpus validasi open_stt, yang mencakup percakapan telepon, klip audio dari video YouTube dan buku audio, dan evaluasi kinerja menggunakan WER dan CER (Character Error Rate).

    Setelah menerima transkrip teks, saya perhatikan bahwa Google dan Yandex (tidak seperti Kaldi) mengenali kata-kata seperti
    "Satu" sebagai "1". Oleh karena itu, ada kebutuhan untuk memperbaiki kasus-kasus seperti itu (seperti dalam transkrip referensi yang disediakan oleh penulis open_stt, semuanya disajikan dalam bentuk surat), yang mempengaruhi hasil akhir:



Kesimpulannya, kita dapat mengatakan bahwa semua sistem mengatasi tugas pada tingkat yang kira-kira sama, dan Kaldi tidak kalah dengan Yandex Speech Kit dan Google Speech API. Dalam kasus kedua, Yandex Speech Kit memiliki kinerja terbaik, seperti itu paling baik mengenali file audio pendek dibandingkan dengan pesaing yang tidak dapat mengenali bagian mana pun dari mereka (untuk Google, jumlah file ini bahkan terlalu besar). Akhirnya, perlu dicatat bahwa Kaldi membutuhkan waktu lebih dari 12 jam untuk mengenali 28111 file, sistem lain dikelola dalam waktu yang jauh lebih sedikit. Tetapi pada saat yang sama, Yandex Speech Kit dan Google Speech API adalah "kotak hitam" yang bekerja di tempat yang jauh, jauh di server orang lain dan tidak dapat diakses untuk penyetelan, tetapi Kaldi dapat disesuaikan dengan spesifikasi tugas yang ada - kosa kata khas (profesionalisme, jargon, bahasa gaul sehari-hari), fitur pengucapan, dll. Dan semua ini gratis dan tanpa SMS! Sistemnya adalah semacam perancang, yang kita semua dapat gunakan untuk membuat sesuatu yang tidak biasa dan menarik.

Saya mengucapkan terima kasih kepada tim Yandex.Cloud , yang membantu saya dalam implementasi pengenalan kasus open_stt .

Saya bekerja di laboratorium APDiMO NSU:
Situs web: https://bigdata.nsu.ru/
VK Group: https://vk.com/lapdimo

Source: https://habr.com/ru/post/id470696/


All Articles