FastText merupakan open source library, ringan dan gratis untuk mempelajari representasi kata dan pengklasifikasi kata. FastText dapat berjalan pada perangkat keras pada umumnya. Library ini dikembangkan oleh Facebook yang termasuk bagian dari perpustakaan Gensim.
FastText dibagun atas pengembangan dari library Word2Vec yang telah cukup populer sebagai library word embedding. FastText juga memberikan opsi algoritma pelatihan CBOW dan Skipgram, seperti yang ada pada Word2Vec. FastText memiliki kelebihan dibandingkan Word2Vec, salah satunya adalah kemampuan FastText untuk menangani kata-kata yang belum pernah ditemui sebelumnya atau juga dikenal dengan Out of vocabulary (OOV).
Cara Kerja FastText
Dalam dokumentasi FastText tidak memberikan secara rinci mengenai langkah-langkah algoritma ini bekerja. Singkatnya implementasi FastText dapat bekerja dalam beberapa tahapan berikut [1].
FastText mewakili setiap kata sebagai karakter n-gram. Misalnya, jika n = 3, dalam kata “artificial”, maka FastText akan merepresentasikan kata ini seperti dalam bentuk tanda kurung siku berikut <ar, art, rti, tif, ifi, fic, ici, ial, al>. Sehingga vektor kalimat atau dokumen diperoleh dengan rata-rata word embedding kata / n-gram.
Kemudian proses klasifikasi dilakukan secara linear clasification (multinomial logistic regression), di mana proses ini menangani setiap kalimat maupun dokumen dalam fitur.
Representasi teks tersebut berperan sebagai hidden state yang dapat berbagi antara feature dan class [3].
Selanjutnya lapisan softmax berguna untuk mendapatkan distribusi probabilitas melalui class yang telah ditentukan. FastText dapat digunakan untuk menangani masalah dalam jumlah class yang besar. Hal ini dikarenakan FastText memiliki hirarki softmax untuk mempercepat proses komputasi. Hierarchial Softmax bekerja berdasarkan Huffman Coding Tree yang digunakan untuk mengurangi kompleksitas komputasi O(kh) menjadi O(h log2(k)), di mana k adalah jumlah kelas dan h adalah dimensi representasi teks.
Perbedaan FastText Dengan Word2Vec
Word2Vec menangani setiap kata dalam bentuk corpus seperti entitas vektor yang dibuat untuk masing-masing kata, sedangkan FastText membagi kata menjadi n-gram. Hal ini berguna untuk mendapatkan makna suatu kata dari kata-kata disekitarnya [2].
Dikarenakan FastText merepresentasikan setiap kata dalam karakter n-gram, maka proses training biasanya lebih lama dibandingkan menggunakan Word2Vec
Word2Vec hanya melihat kata-kata disekitarnya atau secara makna (semantic), namun tidak melihat penting tidaknya kata tersebut dengan mempertimbangkan seberapa sering kata itu muncul (count). Sementara FastText mampu menangani kata baik secara semantik dan count. Sehingga FastText bekerja secara co-occurance (kata yang muncul secara berurutan, mis. makan nasi, minum susu).
FastText dapat menangani kata yang tidak ada dalam kamus kata (out of vocabulary). Misalnya kata yang mengandung imbuhan seperti “menggunakan” vs “guna” yang sebenarnya secara semantik mirip hanya beda dalam imbuhannya.
Tutorial Training Model FastText
Proses training FastText dapat dilakukan menggunakan C++ dan Library Gensim Python. Untuk langkah-langkahnya ada pada postingan saya berikut.
Referensi
A. Joulin, E. Grave, P. Bojanowski, and T. Mikolov, “Bag of Triks for Efficient Text Classification,”
E. Doğan and B. Kaya, “Deep Learning Based Sentiment Analysis and Text Summarization in Social Networks,” 2019 International Artificial Intelligence and Data Processing Symposium (IDAP), pp. 1–6, 2019.
https://datascience.co.il/post/how-does-fasttext-classifier-work-under-the-hood