- Untuk membantu latihan pelafalan dan nada bahasa Mandarin, saya membuat sendiri model suara berbasis CTC dengan 9M parameter yang dilatih menggunakan sekitar 300 jam data suara
- Menggunakan arsitektur encoder Conformer untuk menangkap sekaligus ciri suara lokal dan konteks global, serta tokenisasi unit Pinyin+nada agar kesalahan pelafalan bisa dibedakan dengan jelas
- Melalui CTC loss, model mengevaluasi apa yang benar-benar diucapkan pengguna pada tingkat frame, lalu melakukan penyelarasan waktu dengan algoritme Viterbi
- Bahkan setelah ukuran model diperkecil dari 75M→9M, hampir tidak ada penurunan akurasi, dan setelah kuantisasi INT8 ukurannya menjadi sekitar 11MB sehingga bisa langsung dijalankan di browser web
- Demo berbasis browser menunjukkan potensi sistem koreksi pelafalan on-device, dan peningkatan kualitas data menjadi kunci utama untuk peningkatan performa ke depan
Gambaran umum model evaluasi pelafalan
- Untuk mengatasi kesulitan belajar pelafalan bahasa Mandarin, penulis melatih sendiri model suara kecil untuk memberi skor pelafalan
- Menggunakan sekitar 300 jam data suara bertranskrip (AISHELL-1, Primewords)
- Disediakan dalam bentuk yang bisa langsung dijalankan di browser
- Metode visualisasi pitch yang sudah ada tidak stabil karena noise, perbedaan cara bicara, dan faktor lain, sehingga pendekatan berbasis data terbukti lebih efektif
- Tujuannya adalah mewujudkan sistem on-device Computer-Assisted Pronunciation Training (CAPT) tanpa API komersial
Struktur model dan metode pelatihan
- Mengadopsi struktur encoder Conformer + CTC loss
- CNN menangkap ciri akustik pada rentang waktu pendek (misalnya
zh vs z)
- Transformer menangani pola nada yang bergantung pada konteks (misalnya tone sandhi)
- Metode CTC menghasilkan distribusi probabilitas per frame sehingga fonem yang benar-benar diucapkan bisa dievaluasi secara langsung
- Menggunakan token `` untuk menyelaraskan pengulangan dan jeda
- Mencerminkan apa yang benar-benar diucapkan tanpa koreksi otomatis
Tokenisasi dan penyelarasan
- Kombinasi Pinyin+nada didefinisikan sebagai satu token
- Contoh:
zhong1 dan zhong4 adalah token yang berbeda
- Nada netral diseragamkan menjadi tone 5 (
ma5)
- Total 1.254 token +
,
- Algoritme Viterbi menghitung jalur optimal antara frame suara dan token
- Contoh: saat mengucapkan “Nǐ hǎo”, segmen
ni3 dan hao3 dapat dibedakan
Perampingan model dan performa
- Model awal dengan 75M parameter diperkecil hingga 9M
- 75M: TER 4.83%, Tone Accuracy 98.47%
- 9M: TER 5.27%, Tone Accuracy 98.29%
- Penurunan akurasi sangat kecil, yang menunjukkan ini adalah tugas yang data-bound
- Model FP32 (37MB) diperkecil menjadi 11MB dengan kuantisasi INT8
- Bisa langsung dimuat di browser melalui
onnxruntime-web
Kesalahan penyelarasan dan perbaikannya
- Muncul masalah ketika segmen hening mengganggu evaluasi pelafalan
- Contoh: 1 detik hening sebelum pengucapan “我喜欢…” salah disejajarkan sebagai
wo3, sehingga dinilai 0
- Solusi: mengeluarkan frame hening dari perhitungan skor
- Memfilter frame dengan probabilitas `` sebesar 0.7 atau lebih
- Setelah diperbaiki, skor kepercayaan suku kata pertama meningkat dari 0.0 → 0.99
Hasil dan keterbatasan
- Selama beta test, efek koreksi pelafalan terasa nyata
- Model memberi penilaian dengan sangat ketat
- Suara penutur asli dan anak-anak menunjukkan penurunan akurasi
- Data AISHELL terutama berupa suara gaya membaca, sehingga ada perbedaan kecepatan dan intonasi
- Ke depan perlu menambahkan data percakapan seperti Common Voice
- Demo web berukuran sekitar 13MB, dan menyediakan fungsi koreksi pelafalan penuh dengan ukuran yang lebih ringan daripada kebanyakan situs web
1 komentar
Komentar Hacker News
Terima kasih untuk proyek yang benar-benar keren ini
Namun, terasa aneh bahwa dalam kalimat “我想学中文”, “wén” dikenali sebagai “guó”
Ini tampaknya menunjukkan bahwa model mempelajari struktur kata alih-alih nada. Sepertinya bias itu muncul karena “Zhōng guó” sering muncul di data latih
Seperti yang disebutkan dalam tulisan blog, ini tampaknya bukan model yang memberi tahu pelafalan yang benar-benar saya ucapkan, melainkan struktur yang memetakan ke yang paling dekat dari 1254 suku kata yang mungkin
Meski begitu, saya suka pendekatan pembelajaran yang berpusat pada suara seperti ini. Pembelajaran berbasis tulisan membingungkan karena sistem penulisannya berbeda di tiap negara. Bagi pemula, bahkan pinyin pun punya banyak simbol yang membingungkan
Idenya dan UI-nya intuitif, jadi sangat mengesankan
Tetapi bahkan saya yang berasal dari Beijing dan menguasai bahasa Mandarin standar dengan sempurna pun sulit lolos soal yang mudah
Pada contoh “你好吃饭了吗”, pengenalan nadanya salah, dan “了” dalam konteks itu seharusnya “le”, bukan “liǎo”
Banyak orang khawatir soal nada, tetapi dalam praktiknya, komunikasi tetap tidak terlalu terganggu walau nada tidak sempurna
Karena intonasi berbeda di tiap daerah, orang-orang tetap saling mengerti meski nada tercampur. Saya merekomendasikan pembelajaran yang berpusat pada konteks dan tidak terlalu terobsesi pada nada
Alasan orang masih bisa berkomunikasi walau dialek daerah berbeda adalah karena 1) perbedaan nada antardaerah yang berdekatan tidak terlalu besar, dan 2) saat tidak saling paham, mereka beralih ke bahasa standar (Putonghua)
Alasan bahasa Mandarin bisa eksis seperti sekarang justru karena sistem nadanya. Jika nadanya salah, komunikasi hampir mustahil
Namun, salah satu alasan Tiongkok berkomunikasi dengan berpusat pada tulisan adalah karena pelafalan dan nada berbeda di tiap daerah, sehingga suara saja sering tidak cukup untuk saling memahami
Memotivasi orang untuk mengabaikan nada itu berbahaya. Jika nada memang tidak penting, seharusnya sudah hilang sejak lama
Saat konteksnya sempit, kebingungan mudah terjadi, jadi nada tetap krusial. Selain itu, perlu pengayaan data karena “吃” dikenali sebagai “shi2”
Sebagai pelajar tingkat menengah, saya membuat akun baru hanya untuk meninggalkan umpan balik
Saat bicara cepat, pelacakan fonemnya kurang bagus dan pengenalan nadanya meleset
Misalnya, jika saya mengucapkan “他是我的朋友” dengan kecepatan alami, “我” kadang dikenali sebagai “de” atau “是” diproses sebagai “si”
Jika diucapkan pelan dan jelas, hasil pengenalannya akurat
Fenomena seperti perubahan nada berturut-turut pada nada ketiga (tone sandhi) juga perlu diperhitungkan. Diperlukan fitur yang bisa menangani pelafalan dalam percakapan alami
Bagi penutur bahasa Eropa, mempelajari bahasa Mandarin atau bahasa bernada lainnya itu sangat sulit
Telinga mereka tidak terbiasa dengan nada, jadi mereka merasa sudah mengucapkannya dengan benar padahal penutur asli tidak memahaminya
Dalam bahasa Inggris, vokal berubah-ubah menurut daerah, dan sulit membedakan hal seperti “done vs down”, “beat vs bit”
Sebaliknya, bahasa Spanyol punya vokal yang sederhana sehingga jauh lebih mudah dipelajari
Saat belajar pitch accent bahasa Jepang, awalnya saya sama sekali tidak bisa merasakan perbedaannya, tetapi dengan latihan berulang akhirnya mulai terdengar
Saya mulai memahami polanya setelah sadar bahwa bahasa Inggris juga punya pola pitch, seperti pada “uh-oh”
Terutama kebiasaan mengekspresikan ketidakpastian dengan intonasi gaya bahasa Inggris yang menjadi masalah
Nada dan tata bahasa adalah dasar yang dipelajari di awal, lalu selama bertahun-tahun sesudahnya sebagian besar usaha terserap untuk menghafal kata
Kesulitan sejati bahasa Mandarin adalah minimnya kosakata bersama dan sistem tulisan yang nonfonemis
Ini hanya bekerja baik saat berbicara per kata; pada tingkat kalimat atau kecepatan alami, salah pengenalannya banyak
Saya penutur asli dengan sertifikat Putonghua level 2A, tetapi tetap muncul kesalahan jika saya bicara santai
Model ini tidak bisa membedakan percakapan sehari-hari dan pelafalan formal
Saat belajar di Taiwan, saya berlatih menggambar kurva nada dengan tangan agar bisa mengingat nada
Saya tampak seperti orang asing gila, tetapi efeknya benar-benar nyata
Karena perbedaan aksen daerah juga besar, akan bagus kalau data acuan dikumpulkan per penutur asli
Saya menyesal dulu tidak menirunya
Saya penutur asli, tetapi demo ini tidak bisa mengenali pelafalan saya
Mungkin karena kebisingan latar belakang. Putri saya sedang menonton kartun di sebelah
Proyek ini benar-benar keren, tetapi saya ingin menyarankan agar jangan terlalu bergantung pada umpan balik eksternal
Inti koreksi pelafalan adalah melatih telinga. Bahkan pelajar dewasa masih punya neuroplastisitas, jadi telinga bisa dilatih lewat latihan mendengar pasangan minimal dan sejenisnya
Dengan begitu, bukan hanya pelafalan yang membaik, tetapi juga kemampuan menyimak dan kecepatan menyerap kosakata meningkat besar
Dibanding SST, sinkronisasi teks-audio (gaya karaoke) jauh lebih efektif
Metode agar pengguna mendengar suaranya sendiri ditumpuk dengan audio asli lalu mengenali perbedaannya sendiri sangat berguna untuk belajar
Daripada menghafal nada tiap kata, meniru pelafalan penutur asli apa adanya terasa jauh lebih alami
Sangat mengesankan bahwa semuanya berjalan langsung di browser dengan ONNX Runtime Web
Pendekatan yang mengisolasi masalah nada saja dengan metode forced alignment, tanpa menebak makna, sangat cerdas
Pada versi mendatang, akan lebih berguna untuk latihan kecepatan percakapan jika perubahan nada (sandhi) ditambahkan sebagai tahap pascapemrosesan
Akan bagus jika ada mode pinyin. Saya hanya belajar berbicara dan tidak belajar membaca huruf Mandarin
Saya sedang menata kosakata dengan web app flashcard yang saya buat