kekavigi.xyz

Penelitian Kecil-Kecilan

Membuat stemmer Bahasa Indonesia.

Ditulis tanggal oleh A. Keyka Vigiliant. Revisi terakhir pada tanggal . Konten diterbitkan dibawah lisensi CC BY-SA 4.0.


Ini bermula dari ide membuat aplikasi kamus. Entah kenapa, menjadi sesuatu yang dapat1 memperbaiki kualitas information retrieval di Indonesia.

Latar Belakang

Jadi, setelah beberapa hari tinggal di Balikpapan, setelah bernostalgia dengan suara masjid-masjid disini tentunya, saya terpikir untuk membuat aplikasi kamus bahasa Indonesia. Namun, kamus yang berbeda, karena yang kamus saya buat ialah  kamus yang dapat menemukan kata yang paling cocok menggambarkan input kalimat user ketimbang menemukan definisi dari sebuah kata. Hipotesis awal saya, jika user menuliskan “keadaan tanpa adanya masalah”, aplikasi nanti akan memberikan jawaban berupa kata “bebas”, “merdeka”, dan entah apa lagi. Entah kesurupan apa saya waktu itu, sampai bisa berpikir seperti ini. Sepertinya saya awalnya memikirkan tentang sesuatu yang jauh lebih penting… namun malang itu malah saya lupakan.

Setelah memikirkannya beberapa jam, saya menjadi bimbang untuk mengeksekusinya. Di satu sisi, saya tertarik apakah di internet ada ide yang gila untuk ngelakukan ini. Lagipula saya belum melihat secara langsung kamus semacam ini, ada di alam liar. Di sisi lain, mengingat fakta kamus ini mau tidak mau akan menggunakan KBBI, membuat saya ‘mulas’.2 Dulu, bahkan sebelum gathering FMIPA 1.0, saya pernah membuat bot LINE untuk grup angkatan saya. Bangsat, niat banget waktu itu.3

Sesuatu sejak pembuatan bot LINE yang saya kutuk adalah, betapa buruknya kualitas kamus bangsa kita. Setidaknya kualitas data mentah kamus KBBI yang dapat diakses oleh publik. Saya ngomong demikian karena bot LINE saya memiliki keyword untuk mencari definisi suatu kata. Lha, kenapa ngga minta tolong Badan Bahasa untuk membagikan data mentah KBBI V? Well, andaikan mereka peduli untuk melakukan, banyak peneliti tentunya sudah riang gembira. Banyak kesimpulan di artikel-artikel ilmiah yang ditulis dengan mantap dan percaya diri. Dan saya post kali ini tidak akan panjang-panjang amat.

Tapi pada akhirnya saya memutuskan untuk mengeksekusi ide saya. Awalnya saya menghabiskan beberapa hari untuk mencoba memperbaiki database kamus KBBI III yang ada di Internet, sebelum akhirnya “fuck saya give up”. Lalu aplikasi saya berubah haluan untuk hanya berfokus ke bahasa Inggris, karena saya pikir, suasana pasti lebih baik. Ternyata, beda bahasa, beda kamus, beda pula masalahnya. Mungkin saya mengunduh versi kamus yang salah, atau apakah memang untuk semua database kamus bahasa Inggris yang tersedia di internet, definisi satu kata dapat mencapai sampai 5-7 kalimat?

Harusnya saya sadar, jangan masokis tolol. Namun entah kenapa saya tetap memilih untuk melanjutkan membuat aplikasi ini yang sebenarnya belum benar-benar dimulai. Saya menemukan ide hebat untuk mencari kemiripan dua kalimat: ubah kedua kalimat tersebut menjadi objek matematika abstrak bernama vektor, dan lakukan pengukuran jarak terhadap dua vektor tersebut. Kalimat pertama adalah kalimat yang dimasukkan oleh pengguna, dan kalimat kedua adalah kalimat definisi di kamus. Kita akhirnya tinggal melempar kata dengan kalimat definisi yang paling mirip dengan kata input.

Whoa. Dari sana saya menemukan istilah istilah hebat yang butuh beberapa bab textbook untuk dapat memahaminya: TF-IDF, WMD, WordNet, Cosine Similarity dan lain sebagainya. Namun satu hal yang hampir selalu muncul: istilah “stemming”.

Naon?

Jadi, secara sederhana, stemming adalah proses mengubah kata berimbuhan menjadi kata dasarnya. Seperti “kesewenang-wenangan” menjadi kata “wenang”. Hal ini mempermudah proses menghitung jarak antara dua vektor (a.k.a dua kalimat). Mudahnya sih gitu, kalau kurang puas, dipersilahkan mencari jawaban di Internet.

Saya pikir, oh great. Now show me the code biar saya dapat copy-paste. Lalu OMG i’m so fucked up, saya nyerah ya Tuhan. Saya gatau cara melanjutkan bagian ini. Ini bagian penuh dengan kekecewaan. Seperti jatuh, tertimpa tangga, lalu patah tulang belakang.

Selintas terpikir di benak saya, apakah ada stemming untuk bahasa Indonesia? Ternyata baru sangat sedikit, seperti baru ada sekitar tiga algoritma. Dan, kualitasnya saya rasa masih bisa ditingkatkan. Yang menarik adalah setelah membaca tesis milik Asian, yang membuat modifikasi algoritma NAZIEF-ADRIANI sehingga dapat menstem dengan akurasi 95%.

Tapi hey! di Indonesia baru ada sedikit algoritma untuk stemming! There is nothing to stop someone for inventing whole new algorithm… kecuali tentu saja akurasi 95% itu: nyaris mustahil untuk menemukan algoritma yang lebih baik daripada itu.

Perkembangan Sekarang

Aktivitas saya berubah dari membuat program kamus ke program stemmer. Ide algoritma stemmer saya somehow mirip dengan ide algoritma let me check their names, AHMAD-YUSOFF-SUMBOK dan IDRIS. Perbedaannya, dua algoritma tersebut dikembangkan untuk bahasa Malaysia, bukan Indonesia. See, menerapkan algoritma bahasa Malaysia ke bahasa Indonesia sudah cukup untuk menjadi topik skripsi yang bagus, karena belum ada satupun yang melakukannya.

Lebih lanjut, saya mencoba menggunakan analisis morfologi untuk mengecek bentuk stemming yang tidak mungkin. Misalnya, pada kata ‘pembacokan’. Ada dua cara mengubah ini menjadi kata dasar yang ada di kamus: “pe-bacok-an’ dan ‘pe-baco-kan’. Bentuk yang awal terasa wajar, karena itu mirip dengan kata berimbuhan seperti “penulisan”, “pemukulan”, dan lain sebagainya. Namun bentuk yang terakhir aneh, karena ‘baco’ termasuk kata benda. “pembukukan”?  ”pembentukkan”? Aneh.

Mengambil lemmatizer.py dari proyek Spacy, yang berisi kamus hubungan kata imbuhan dengan kata dasar seperti memaki-maki : maki, untuk proses pengecekan, memberikan hasil yang unik.

Saya berhasil membuat stemmer yang secara literal, yang dapat men-stem semua kata selama kata tersebut tidak sangat saltik. Sayangnya, pada banyak kasus, tidak dapat memilih bentuk yang benar. Contohnya “pengecekan”, apakah itu artinya proses meng-“cek” atau proses meng-“kecek”? Hal ini mungkin baru dapat ditentukan dari konteks kalimatnya.

Jadi, terbentuklah sebuah stemmer yang success rate-nya 99.32%, tetapi hanya 80% memberikan solusi tunggal. Mungkin ini waktu yang cocok untuk menyaluti Asian, karena pada akhirnya, algoritma beliau lebih baik daripada saya.

Selanjutnya?

Saya tidak menyerah. Setelah sampai di Bandung, saya akan mempelajari morfologi bahasa Indonesia, algoritma karena waktu eksekusi kode saya delapan kali lebih lambat daripada milik Asian, dan mencoba menggunakan database KBBI V entah bagaimana caranya.

Cheers.

Catatan kaki

  1. Dengan peluang sangat-sangat kecil untuk berhasil. 

  2. Jika Anda pernah mencoba berurusan dengan kamus KBBI (sebagai programmer), Anda mengerti maksud saya. 

  3. Sekali lagi, Anda pasti dapat mengerti maksud saya jika Anda pernah mencoba berurusan dengan kamus KBBI (sebagai programmer).