pytorch

Tutorial Dasar PyTorch : Tensor dan Autograd

Saya mulai menggunakan PyTorch semenjak mengerjakan Tesis di tahun 2017 akhir. PyTorch merupakan pengembangan dari Torch Framework yang dikembangkan oleh Facebook dan difokuskan sebagai framework berbahasa Python untuk proses komputasi Machine Learning, sehingga bisa disandingkan dengan framework sejenis seperti Tensorflow (dikembangkan oleh Google), Keras, Theano (sudah tidak dikembangkan), Caffe2, dan lainnya.

Menurut saya salah satu keunggulan PyTorch dibanding framework lain adalah sintaks yang digunakan tidak terlalu beda dengan fungsi-fungsi pada Numpy, bahkan rasanya dia memiliki sintaks yang lebih rapi dan sederhana

Untuk memulai belajar PyTorch, menurut saya ada dua komponen utama yang perlu dipahami terlebih dahulu, yakni Tensor dan Autograd.

PyTorch Tensor

Tensor adalah sebuah tipe data atau class yang merepresentasikan sebuah array, atau tepatnya ndimensional array karena tidak terbatas pada dimensi-dimensi tertentu. Pada contoh di bawah adalah tensor dengan dimensi 1 bernilai [1,2,3]

Continue reading
movie recmmender system

Membuat Movie Recommender System Dengan Python

Pada artikel sebelumnya telah saya bahas sekilas serba-serbi recommender system. Kali ini kita akan coba membuat movie recommender system yang akan merekomendasikan film yang belum pernah ditonton seorang user berdasarkan riwayat film yang telah dia rating sebelumnya (Content-Based Filtering). Implementasi recommender system ini akan menggunakan Python.

Step by Step Content-Based Recommender System

Sebelum kita mulai coding, saya akan tunjukkan perhitungan Content-based recommender system langkah per langkah. Sebenarnya ada banyak pengembangan dan metode lain yang dapat digunakan tapi untuk kali ini saya akan tunjukkan konsep dasar yang paling sederhana.

1. Buat matrix riwayat user

Content-based menggunakan riwayat user dan profil item sebagai bahan dasar saat merekomendasikan. Untuk movie recommender, pertama-tama kita buat matrix atau tabel yang barisnya merupakan daftar semua film yang telah dirating oleh user, dan kolomnya ada semua “fitur” atau profil dari sebuah film.

Continue reading

Sekilas tentang Recommender System

Beberapa waktu lalu saya dapat ajakan untuk memberi pengenalan AI ke teman-teman di prodi Komputer dan Sistem Informasi, Sekolah Vokasi UGM. Dengan durasi yang singkat dan background yang “baru” untuk belajar AI, istri saya mengusulkan untuk memberi materi yang sederhana tapi bisa langsung mengena dan diaplikasikan. Tercetuslah untuk mengisi materi tentang Recommender System, menurut saya ini adalah salah satu topik di AI yang bisa dipelajari sekaligus di-coding dalam waktu kurang dari 3 jam.

Apa itu Recommender System?

Recommender system adalah sistem yang perekomendasi sesuatu item yang sering kita temui sehari-hari, misalnya di amazon.com atau e-commerce lain, kita sering mendapat rekomendasi tentang item yang seharusnya kamu beli. Di youtube atau spotify, kita juga mendapat rekomendasi tentang video atau lagu yang harusnya kita mainkan. Contoh lain lagi adalah (salah satu favorit saya) Movielens. Salah satu pioneer dalam riset sistem rekomendasi yang merekomendasikan film berdasarkan rating-rating film yang telah kita berikan.

Tentu saja metode yang digunakan pada platform-platform tersebut bukanlah algoritma yang di-coding dalam 3 jam. Mereka terus memperbarui menggunakan algoritma-algoritma terbaik mereka untuk merekomendasikan suatu item. Dengan menggunakan algoritma yang tepat, beberapa platform seperti amazon atau youtube dapat meningkatkan profit menggunakan recommender system.

Algoritma

Secara umum terdapat dua “sudut pandang” dalam pembuatan recommender system, yakni Content-Based dan Collaborative Filtering. Definisinya kira-kira seperti ini:

Content-Based Filtering: Kita buat profil user, misal melalui riwayat aktivitasnya terhadap item-item lain (like/dislike/rating, dsb.). Lalu ketika kita akan merekomendasikan sebuah item, kita lihat profil sebuah item apakah akan disukai atau tidak berdasarkan profil user tersebut.

Content-Based Recommender System

Collaborative Filtering: Kita merekomendasikan suatu item, berdasarkan kecocokan profil user dengan profil user yang lain. Misalnya, kebanyakan user yang suka produk A juga suka produk B, maka jika ada user lain yang suka produk A, kita bisa rekomendasikan produk B.

Collaborative Recommender System

Jika diperhatikan terdapat perbedaan yang mencolok antara kedua sudut pandang tersebut, masing-masing mempunyai plus dan minusnya. Beberapa catatan yang saya miliki:

  • Content-Based Filtering membutuhkan profil dari sebuah item. Artinya kita butuh fitur / karakteristik sebuah item. Misalnya, untuk buku ini bisa berarti Tema, Genre, Penulis, Tahun Terbit, dsb. Terkadang pada beberapa item hal ini sulit untuk dicari. Misalnya kita ingin merekomendasikan suatu “Tempat/Lokasi”
  • Collaborative Filtering membutuhkan profil dari user lain. Jika sistem yang kita buat masih “baru” mendapatkan profil user lain akan sulit dan kurangnya informasi bisa jadi menghasilkan hasil yang tidak sesuai. Bisa dibayangkan ketika sistem kita hanya ada dua user. Lalu user 1 beli item A dan item B, dan user 2 beli item A. Karena hanya terdiri dari dua user, tentu kita tidak bisa langsung bilang user 2 akan suka item B kan? karena bisa jadi item B yang dibeli user sama sekali tidak ada “hubungan” dengan item A.
  • Masalah kurangnya data di awal disebut dengan Cold Start Problem. Masalah tersebut dapat lebih diminimalkan (bukan dihilangkan) pada Content-Based Filtering karena kita tidak membutuhkan banyak riwayat user. User yang telah melakukan aktivitas “sebentar” sudah bisa mendapat rekomendasi yang cukup baik.
  • Seperti yang disinggung sebelumnya, Collaborative Filtering dapat memunculkan relasi dua buah item yang memiliki perbedaan profil yang tinggi tapi memiliki kedekatan secara “makna” misalnya, Payung dan Obat Flu sering dibeli secara bersamaan walaupun keduanya memiliki profil yang berbeda.
  • Content Based juga cocok untuk merekomendasikan suatu item yang sangat jarang di-“sentuh” semua user. Misalnya item yang tidak laku-laku. Hal ini bisa membantu meningkatkan profit dengan merekomendasikan item tersebut yang cocok dengan profil user tertentu.
  • Terdapat lebih banyak metode atau algoritma yang dapat digunakan pada Collaborative Filtering. Berbeda dengan algoritma Content-Based yang kebanyakan adalah “searching dan matching” pada Collaborative Filtering terdapat beragam metode dari yang sederhana hingga rumit.

Pada kenyataannya kebanyakan orang menggunakan teknik hybrid pada sistem rekomendasinya. Menggabungkan Content-Based dan Collaborative Filtering dengan rule-rule yang sesuai.

Pada post selanjutnya saya akan tunjukkan implementasi movie recommender system menggunakan Python. Codingannya tidak terlalu panjang tapi hasilnya sudah cukup baik untuk sistem rekomendasi.

Catatan: Beberapa waktu lalu saya sempat mendapat task recommender system yang cukup menarik, yakni Implicit Feedback. Implicit Feedback adalah kasus pada recommender system di mana kita tidak mengetahui aksi yang dilakukan positif atau negatif, misalnya “view” atau “click”. Pendekatan solusi kasus ini bisa menggunakan salah satu algoritma collaborative filtering yang disebut Alternating Least Square (ALS). Task ini menunjukkan masih banyak hal yang dapat di eksplor di recommender system

Sumber gambar:
– cover dari compfight.com
– icon dari flaticon.com

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.

Mengenal Google Colab

Apa itu Google Colab?

Seperti Google Drive, Google Doc, dan sebagainya, Google Colab adalah salah satu produk Google berbasis cloud yang bisa kita gunakan secara gratis. Perbedaannya adalah Google Colab dibuat khusus untuk para programmer atau researcher yang mungkin kesulitan untuk mendapatkan akses komputer dengan spek tinggi. Google Colab adalah coding environment bahasa pemrograman Python dengan format “notebook” (mirip dengan Jupyter notebook), atau dengan kata lain Google seakan meminjami kita komputer secara gratis! untuk membuat program oleh Google.

Saya sendiri beberapa kali telah menggunakan Google Colab untuk beragam keperluan dan merasakan banyak manfaatnya, beberapa manfaat yang saya rasakan:

  • Free GPU! Google Colab memudahkan kita untuk menjalankan program pada komputer dengan spek tinggi (GPU Tesla, RAM ~12GB, Disk ~300GB yang masih bisa sambung dengan Google Drive, akses internet cepat untuk download file besar) dan running dalam waktu yang lama (Google Colab mengizinkan kita untuk merunning program hingga 12 jam). Karenanya, bagi teman-teman yang ingin belajar Deep Learning tidak perlu khawatir lagi akan terhalang sulitnya mendapatkan akses komputer dengan spek tinggi.
  • Colaborate! Google Colab juga memudahkan kita berkolaborasi dengan orang lain dengan cara membagi kodingan secara online (mirip Google Doc). Kita bisa lebih mudah bereksperimen secara bersamaan, atau sekadar menggunakan fitur ini untuk mempelajari codingan orang lain yang telah rapi (karena format notebook)
  • Mudah berintegrasi! Google Colab terbilang sangat fleksibel dalam hal integrasi. Kita dapat dengan mudah menghubungkan Google Colab dengan jupyter notebook di komputer kita (local runtime), menghubungkan dengan Google Drive, atau dengan Github
  • Fleksibel! Salah satu yang saya favoritkan adalah kita bisa dengan mudah merunning deep learning program via HP! ya karena pada esensinya Google Colab hanya perlu running di browser, kita bisa mengawasi proses training (atau bahkan coding) via browser smartphone kita selama smartphone kita terhubung dengan Google Drive yang sama.

Bagimana cara menggunakannya?

Seperti Aplikasi Google pada umumnya, yang kita butuhkan adalah akun Google dan silakan ke https://colab.research.google.com/. Setelah itu kita akan disuguhkan tampilan sebagai berikut:

tampilan google colab

Untuk membuat notebook baru, cukup klik New Python 3 Notebook (atau Python 2 tergantung apa yang akan digunakan) lalu kita akan dibawa ke halaman yang mirip dengan Jupyter Notebook. Nantinya, setiap notebook yang kita buat akan disimpan di Google Drive kita.

tampilan google colab 2

Pengaturan GPU

Jika kita ingin menjalankan program Python kita menggunakan GPU (atau bahkan TPU), kita cukup perlu klik “Edit > Notebook Settings”, lalu pada bagian “Hardware Accelerator” pilih GPU. Saat tulisan ini dibuat GPU yang disediakan adalah Nvidia Tesla dan sudah terinstall Cuda (software “penghubung” komputasi menggunakan GPU) versi terbaru.

mengatur gpu google colab

Hal-hal lain seputar Google Colab

Di bagian ini saya akan menjelaskan catatan-catatan tambahan penggunaan Colab yang tidak wajib kalian tahu, tapi siapa tahu akan bermanfaat nantinya.

Pip Package Installation

Ketika kita butuh instal python package di Colab, kita bisa melakukan instalasi menggunakan pip.

Jika diperhatikan perintahnya sama seperti perintah instalasi pip pada umumnya, hanya saja bedanya di awali dengan tanda !. Tanda tersebut digunakan sebagai penanda bahwa perintah yang akan kita jalankan adalah command line. Kita juga bisa menggunakan tanda ! untuk perintah terminal lain seperti !wget untuk mendownload dataset, !gzip untuk mengextract file zip, !cp untuk mengcopy file, dan sebagainya.

Menghubungkan dengan Google Drive

Google Colab akan mereset notebook beserta semua temporary filenya maksimal 12 jam sekali. Karenanya akan lebih baik jika file yang akan kita gunakan atau kita hasilkan tersimpan dengan rapi di Google Drive. Kita bisa melakukan hal tersebut dengan menjalankan program di bawah

Jika perintah di atas dijalankan, maka kita akan diberikan URL yang akan mengantarkan kita ke halaman permohonan akses Google Drive. Jika ktia sudah mengizinkan, kita akan diberikan kode yang dapat dituliskan di kolom kecil di akhir output tersebut.

Setelah terhubung, maka akan tampak daftar file di bagian kiri Notebook

Untuk mengakses file-file tersebut, kita arahkan proses load / save ke path drive/My Drive/FOLDERTUJUAN

Mengupload file ke Colab

Alternatif lain jika tidak ingin menghubungkan Google Colab ke Google Drive adalah dengan mengupload langsung file yang diperlukan ke Colab. Colab menyediakan tempat penyimpanan file sementara yang akan direstart (dihapus) dalam rentangan waktu tertentu.

Upload file ke Google Colab dengan perintah berikut:

Jika perintah di atas di-run akan memunculkan kotak dialog untuk mengupload file. Perintah di atas cukup praktis untuk mengupload file-file kecil (bukan dataset besar, lebih mudah diletakkan di drive)

Pengaturan tema

Bagi yang suka coding dengan “night mode”, Colab juga menyediakan pilihan untuk mengubah tema notebooknya menjadi gelap. Pengubahan tema dilakukan di “tools” > “preferences” > “site”

dark google colab

Selain itu Colab juga menyediakan beberapa “hiburan” lain untuk diatur semisal memunculkan kucing (“kitty mode”) atau anjing (“corgy mode”) di atas layar atau juga percikan api (“power level”) jika mengetik panjang. Ini semua bisa ditemukan di “tools” > “preferences” > “miscellaneous”

Penutup

Saya pribadi sangat merasa terbantu hingga saat ini dengan adanya Google Colab. Saya jadi tidak perlu repot izin pinjam komputer lab atau mengusulkan pembelian komputer spek tinggi di kantor. Saya sudah menggunakan Colab untuk beberapa projek Deep Learning yang tidak terlalu besar, dan sampai saat ini kesannya positif, lumayan untuk belajar atau bahkan untuk menghasilkan model yang baik di kasus-kasus sederhana. Batasan 12 jam running juga tidak terlalu menghalangi karena dengan spek komputer yang sudah baik, proses running jadi tidak perlu selama itu kok.

Selamat mencoba! dan semoga bermanfaat!