Jaringan saraf kita dapat melakukan ini, mengenali seseorang dengan satu suku kata yang diucapkan. Namun, topik artikel ini tidak terkait langsung dengan identifikasi suara, meskipun akan terkait dengan itu. Kita akan berbicara tentang fitur jaringan saraf, yang disebut vektor-d, yang dapat digunakan dalam tugas pemrosesan suara: dari verifikasi hingga pengenalan suara dan emosi.
Materiel
Bergantung pada laju pengambilan sampel, satu detik suara dapat berisi dari 8 hingga 48 ribu angka. Mereka dapat direpresentasikan sebagai penyimpangan dari posisi keseimbangan membran speaker atau mikrofon. Faktanya, uraian bunyi seperti itu berlebihan: amplitudo sinyal pada saat berikutnya sangat bergantung pada yang sebelumnya, yang mengisyaratkan fakta bahwa sinyal ini dapat dikompresi secara efektif tanpa banyak kehilangan informasi. Ada sejumlah besar cara untuk mengurangi dimensi sinyal, dan sebagian besar didasarkan pada sifat fisik suara dan karakteristik pendengaran manusia.
Meme 1.Sebelum jaringan saraf bekerja dengan baik (dalam arti luas), masyarakat bekerja dengan apa yang disebut atribut kerajinan tangan. Yang paling terkenal dan banyak digunakan adalah
Pitch dan
MFCC . Yang pertama memiliki arti fisik frekuensi osilasi pita suara, yang berbeda, misalnya, untuk orang yang berbeda, dan juga bergantung pada intonasi. Gagasan koefisien cepstral (MFCC) didasarkan pada non-linear persepsi manusia tentang suara, yaitu frekuensi dan volume. Tampaknya bagi seseorang bahwa satu suara lebih tinggi daripada yang lain dengan jumlah tertentu, jika dalam kenyataannya frekuensi mereka berbeda dengan jumlah kali tertentu.
Ini dan fitur-fitur lain yang dihitung secara manual tidak dapat dipulihkan dalam arti bahwa beberapa bagian dari sinyal hilang selamanya. Dalam beberapa tugas ini tidak kritis, tetapi saya ingin datang dengan pendekatan yang lebih universal dan bekerja.
Kunci untuk memecahkan masalah ini adalah transformasi Fourier. Menggunakannya, Anda dapat membayangkan sinyal audio sebagai jumlah gelombang dengan frekuensi dan amplitudo yang berbeda. Kenyataannya, ucapan tidak diam dalam arti bahwa spektrumnya akan berbeda secara kualitatif pada titik waktu yang berbeda. Ini memungkinkan kita untuk mempertimbangkannya dalam representasi frekuensi waktu, menggunakan
spektogram .
Untuk membangun spektogram, Anda perlu memecah suara menjadi bagian berpotongan (tumpang tindih frame) beberapa puluh milidetik panjangnya, untuk masing-masing menghitung transformasi Fourier dan menulis modul mereka dalam kolom pada spektogram. Selain itu, transformasi seperti itu hampir saling terbalik, yaitu, dengan menggunakan transformasi Fourier terbalik dan
algoritma Griffin-Lim, Anda dapat mengembalikan sinyal suara asli (pada kenyataannya, ada kehilangan informasi, karena transformasi Fourier kompleks dalam kasus umum, dan spektogram bernilai nyata, dan, untuk perkiraan pemulihan fase, algoritma iteratif Griffin-Lim biasanya digunakan). Total, jika kita mengambil logaritma amplitudo, kita mendapatkan gambar-gambar ini:
Spectrogram 5 detik bicara.Dan mereka dengan mudah diproses oleh jaring konvolusional.
Peretasan seperti ini sering digunakan dalam tugas pemrosesan gambar: ada basis data besar dengan contoh objek yang berbeda (misalnya, ImageNet). Anda dapat melatih kisi-kisi besar untuk mengenalinya, dan kemudian melatihnya kembali pada tugas khusus kami, atau mengambil hasil keluaran dari salah satu lapisan dalam yang terhubung sepenuhnya. Dipercaya bahwa arsitektur seperti itu akan menghitung fitur informatif yang bagus untuk gambar input. Pengalaman menunjukkan bahwa hampir selalu hasilnya akan lebih baik daripada jika kita melatih jaringan saraf dari awal.
Gagasan vektor-d (umumnya vektor-d, tetapi kadang-kadang disebut vektor-x) mirip dengan menggunakan kisi-kisi yang sudah dilatih sebelumnya di ImageNet, kecuali kenyataan bahwa tidak ada basis yang sama untuk spektogram. Sebagai jalan keluar yang mungkin, auto-encoders dapat dipertimbangkan, tetapi mereka apriori tidak tahu apa yang harus dicari dalam spektogram, karena itu mereka bekerja dengan tidak memuaskan.
Kita harus masuk lebih dalam
Perhatian, bagian utama dari artikel ini dimulai.
Tugas memverifikasi seseorang dengan suara dikenal secara luas, di mana perlu untuk menentukan oleh segmen input dari pidato mana dari orang-orang dalam database mengatakannya. Sebenarnya, pembangunan sistem semacam itu adalah ilmu yang terpisah, dan ada banyak tambahan yang berbeda (durasi bicara; apakah itu mengharuskan semua orang berbicara teks yang sama; pementasan satu lawan satu atau satu lawan semua), yang kritis dalam kondisi yang berbeda, tetapi bagi kami Anda perlu memperhatikan hal lain.
Yaitu: seberapa bagus fitur-fiturnya jika kita melatih awal grid untuk mengenali seseorang. Semuanya dilakukan demi tanda.
Ini akan membantu kami intuisi dan
artikel tahun 2015. Di dalamnya, penulis mengajarkan grid untuk mengenali seseorang dengan wajah (face recognition). Kunci dari pekerjaan ini adalah dengan menggunakan Triplet Loss.
Idenya sangat sederhana: kita menormalkan fitur-fitur dari lapisan kedua dari belakang sehingga mereka berbaring di unit sphere, dan mengharuskan titik-titik dari satu kelas terletak dekat dan jauh dari yang berbeda. Ini dapat dicapai sebagai berikut: untuk setiap contoh pelatihan (jangkar) kami menemukan dua lebih dari yang sama dan dari kelas lain dalam sampel - positif dan negatif. Kemudian untuk tiga kali lipat poin ini kami membentuk kerugian:
\ mulai {persamaan}
\ Besar [\ Vert f (x ^ a) - f (x ^ p) \ Vert - \ Vert f (x ^ a) - f (x ^ n) \ Vert + \ alpha \ Big] _ +,
\ end {persamaan}
di mana x adalah gambar input, f adalah output grid setelah normalisasi, alpha adalah parameter yang dipilih secara manual, [] _ {+} adalah fungsi ReLU. Secara kualitatif, nilai kerugian ini adalah nol jika jarak antara jangkar dan poin positif lebih besar dari jarak antara jangkar dan negatif oleh setidaknya alpha, dan semakin besar semakin sedikit perbedaan antara dua kelas yang berbeda.
Ilustrasi apa yang terjadi pada fitur setelah pelatihan dengan Triplet Loss.Omong-omong, Anda dapat membentuk tiga kali lipat dengan cara yang cerdas. Pada titik tertentu, besarnya kerugian akan menjadi kecil, dan untuk mempercepat pembelajaran, Anda dapat mencari contoh negatif tidak di antara semua kelas lainnya, tetapi pertimbangkan hanya mereka yang dekat dengan jangkar. Tetapi untuk dataset besar, ini sulit, karena Anda perlu mempertimbangkan jarak berpasangan antara kelas yang berubah setelah setiap iterasi pembelajaran jaringan.
Triplet Loss memiliki keunggulan dibandingkan Categorical Crossentropy, yang digunakan dalam klasifikasi konvensional. Model yang dilatih dengan lintas-entropi akan mencoba menjejalkan semua poin dari satu kelas ke area yang semakin kecil, dan informasi yang berlebihan untuk tugas tertentu mungkin hilang. Tetapi kami tidak menginginkan ini, karena kami akan menggunakan jaringan saraf sebagai generator fitur, dan bukan untuk verifikasi. Triplet Loss memiliki properti ini pada tingkat yang jauh lebih rendah: lebih penting baginya untuk menyebarkan kelas yang berbeda ke area yang berbeda pada satu bidang daripada harus menggunakan satu kelas.
Meme 2.Hal terakhir yang harus dilakukan sebelum melatih fitur generator pada spektrogram adalah menentukan ukurannya. Jelas, keakuratan klasifikasi akan semakin tinggi, semakin besar periode waktu yang akan kita pertimbangkan, tetapi semakin banyak tanda "rata-rata" akan muncul. Oleh karena itu, masuk akal untuk menggunakan panjang sinyal sedemikian sehingga 1-3 fonem (suku kata) masuk ke dalamnya - setengah detik sepertinya tepat.
Untuk pelatihan, kami mengambil dataset
VoxCeleb2 , di mana untuk masing-masing 6300 speaker ada beberapa rekaman audio terpisah masing-masing beberapa menit (dibuat dalam kondisi yang berbeda). Kami menggunakan sebagian dari file audio untuk pelatihan, dan sisanya untuk validasi, pilih arsitektur jaringan konvolusi, tambahkan Triplet Loss ke dalamnya dan pelajari.
Hasilnya sangat keren. Dalam hampir 2 minggu pelatihan di 1080Ti (ya, sudah lama), akurasi klasifikasi mencapai 55%. Tampaknya tidak terlalu banyak, tetapi keakuratan top-5 adalah 78%, dan jika kita menganggap hanya bagian paling keras dari fragmen, yang sebagian besar adalah vokal yang ditekankan, maka akurasi top-5 akan meningkat menjadi 91%. Kita dapat mengatakan bahwa kita dapat mengidentifikasi seseorang dengan salah satu frasa dengan akurasi yang layak. Tapi itu tidak masalah.
Meme 3.Bagaimanapun, semuanya dimulai untuk fitur-fitur yang dapat diperoleh sebagai jalan keluar dari yang kedua sebelum sebelum mengklasifikasikan lapisan jaringan saraf. Kami mengujinya pada tugas kami, dan di mana-mana hasilnya lebih baik daripada menggunakan pendekatan klasik untuk menghitung atribut. Sebagai contoh, dalam masalah pengenalan emosi, penggunaan vektor-d memungkinkan kita untuk memintas 4%, dan artikel terkait diterima di konferensi FICC 2019. Namun, pengenalan emosi adalah cerita yang sangat berbeda, yang akan kita bicarakan nanti.
Diposting oleh
Gregory Sterling sterling239 , Ahli Pembelajaran Jauh, Neurodata Lab.