Pengenalan Autoencoder : neural network untuk kompresi data

Autoencoder

Autoencoder adalah salah satu varian dari jaringan saraf tiruan (JST) yang secara umum digunakan untuk meng-“encode” suatu data. Berbeda dengan arsitektur JST pada umumnya yang dilatih untuk mengklasifikasi atau menghitung nilai regresi dari masukan, autoencoder dilatih untuk dapat menghasilkan output yang sama dengan inputnya. Autoencoder termasuk pada kategori Unsupervised Learning karena dilatih dengan menerima data tanpa label.

Traditional Neural Network vs Autoencoder

Pada ilustrasi tersebut, arsitektur di bagian atas adalah arsiktektur JST yang digunakan untuk mengklasifikasi citra bahan makanan di supermarket. Pada bagian bawah merupakan arsitektur autoencoder.

Lalu apa tujuannya sebuah model dilatih untuk menghasilkan citra yang sama?

Jika diperhatikan pada ilustrasi di atas, bagian yang menarik adalah bagian tengah autoencoder yang berupa sebuah vektor kumpulan neuron (ditandai dengan kotak warna kuning). Bagian tengah ini biasanya memiliki jumlah neuron yang lebih kecil dibanding layer di kanan atau kirinya (termasuk layer input dan outputnya). Sehingga jika model dapat dilatih dengan baik, bisa dikatakan bagian tengah ini merupakan representasi sederhana dari citra yang menjadi input. Apa maksud representasi sederhana? Karena vektor ini diperoleh dari citra input melalui arsitektur jaringan saraf tiruan (Encode), lalu dari vektor yang kecil ini bisa dibuat kembali citra yang serupa dengan inputnya (Decode).

Continue reading
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.

Continue reading

Word Embedding Bahasa Indonesia menggunakan Fasttext (tanpa Gensim)

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)

# Install Gensim
!pip install --upgrade gensim

# Download dan unzip dataset
!wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.en.300.bin.gz
!gunzip cc.en.300.bin.gz
# Load model
from gensim.models.fasttext import FastText
model = FastText.load_fasttext_format('cc.en.300.bin')

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.

Continue reading

Word Embedding Bahasa Indonesia menggunakan Fasttext (dengan Gensim)

Mengenal Word Embedding

Word embedding mudahnya adalah istilah yang digunakan untuk teknik mengubah sebuah kata menjadi sebuah vektor atau array yang terdiri dari kumpulan angka.

Ketika kita akan membuat model machine learning yang menerima input sebuah teks, tentu machine learning tidak bisa langsung menerima mentah-mentah teks yang kita miliki. Cara “tradisional” untuk membaca teks tersebut adalah sebagai berikut:

  1. Buat kamus kata dengan cara mendaftar semua kata yang ada di dataset
  2. Setiap menerima sebuah string kata, string tersebut diubah menjadi sebuah integer dengan memberinya nomor. Penomoran ini bisa ditentukan berdasarkan urutan di kamus kata yang kita miliki. Misalnya pada ilustrasi di bawah, string “Makan” menjadi angka 3, string “Lari” menjadi angka 5, dst.
  3. Angka-angka tersebut kita ubah lagi menjadi sebuah vektor (array 1 dimensi) yang memiliki panjang sepanjang banyak kata yang kita miliki di kamus. Array tersebut hanya akan bernilai 1 atau 0 (disebut one hot encoding). Nilai 1 diposisikan pada indeks yang merupakan nomor kata tersebut sedangkan elemen lainnya bernilai 0. Contohnya untuk kata “makan”, dengan banyak kosakata yang kita miliki adalah 100 kata, maka dari kata tersebut kita akan memperoleh sebuah vektor dengan panjang 100 yang berisi 0 semua kecuali pada posisi ke 3 yang bernilai 1.
Ilustrasi mengubah string menjadi one-hot encoding
Continue reading