Word Embedding Bahasa Indonesia menggunakan Fasttext (Part 1.5)

Updated 11 Juli 2019: Fasttext released version 0.9.1

Pada artikel sebelumnya saya sempat menuliskan bagaimana menggunakan Gensim untuk me-load pre-trained model word embedding FastText. Ternyata metode tersebut “kebetulan” mudah digunakan untuk data bahasa Indonesia. Ketika kita memilih bahasa lain yang memiliki ukuran data lebih besar, menggunakan Gensim bisa jadi memunculkan masalah karena untuk me-load pre-trained model FastText, Gensim membutuhkan resource RAM yang cukup tinggi

Sebagai contoh jika kita coba me-load pre-trained model bahasa Inggris di Google Colab yang memiliki kapasitas RAM 12GB, Google Colab akan crash karena notebook kita menggunakan sumberdaya melebihi yang disediakan.

Berikut contoh program untuk me-load model bahasa Inggris menggunakan Gensim (detail sintaks program sebelumnya sudah sempat saya bahas di post sebelumnya)

Dan hasilnya, RAM kita yang 12GB itu secara perlahan akan habis digunakan. Lalu berakhir Google Colab kita akan mengalami crash dengan pesan berikut:

Untuk itu ada cara lain yang ingin saya bahas singkat di post ini bagaimana cara me-load pre-trained model Fasttext jika RAM kita terbatas

Menggunakan Fasttext Python Library

Seperti yang telah saya singgung di artikel sebelumnya, terdapat dua library yang dapat kita gunakan saat ingin menerapkan FastText di Python. Yang pertama adalah menggunakan Gensim, dan yang kedua adalah menggunakan package resmi dari FastText. Dokumentasinya dapat dibaca di halaman github ini.

Sedikit trivia, sebenarnya package FastText hanya tersedia untuk bahasa C++ dan dijalankan menggunakan command line. Sedangkan versi Python ini awalnya dibuat lebih dulu oleh orang Indonesia, yakni Bayu Aldiansyah. Lalu package ini dilanjutkan pengembangannya oleh tim Facebook AI Research.

Proses Instalasi

Di versi terbaru, yakni 0.9.1, Proses instalasi cukup dilakukan melalui pip dengan menjalankan perintah di bawah.

Setelah terinstall, kita dapat me-load library fastText pada program python kita menggunakan perintah

Yang menurut saya kurang dari package ini adalah dokumentasinya yang masih sederhana. Saya perlu beberapa kali membaca kode sumber aslinya untuk melihat fitur-fitur yang ada pada package ini.

Load Pre-trained Model

Untuk proses me-load pre-trained model, package python fastText juga sama meminta kita untuk menyiapkan file *.bin nya bukan file *.vec nya. (bedanya apa? bisa baca post sebelumnya) Ya, walapun kita sebenarnya bisa saja mengconvert file *.vec menjadi *.bin. Sintaks untuk me-load adalah berikut:

Proses loading akan membutuhkan waktu lama, tapi tenang, RAM yang akan digunakan totalnya akan lebih sedikit dibanding saat menggunakan Gensim. Total RAM yang saya gunakan untuk me-load menggunakan package python FastText hanya sekitar 7GB

Sehingga proses mengubah kata menjadi vektor pun dapat dilakukan tanpa mengalami crash. Untuk dokumentasi lengkap fungsi-fungsi yang ada bisa lihat di file kode sumbernya. Misalnya, untuk mendapatkan vektor dari sebuah kata kita cukup menginputkan kata tersebut layaknya dictionary pada Python:

Selain itu, menggunakan Python FastText ini kita tidak hanya bisa mendapatkan vektor dari sebuah kata, tetapi juga seluruh kalimat, menggunakan method get_vector_sentence:

Sekian, semoga bermanfaat.

About the author

Rian Adam

Lecturer at Universitas Islam Indonesia; Machine Learning Enthusiast

View all posts

11 Comments

  • terima kasih mas artikelnya bagus banget,, sebenarnya saya butuh yang begian mas,tapi saya gak bisa ngoding, mau instal aja binggung,, bisa di beri tutor cara instalnya step-by step biar pemula seperti saya bisa lebih memahami

    oiya mas, ini mengunakan vps ya atau di instal langsung di komputer & sama gak bisa ngoding seperti saya kira2 bisa gak ya mengunakanya

    terima kasih ya mas

  • mas, saya mau nanya, cara install library fasttext di anaconda windows gimana yah?
    jika saya running pip, error

    • Pada halaman resminya: https://pypi.org/project/fasttext/ Fasttext memberikan dua opsi instalasi, menggunakan pip dan melalui git. Fasttext lebih menyarankan proses instalasi menggunakan git:

      jika bagian akhir masih tidak bisa, bisa dicoba menggunakan:

  • Dear Mr. Rian Adam, terima kasih sekali, akhirnya saya menemukan tutorial NLP bahasa Indonesia yang sangat bermutu 😀
    Gini kak, saya lagi mengerjakan tugas akhir di bidang software engineering dan di salah satu bagian komputasinya ada yang menghitung similarity untuk mengecek persamaan aktivitas.
    Saat ini saya menggunakan Spacy untuk NLP, namun similarity function yang ada (saya menggunakan pre-trained model en_core_web_lg) sepertinya bekerja tidak sesuai keinginan karena nilai similarity (enter password dan input password) < (enter password dan encrypt password).
    Saya baca-baca lagi mungkin karena similarity di NLP itu ada 2 konteks, yaitu Related dan Interchangeable. Nah, yang saya perlukan adalah yang interchangeable, bukan related. Jadi meskipun dari word vector representation itu berdekatan tapi kalau tidak interchangeable maka tidak dianggap similar.
    Apakah saya bisa melakukan hal tersebut? terima kasih sebelumnya ^_^

    • Salam Mas Syauqi, terima kasih sudah berkunjung 🙂

      Saya sudah cek cosine similarity menggunakan fasttext antara kata input vs enter dan kata encrypt vs enter. Hasilnya:
      1. Benar kata Mas Syauqi, similarity input vs enter lebih kecil daripada encrypt vs enter, tetapi
      2. Keduanya memiliki nilai similarity yang kecil 0.23 vs 0.24. Menurut saya artinya kata input dan encrypt bisa dibilang sama-sama tidak memiliki relasi dengan kata enter.

      Bicara tentang interchangeable, saya barusan diskusi sama istri (sama-sama pemilik blog ini, lebih giat NLP, dan lebih jago bahasa Inggris), dan menurut kami kata “input” dan kata “enter” dalam banyak konteks memang tidak dapat saling menggantikan. Sebagai contoh:
      – he gives me an input (tidak bisa digantikan kata enter)
      – the main input (tidak bisa digantikan kata enter)
      – the drug enters the bloodstream (tidak bisa digantikan kata input)

      Dan kedua kata tersebut memang bukan sinonim berdasarkan thesaurus online. Sebagai perbandingan, saya hitung cosine similarity dari kata “advice” vs “input”. Berdasarkan thesaurus online, kata “advice” memiliki sinonim dengan kata “input”. Hasilnya, nilai similaritynya adalah 0.36, lebih tinggi dari kedua kata sebelumnya.

      Maka saran dari kami:
      1. Train ulang model yang akan digunakan menggunakan dataset yang memiliki konteks yang sesuai. Untuk fasttext train sendiri modelnya pernah saya bahas di blog ini juga.
      2. Gunakan contextual word embedding seperti ELMo. ELMo menghitung nilai embedding berdasarkan pemakaiannya dalam kalimat, sehingga bisa jadi kata “input” dan “enter” memiliki similarity yang lebih tinggi.

      Semoga membantu dan bermanfaat.

  • halo mas, saya mau tanya. jika model dalam word embeddings seperti word2vec,glove dan fast text menggunakan parameter gold standard bagaimana step by step nya ya? , apa yang perlu saya pelajari?

  • halo mas, saya mau tanya jika saya membandingkan 3 metode ddalam word embeddings seperti word2vec,glove dan fasttext menggunakan gold standard bagaimana ya prosesnya ya? terimakasih.

Leave a Reply