Instalasi
Instalasi kaldi adalah proses pertama, dan bisa jadi, tersulit. Jika anda "SUCCESS" menginstall Kaldi, proses selanjutnya akan mudah. Jika tidak, akan terhenti. Berikut adalah dasar alur kerja setelah meng-clone Kaldi.Pertama clone Kaldi ke direktori PC kita.
git clone https:/github.com/kaldi-asr/kaldiAlur dasar instalasi:
1. Pada direktori tools
less INSTALL ./extras/check_dependencies.sh makeJika tidak ada masalah saat `check_dependencies` anda bisa melanjutkan ke `make`, jika tidak, selesaikan apa kekuarang dari persyaratan instalasi tersebut (bisa berupa library atlas, blas, dll). Kemudian, `make` lagi. Bisa juga make ditambahkan opsi `-j` jika running pada multicore CPU (umumnya), dan menspesifikasi compiler CXX (C++) jika tidak ingine menggunakan default ubuntu, misal `CXX=g++-5.0 make`. Saya menggunakan `CXX=g++-6.0` karena CUDA yang saya pakai (9.0) tidak komptaibel dengan GCC-7, bawaan default Ubuntu. 2. Pada direktori SRC
less INSSTALL ./configure --share make depend -j 8 make -jBanyak argument yang ditambahkan pada saat `configure`, misalnya direktori CUDA, libatlas dll. Contoh:
./configure --shared --use-gpu=noNamun umumnya Kaldi sudah mengenali jika PC kita menggunakan GPU/tidak, dimana letak library dll. Jadi, gunakan alur dasar di atas dahulu, jika error, coba gunakan argumen yang sesuai. Saya sendiri tidak langsung berhasil saat instalasi Kaldi, butuh beberapa hari (plus luck!) untuk berhasil menginstallnya. Silahkan baca pertanyaan saya di grup Kaldi ini. Jika telah berhasil terinstall (tidak ada error), check instalasi anda dengan:
make testPastikan semua output textnya menampilkan kata "SUCCESS" untuk tiap library Kaldi, contoh:
$ make test Running matrix-lib-test ... 2s... SUCCESS matrix-lib-test Running sparse-matrix-test ... 0s... SUCCESS sparse-matrix-test ...Inilah kenapa saya menyatakan harus "SUCCESS" menginstal Kaldi sebelum menggunakannya.
Troubleshooting
Diantara beberapa error yang saya hadapai, error-error berikut adalah yang paling vital. Saya copy-pastekan beserta solusinya dalama bahasa Inggris agar searchable di Google.1. Error when "make test" on src/matrix.
Error message:
... FAIL matrix-lib-testDig more to find what actually broke. Use valgrind: "valgrind matrix-lib-test"
Output:
./matrix-lib-test: symbol lookup error: libkaldi-matrix.so: undefined symbol: clapack_sgetrf ==4035== ==4035== HEAP SUMMARY: ==4035== in use at exit: 16,256 bytes in 46 blocks ==4035== total heap usage: 58,566 allocs, 58,520 frees, 8,833,488 bytes allocated ==4035== ==4035== LEAK SUMMARY: ==4035== definitely lost: 0 bytes in 0 blocks ==4035== indirectly lost: 0 bytes in 0 blocks ==4035== possibly lost: 5,472 bytes in 19 blocks ==4035== still reachable: 10,784 bytes in 27 blocks ==4035== suppressed: 0 bytes in 0 blocks ==4035== Rerun with --leak-check=full to see details of leaked memory ==4035== ==4035== For counts of detected and suppressed errors, rerun with: -v ==4035== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
So the culprit is LAPACK.
Solution: Reinstall again liblapack via libatlas and libopenblas using apt-get or other method.
2. Error:
Iteration stops on run_tdnn.sh no memory
Solution:
You shouldn't really be running multiple jobs on a single GPU. If you want to run that script on a machine that has just one GPU, one way to do it is to set exclusive mode via:
sudo nvidia-smi -c 3
and to the train.py script, change the option "--use-gpu=yes" to "--use-gpu=wait" which will cause it to run the GPU jobs sequentially, as each waits till it can get exclusive use of the GPU.
3.Errror:
"Refusing to split data for number of speakers"
Solution:
You didn't provide enough info, but in general, you cannot split the directory in more parts than the number of speakers is. So if you called the decoding with -nj 30 and you have 25 speakers (you can count lines of the spk2utt file) this is the error you receive. So try to change number of speaker: value of argument "-nj" (30 in that example).
TDNN
Kaldi menggunakan TDNN sebagai classifier. TDNN merupakan kependekan dari "time delay neural network". Idenya adalah untuk mengurangi waktu komputasi pada feed forward network atau RNN yang cukup menguras sumber daya komputasi. Alih-alih memasukkan input pada jaringan secara bersamaan, input pada tiap layer dapat dimasukkan secara serial atau sekuensial.Contoh riilnya jika kita punya input gambar dengan ukuran 28 x 28 piksel. Jika menggukanan DNN kovensional (misal MLP, multilayer perceptron), maka pada input layer kita memiliki 784 nodes (hasil kali 28 dengan 28). Dengan time delay neural network, citra piksel yang kita masukkan pada input layer hanya 28 piksel (baris pertama) pada satu waktu, 28 piksel pada waktu selanjutnya dan seterusnya sampai selesai. Sehingga, pada kasus tersebut kita hanya punya 28 node.
Pada pengenalan sinyal suara, maka inputnya berupa MFCC. Dalam hal ini ukuran datanya adalah 39 (jumlah fitur) dikali dengan panjang segment. Maka pada tiap satu waktu, TDNN memasukkan memasukkan fitur tersebut per waktu, jika tanpa subsampling. Jika dengan menggunakan subsampling, maka fitur pada konteks tersebut saja yang diambil, misal {-1, 1}. Pada contoh tersebut, hanya waktu t+1 dan t-1 saja fitur diambil. Penjelasan lebih lanjut tentang cara kerja TDNN ini bisa dibaca di paper saya yang juga disertakan di repo Github saya untuk uji coba kaldi dengan dataset bahasa Indonesia ini.
Pada gambar di bawah ini gambar warna merah adalah arsitektur TDNN menggunakan sampling {-1, 1} untuk semua layer. Jika tidak menggunakan subsampling, yang dipakai adalah gambar hitam dan merah.
Arsitektur TDNN dengan 6 layer: warna merah menunjukkan subsampling {-1, 1} |