Penjelasan Tambahan dari Wawancara DataPods

Pekan lalu, saya menjadi pembicara dalam podcast DataPods dari komunitas Data Science Indonesia. Episodenya dapat didengarkan di Spotify dengan judul episode Towards Indonesian Natural Language Processing. Pada tulisan ini, saya ingin memberikan beberapa penjelasan tambahan bagi jawaban-jawaban saya dalam episode tersebut. Tidak semua jawaban ada tambahannya; saya hanya mendaftar yang ada saja pada tulisan ini. Tulisan ini dapat dibaca setelah maupun sambil mendengarkan episode podcast tersebut. Semoga bermanfaat.

Bagaimana latar belakang pendidikan sampai bisa bekerja sebagai research scientist?

Saya kuliah S1 di Fasilkom UI jurusan Ilmu Komputer. Saat kuliah, saya sempat mengambil mata kuliah pilihan NLP yang diajar oleh Pak Ruli Manurung dan sejak saat itu saya jadi tertarik dengan NLP. Untuk kuliah kerja praktik, kebetulan saya berkesempatan untuk magang di National University of Singapore sebagai asisten riset junior di lab riset NLP di sana. Setelah magang, saya berangkat ke Jepang untuk mengikuti program pertukaran pelajar Young Scientist Exchange Program yang diadakan oleh Tokyo Institute of Technology. Di sana saya melakukan proyek penelitian di sebuah lab riset AI, namun topiknya bukan tentang NLP. Setelah itu saya pulang dan menyelesaikan studi S1 saya dengan tugas akhir seputar NLP juga di bawah bimbingan Pak Ruli. Setelah lulus kuliah S1, saya sempat bekerja sebagai software engineer di sebuah startup di Jakarta selama beberapa bulan. Namun, ternyata saya merasa lebih senang mengerjakan penelitian sehingga saya memutuskan untuk mengambil studi S2 di University of Edinburgh dalam bidang AI. Saya ambil kuliah-kuliah machine learning dan NLP di sana, dan di akhir studi, saya menulis tesis dengan topik penguraian sintaks di bawah bimbingan Frank Keller. Setelah lulus, saya kembali ke tanah air dan bekerja sampai sekarang sebagai research scientist di Kata.ai.

Preprocessing yang dilakukan biasanya bagaimana?

  1. Tokenisasi, memecah teks menjadi token-token penyusunnya. Contohnya, memecah kalimat menjadi kata-katanya.
  2. Membuang stopwords, yakni kata-kata yang tidak mengandung konten. Definisi ini masih sangat rancu karena apa yang dianggap konten bisa berbeda-beda tergantung penerapan/masalah yang dihadapi. Contoh daftar stopwords bahasa Indonesia dapat dilihat di sini.
  3. Mengubah menjadi huruf-huruf kecil, misalnya karena kita ingin model kita menganggap meja dan Meja adalah hal yang sama karena hanya beda kapitalisasi saja.
  4. Mengubah digit menjadi angka nol, misalnya karena kita tidak begitu peduli model kita bisa membedakan angka-angka.
  5. Memproses pencilan dengan cara-cara tertentu, misalnya mengubah URL menjadi token spesial @@URL@@ agar tidak terlalu panjang.
  6. Dan lain-lain.

Bagaimana cara memproses penulisan yang tidak baku?

Tambahan sedikit, salah satu cara agar model kita bisa lebih tangguh menghadapi variasi penulisan yang tidak baku adalah bisa dengan memasukkan fitur karakter, contohnya seperti pada paper kami ini.

Feature engineering di NLP biasanya bagaimana?

Fitur n-gram seperti yang saya jelaskan pada podcast akan lebih mudah dipahami dengan ilustrasi seperti ini. Misalkan ada 3 kalimat dalam korpus:

  1. nasi gorengnya enak
  2. ayam gorengnya enak
  3. nasi ayam tidak enak

Jika kita menggunakan unigram (1-gram) dan bigram (2-gram) sebagai fitur, maka fitur-fitur kita adalah:

  1. 1-gram: nasi, gorengnya, enak, ayam, tidak
  2. 2-gram: nasi gorengnya, gorengnya enak, ayam gorengnya, nasi ayam, ayam tidak, tidak enak

Jadi, total ada 11 fitur. Selanjutnya, kita dapat mengubah kalimat-kalimat pada korpus menjadi feature vector dengan panjang 11 yang tiap elemennya hanya bernilai 0 atau 1, dengan nilai 1 berarti fitur tersebut ada pada kalimat. Contohnya, kalimat pertama dapat diubah menjadi vektor \([1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0]\). Setelah semua kalimat diubah menjadi vektor seperti ini, teknik-teknik standar pemelajaran mesin dapat digunakan karena data kita sudah menjadi data tabular biner.

State-of-the-art models di NLP biasanya apa?

Beberapa tahun belakangan ini model jaringan saraf (neural network) yang biasanya mencapai akurasi paling tinggi di suatu masalah/dataset tertentu. Sebenarnya kalau dibandingkan dengan computer vision, peningkatan kinerja dengan beralih ke model jaringan saraf tidak sedrastis itu (setidaknya ini yang dosen saya dulu katakan di Edinburgh). Selain itu, model jaringan sarafnya juga tidak sedalam model-model di CV. Kalau di CV mungkin wajar kalau ada model dengan ratusan lapisan (atau malah ribuan?). Kalau di NLP, sepuluh lapisan saja sudah termasuk sangat dalam dan saya jarang menemukannya. Biasanya, untuk LSTM misalnya, paling hanya dua lapisan aja.

Apa saja pustaka (library) yang dipakai dari tahap riset sampai purwarupa (prototype) awal?

Selain NLTK, spaCy, dan PyTorch seperti yang saya jawab pada podcast, pustaka lain yang juga saya pakai adalah:

  1. Sacred untuk mengelola konfigurasi dan hasil eksperimen. Salah satu pustaka paling penting bagi saya dalam melakukan riset, entah kenapa saya bisa lupa kemarin. Sacred bisa menyimpan hasil eksperimen kita, lengkap dengan segala konfigurasinya, ke dalam basis data MongoDB (bisa dipilih yang lain).
  2. scikit-learn untuk menggunakan implementasi yang efisien dari model-model pemelajaran mesin yang tidak berbasis jaringan saraf.
  3. jupyter untuk melakukan kegiatan yang interaktif, seperti menggambar plot, menganalisis hasil eksperimen, dan melakukan exploratory data analysis.
  4. pymongo dan pandas untuk mengambil hasil eksperimen yang disimpan oleh Sacred, menampilkannya dalam bentuk tabular, dan menganalisisnya.
  5. org-mode pada Emacs untuk menulis jurnal penelitian.

Boleh jelaskan tentang paper Kata yang tentang out-of-vocabulary?

Setelah mendengarkan jawaban di podcast, ada baiknya membaca paper aslinya (setidaknya abstrak, introduction, dan conclusion saja) di http://aclweb.org/anthology/W18-6112.

Adakah saran untuk orang-orang yang ingin mulai di bidang ini?

Saran saya masih sama dengan yang saya jawab di podcast. Namun, ketika saya menyarankan untuk studi dan saya tahu tidak semua orang bisa, maksud saya “bisa” di sini adalah “berkesempatan”. Karena dulu saya belum ada tanggungan maupun komitmen lain, saya jadi punya kesempatan untuk bisa melanjutkan studi. Saya tahu tidak semua orang bisa begitu. Kalau sudah berkeluarga misalnya, bisa jadi ada pertimbangan-pertimbangan lain sehingga mengambil studi mungkin bukanlah pilihan terbaik. Jadi itulah yang saya maksud dengan “bisa” dalam konteks ini.

Selain itu, tambahan keuntungan lain dengan mengambil studi selain yang sudah saya jawab di podcast adalah adanya pengajar yang memang kompeten di bidangnya yang bisa kita tanya kalau kita menghadapi kesulitan. Bonus tambahan jika pengajar tersebut juga andal dalam mengajar sehingga materi yang sulit dapat kita pahami dengan mudah.