tutorial fasttext bahasa indonesia

Membuat Model Word Embedding Fasttext Bahasa Indonesia

Artikel ini adalah kelanjutan dari dua artikel sebelumnya, word embedding dengan Fasttext bagian 1 dan word embedding dengan Fasttext bagian 1.5. Pada artikel sebelumnya kita berfokus menggunakan pretrained model Fasttext Bahasa Indonesia menggunakan package gensim dan package Fasttext Python. Kali ini kita akan mencoba membuat model word embedding Fasttext Bahasa Indonesia sendiri menggunakan package Fasttext python.

Apa yang dibutuhkan?

Dalam membuat model word embedding Fasttext Bahasa Indonesia, yang kita butuhkan pertama adalah dataset. Untuk menghasilkan model yang baik, diperlukan dataset yang cukup besar. Karena ukuran dataset yang bisa sangat besar, disarankan menggunakan komputer dengan RAM berkapasitas besar, atau kalau saya pribadi menggunakan Google Colab.

Pada artikel ini kita akan menggunakan dataset dari Wikipedia bahasa Indonesia. Dataset ini cukup besar, saya hanya akan menggunakan sebagiannya saja. Dataset bisa didownload di link berikut:

https://dumps.wikimedia.org/idwiki/latest/idwiki-latest-pages-articles.xml.bz2

Karena itu adalah dataset semua artikel terakhir (latest) bahasa Indonesia yang ada di Wikipedia, maka ukuran dataset tersebut bisa terus bertambah setiap harinya (dataset wikipedia bahasa Inggris ukurannya telah mencapai >10GB), Saya menyediakan dataset Wikipedia bahasa Indonesia dengan ukuran ~500MB yang saya ambil pada tanggal 7 Agustus 2019. Dataset tersebut bisa didownload di sini.

Format dataset yang diminta Fasttext sebenarnya cukup sederhana yakni sebuah text file dengan encoding utf-8 berisi kalimat-kalimat bahasa Indonesia (bisa ditulis beberapa baris berbeda jika konteks dari teks berbeda). Jadi sangat mungkin untuk membuat dataset sendiri jika kesulitan menggunakan dataset yang terlalu besar.

Yang disiapkan juga ada beberapa package yang perlu diinstall. Proses pelatihan model akan dilakukan menggunakan package Fasttext python yang dapat diinstall melalui pip:

Kita juga masih membutuhkan package gensim untuk mengolah data Wikipedia yang belum sesuai format:

Mengolah Dataset

Menggunakan Gensim kita bisa me-load dataset tanpa perlu mengekstraknya terlebih dahulu, menggunakan WikiCorpus:

Kode di atas menggunakan dataset terbaru dari artikel di Wikipedia, jika menggunakan dataset yang saya sediakan ubah latest menjadi 07082019. Pastikan juga memberi nilai parameter lemmatize menjadi False dan dictionary dengan {}, karena jika tidak proses loading dataset akan sangat lama!

Data asli dari Wikipedia tidaklah sesuai fomat dengan data yang diminta Fasttext. Kita perlu melakukan pengolahan terlebih dahulu. Kode dibawah ini dijalankan untuk mengolah dataset menjadi format yang sesuai:

Kode diatas akan membuat file baru bernama wiki-id-formatted.txt yang sesuai dengan format Fasttext. Artikel yang sama akan di tulis dalam satu baris yang sama. Saya menghentikan iterasi pada 100,000 artikel saja, hal ini untuk mempercepat proses pelatihan. Saat ini terdapat lebih dari 300,000 artikel Bahasa Indonesia di Wikipedia. Proses di atas di Google Colab berlangsung selama ~8 menit.

Proses Pelatihan

Setelah datasetnya siap, proses pelatihan model word embedding Fasttext Bahasa Indonesia tidaklah sulit. Cukup jalankan perintah di bawah:

Parameter model=skipgram adalah pilihan metode atau algoritma untuk membuat model. Selain skipgram, Fasttext juga menyediakan metode cbow. Ukuran dimensi secara default adalah 100, untuk mengubahnya tambahkan parameter dim, misalnya untuk dimensi 300, tambahkan menjadi:

Proses pembuatan model dengan 100 dimensi di Google Colab, berlangsung sekitar 110 menit. Karena prosesnya lama, pastikan untuk menyimpan model yang telah jadi menggunakan fungsi save_model:

Model Fasttext Bahasa Indonesia

Setelah selesai pelatihan maka model yang sudah jadi kini sudah bisa digunakan. Kita bisa mendapatkan vektor kata dengan pemanggilan seperti dictionary, misalnya untuk mendapatkan vektor kata “jakarta”:

Perlu diingat, model word embedding yang kita buat adalah model dari Fasttext python. Model ini sedikit berbeda jika kita membuatnya menggunakan Gensim, model Fasttext Python tidak menyediakan banyak fungsi.

Misalnya di Gensim kita pernah tahu fungsi most_similar untuk mencari kata-kata yang berhubungan dengan kata yang kita inputkan, di model Fasttext fungsi itu harus dibuat sendiri. Kita bisa melakukan iterasi dari semua kata yang ada lalu mencari kata dengan cosine similarity nya paling besar.

Fungsi most_similar diatas akan menghasilkan 10 kata yang memiliki kedekatan dengan kata “jakarta” tetapi bukan kata aslinya, haslinya adalah:

Dan sesuai dengan teori word embedding, ada kata yang secara “bentuk” tidak mirip dengan “jakarta” tetapi memiliki kedekatan secara makna, seperti nama kota: “bekasi”, “surabaya”, dan “bandung”.

Jika ingin mendalami fungsi-fungsi apa saja yang dapat digunakan di model word embedding fasttext, bisa langsung baca dokumentasinya di repository githubnya. Sekian semoga bermanfat 🙂

Sumber gambar: flickr

About the author

Rian Adam

View all posts

Leave a Reply